Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
hextreme
hxt_seqDel
Commits
2b2bdfb7
Commit
2b2bdfb7
authored
Sep 27, 2020
by
Célestin Marot
Browse files
bug solved, adjacencies more efficient
parent
258d20c4
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/hxt_tetrahedra.c
View file @
2b2bdfb7
...
...
@@ -24,6 +24,7 @@ Author: Célestin Marot (celestin.marot@uclouvain.be) */
#include <float.h>
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define MAX(x,y) ((x) > (y) ? (x) : (y))
static
const
uint64_t
NEIGH_H
=
UINT64_C
(
0xFFFFFFFFFFFFFFFC
);
...
...
@@ -39,7 +40,7 @@ typedef struct HXT_Delaunay_struct {
uint64_t
num_deleted
;
uint64_t
size_deleted
;
uint64_t
*
buffer
;
void
*
buffer
;
}
Delaunay_t
;
static
inline
uint64_t
walking2cavity
(
mesh_t
*
mesh
,
uint64_t
curTet
,
const
uint32_t
vta
);
...
...
@@ -226,7 +227,7 @@ status_t HXT_tetrahedra_compute(mesh_t* mesh){
HXT_CHECK
(
HXT_malloc
(
&
Del
.
tmp
,
Del
.
size_tmp
*
sizeof
(
Del
.
tmp
[
0
]))
);
HXT_CHECK
(
HXT_malloc
(
&
Del
.
deleted
,
Del
.
size_deleted
*
sizeof
(
uint64_t
))
);
HXT_CHECK
(
HXT_malloc
(
&
Del
.
buffer
,
32
*
(
mesh
->
num_vertices
+
1
)
*
sizeof
(
uint64_t
))
);
HXT_CHECK
(
HXT_malloc
(
&
Del
.
buffer
,
MAX
(
sizeof
(
uint64_t
)
*
1024
,
sizeof
(
uint32_t
)
*
(
mesh
->
num_vertices
+
1
)))
);
uint64_t
curTet
=
0
;
// we always begin with the first tet. (index 0)
...
...
@@ -569,52 +570,53 @@ status_t diggingacavity(mesh_t* mesh, Delaunay_t* Del, uint64_t curTet, const ui
status_t
computeAdjacencies
(
mesh_t
*
mesh
,
Delaunay_t
*
Del
,
const
uint64_t
start
,
const
uint64_t
blength
){
if
(
blength
<=
60
){
// N+2<=32 => N<=30 => 2N<=60
// for each point p on the surface of the cavity, compute p-vti
uint64_t
*
buffer
=
Del
->
buffer
;
uint64_t
i
;
for
(
i
=
0
;
i
<
blength
;
i
++
){
uint32_t
*
Node
=
Del
->
tmp
[
i
].
node
;
buffer
[
Node
[
1
]
+
1
]
=
UINT32_MAX
;
buffer
[
Node
[
2
]
+
1
]
=
UINT32_MAX
;
buffer
[
Node
[
3
]
+
1
]
=
UINT32_MAX
;
}
uint64_t
npts
=
0
;
for
(
i
=
0
;
i
<
blength
;
i
++
)
{
uint32_t
*
Node
=
Del
->
tmp
[
i
].
node
;
if
(
buffer
[
Node
[
1
]
+
1
]
>
npts
){
buffer
[
Node
[
1
]
+
1
]
=
npts
++
;
}
Node
[
1
]
=
buffer
[
Node
[
1
]
+
1
];
if
(
buffer
[
Node
[
2
]
+
1
]
>
npts
){
buffer
[
Node
[
2
]
+
1
]
=
npts
++
;
}
Node
[
2
]
=
buffer
[
Node
[
2
]
+
1
];
if
(
buffer
[
Node
[
3
]
+
1
]
>
npts
){
buffer
[
Node
[
3
]
+
1
]
=
npts
++
;
}
Node
[
3
]
=
buffer
[
Node
[
3
]
+
1
];
uint32_t
*
bufferu32
=
Del
->
buffer
;
uint64_t
i
;
for
(
i
=
0
;
i
<
blength
;
i
++
){
uint32_t
*
Node
=
Del
->
tmp
[
i
].
node
;
bufferu32
[
Node
[
1
]
+
1
]
=
UINT32_MAX
;
bufferu32
[
Node
[
2
]
+
1
]
=
UINT32_MAX
;
bufferu32
[
Node
[
3
]
+
1
]
=
UINT32_MAX
;
}
HXT_ASSERT
(
Node
[
1
]
<=
mesh
->
num_vertices
);
HXT_ASSERT
(
Node
[
2
]
<=
mesh
->
num_vertices
);
HXT_ASSERT
(
Node
[
3
]
<=
mesh
->
num_vertices
);
uint64_t
npts
=
0
;
for
(
i
=
0
;
i
<
blength
;
i
++
)
{
uint32_t
*
Node
=
Del
->
tmp
[
i
].
node
;
if
(
bufferu32
[
Node
[
1
]
+
1
]
>
npts
){
bufferu32
[
Node
[
1
]
+
1
]
=
npts
++
;
}
Node
[
1
]
=
bufferu32
[
Node
[
1
]
+
1
];
if
(
bufferu32
[
Node
[
2
]
+
1
]
>
npts
){
bufferu32
[
Node
[
2
]
+
1
]
=
npts
++
;
}
Node
[
2
]
=
bufferu32
[
Node
[
2
]
+
1
];
if
(
bufferu32
[
Node
[
3
]
+
1
]
>
npts
){
bufferu32
[
Node
[
3
]
+
1
]
=
npts
++
;
}
Node
[
3
]
=
bufferu32
[
Node
[
3
]
+
1
];
HXT_ASSERT
(
Node
[
1
]
<=
mesh
->
num_vertices
);
HXT_ASSERT
(
Node
[
2
]
<=
mesh
->
num_vertices
);
HXT_ASSERT
(
Node
[
3
]
<=
mesh
->
num_vertices
);
}
}
uint64_t
*
bufferu64
=
Del
->
buffer
;
uint64_t
i
;
for
(
i
=
0
;
i
<
blength
;
i
++
)
{
buffer
[
Del
->
tmp
[
i
].
node
[
1
]
*
32
+
Del
->
tmp
[
i
].
node
[
2
]]
=
Del
->
tmp
[
i
].
bnd
+
3
;
buffer
[
Del
->
tmp
[
i
].
node
[
2
]
*
32
+
Del
->
tmp
[
i
].
node
[
3
]]
=
Del
->
tmp
[
i
].
bnd
+
1
;
buffer
[
Del
->
tmp
[
i
].
node
[
3
]
*
32
+
Del
->
tmp
[
i
].
node
[
1
]]
=
Del
->
tmp
[
i
].
bnd
+
2
;
buffer
u64
[
Del
->
tmp
[
i
].
node
[
1
]
*
32
+
Del
->
tmp
[
i
].
node
[
2
]]
=
Del
->
tmp
[
i
].
bnd
+
3
;
buffer
u64
[
Del
->
tmp
[
i
].
node
[
2
]
*
32
+
Del
->
tmp
[
i
].
node
[
3
]]
=
Del
->
tmp
[
i
].
bnd
+
1
;
buffer
u64
[
Del
->
tmp
[
i
].
node
[
3
]
*
32
+
Del
->
tmp
[
i
].
node
[
1
]]
=
Del
->
tmp
[
i
].
bnd
+
2
;
}
for
(
i
=
0
;
i
<
blength
;
i
++
)
{
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
1
]
=
buffer
[
Del
->
tmp
[
i
].
node
[
3
]
*
32
+
Del
->
tmp
[
i
].
node
[
2
]];
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
2
]
=
buffer
[
Del
->
tmp
[
i
].
node
[
1
]
*
32
+
Del
->
tmp
[
i
].
node
[
3
]];
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
3
]
=
buffer
[
Del
->
tmp
[
i
].
node
[
2
]
*
32
+
Del
->
tmp
[
i
].
node
[
1
]];
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
1
]
=
buffer
u64
[
Del
->
tmp
[
i
].
node
[
3
]
*
32
+
Del
->
tmp
[
i
].
node
[
2
]];
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
2
]
=
buffer
u64
[
Del
->
tmp
[
i
].
node
[
1
]
*
32
+
Del
->
tmp
[
i
].
node
[
3
]];
mesh
->
tetrahedra
.
neigh
[
Del
->
tmp
[
i
].
bnd
+
3
]
=
buffer
u64
[
Del
->
tmp
[
i
].
node
[
2
]
*
32
+
Del
->
tmp
[
i
].
node
[
1
]];
}
}
else
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment