59 assert( pt && pt1 &&
MG_EOK(pt1) );
64 while ( ++k < mesh->ne );
74 for(k=
mesh->
nenil; k<=mesh->nemax-1; k++){
87 MMG5_int mins,maxs,sum;
89 if ( !hash->
item )
return 0;
97 ph = &hash->
item[key];
100 if ( ph->
a == mins && ph->
b == maxs && ph->
s == sum )
105 if ( ph->
a == mins && ph->
b == maxs && ph->
s == sum )
return ph->
k;
125 MMG5_int k,kk,pp,l,ll,mins,mins1,maxs,maxs1,sum,sum1,iadr;
126 MMG5_int *hcode,*link,hsize,inival;
127 uint8_t i,ii,i1,i2,i3;
135 fprintf(stdout,
" ** SETTING STRUCTURE\n");
144 fprintf(stderr,
" Exit program.\n");
156 for (k=0; k<=
mesh->
ne; k++)
160 for (k=1; k<=
mesh->
ne; k++) {
162 if ( !
MG_EOK(pt) )
continue;
163 for (i=0; i<4; i++) {
171 sum = pt->
v[i1] + pt->
v[i2] + pt->
v[i3];
174 link[iadr] = hcode[key];
180 if (
mesh->
info.
ddebug ) fprintf(stdout,
" h- stage 2: adjacencies\n");
181 for (l=iadr; l>0; l--) {
182 if ( link[l] >= 0 )
continue;
193 sum = pt->
v[i1] + pt->
v[i2] + pt->
v[i3];
199 while ( ll != inival ) {
206 sum1 = pt1->
v[i1] + pt1->
v[i2] + pt1->
v[i3];
212 if ( mins1 == mins && maxs1 == maxs ) {
213 if ( pp != 0 ) link[pp] = link[ll];
241 MMG5_int k,kk,l,ll,jj;
242 MMG5_int max12,min12,max34,min34,mins,mins1,mins_b, mins_b1,maxs,maxs1;
244 MMG5_int *hcode,*link,hsize,inival;
245 uint8_t i,ii,i1,i2,i3,i4;
252 fprintf(stderr,
"\n ## Warning: %s: no re-build of adjacencies of prisms. "
253 "mesh->adjapr must be freed to enforce analysis.\n",__func__);
259 fprintf(stdout,
" ** SETTING PRISMS ADJACENCY\n");
263 printf(
" Exit program.\n");
282 for (i=0; i<2; i++) {
288 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
290 mins =
MG_MIN(min12,pp->
v[i3]);
292 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
294 maxs =
MG_MAX(max12,pp->
v[i3]);
297 mins_b = pp->
v[i1] + pp->
v[i2] + pp->
v[i3] -mins -maxs;
302 link[iadr] = hcode[key];
312 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
313 min34 =
MG_MIN(pp->
v[i3],pp->
v[i4]);
315 mins =
MG_MIN(min12,min34);
317 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
318 max34 =
MG_MAX(pp->
v[i3],pp->
v[i4]);
320 maxs =
MG_MAX(max12,max34);
328 link[iadr] = hcode[key];
334 if (
mesh->
info.
ddebug ) fprintf(stdout,
" h- stage 2: adjacencies\n");
335 for (l=iadr; l>0; l--) {
336 if ( link[l] >= 0 )
continue;
351 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
352 mins =
MG_MIN(min12,pp->
v[i3]);
354 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
355 maxs =
MG_MAX(max12,pp->
v[i3]);
357 mins_b = pp->
v[i1] + pp->
v[i2] + pp->
v[i3] - mins - maxs;
368 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
369 min34 =
MG_MIN(pp->
v[i3],pp->
v[i4]);
370 mins =
MG_MIN(min12,min34);
372 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
373 max34 =
MG_MAX(pp->
v[i3],pp->
v[i4]);
374 maxs =
MG_MAX(max12,max34);
383 while ( ll != inival ) {
397 min12 =
MG_MIN(pp1->
v[i1],pp1->
v[i2]);
398 mins1 =
MG_MIN(min12,pp1->
v[i3]);
400 max12 =
MG_MAX(pp1->
v[i1],pp1->
v[i2]);
401 maxs1 =
MG_MAX(max12,pp1->
v[i3]);
403 mins_b1 = pp1->
v[i1] + pp1->
v[i2] + pp1->
v[i3] - mins1 - maxs1;
414 min12 =
MG_MIN(pp1->
v[i1],pp1->
v[i2]);
415 min34 =
MG_MIN(pp1->
v[i3],pp1->
v[i4]);
416 mins1 =
MG_MIN(min12,min34);
418 max12 =
MG_MAX(pp1->
v[i1],pp1->
v[i2]);
419 max34 =
MG_MAX(pp1->
v[i3],pp1->
v[i4]);
420 maxs1 =
MG_MAX(max12,max34);
426 if ( mins1 == mins && maxs1 == maxs && mins_b1 == mins_b ) {
427 if ( jj != 0 ) link[jj] = link[ll];
461 MMG5_int adj,pradj,piv;
464 MMG5_int k,l,i1,i2,na,nb,ia,it1,it2, nr;
466 int ilist,nbdy,ipa,ipb;
467 int8_t iface,hasadja,i;
468 static int8_t mmgWarn0=0,mmgWarn1=0;
474 for (k=1; k<=
mesh->
nt; k++) {
477 if ( !
MG_EOK(ptt) )
continue;
479 for (l=0; l<3; l++) {
492 ph = &hash->
item[key];
496 if ( ph->
a == na && ph->
b == nb )
break;
508 for (ia=0; ia<6; ++ia) {
511 if ( (pt->
v[ipa] == na && pt->
v[ipb] == nb) ||
512 (pt->
v[ipa] == nb && pt->
v[ipb] == na))
break;
520 MMG3D_coquilFaceFirstLoop(
mesh,start,na,nb,iface,ia,list,&ilist,&it1,&it2,
521 &piv,&adj,&hasadja,&nbdy,1);
525 if ( adj == start ) {
529 fprintf(stderr,
"\n ## Warning: %s: at least 1 wrong boundary tag:"
530 " Only 0 or 1 boundary triangles founded in the shell of the edge\n",
557 fprintf(stderr,
"\n ## Warning: %s: problem in surface remesh"
558 " process. At least 1 shell of edge (%" MMG5_PRId
"-%" MMG5_PRId
") contains"
561 fprintf(stderr,
"\n ## Try to modify the hausdorff"
562 " number, or/and the maximum mesh.\n");
575 it2 = 4*pradj + iface;
577 if ( (!it1 || !it2) || (it1 == it2) ) {
586 if ( nbdy != ph->
s ) {
589 ptt->
tag[l] &= ~MG_NOSURF;
605 fprintf(stdout,
" %" MMG5_PRId
" required edges added\n",nr);
629 MMG5_int k,base,np,nc,nm,nre, ng, nrp;
637 for (k=1; k<=
mesh->
np; ++k) {
647 for (k=1; k<=
mesh->
ne; ++k) {
649 if ( !
MG_EOK(ptet) )
continue;
651 for ( i=0; i<4; ++i ) {
657 if ( (!
MG_VOK(ppt)) || (ppt->
flag==base) )
continue;
663 if (
ier < 0 )
return 0;
664 else if ( !
ier )
continue;
666 if ( (ng+nrp+nm) > 2 ) {
670 ppt->
tag &= ~MG_NOSURF;
674 else if ( (ng == 2) || (nrp == 2) || (nm == 2) ) {
679 else if ( (ng+nrp+nm) == 2 ) {
683 ppt->
tag &= ~MG_NOSURF;
686 else if ( ng == 1 && !nrp ){
688 ppt->
tag &= ~MG_NOSURF;
692 else if ( (ng+nrp+nm) == 1 ){
695 assert ( (ng == 1) || (nrp==1) || (nm==1) );
697 ppt->
tag &= ~MG_NOSURF;
702 assert ( 0 &&
"unexpected case");
711 fprintf(stdout,
" %" MMG5_PRId
" corner and %" MMG5_PRId
" required vertices added\n",nc,nre);
764 MMG5_int ia,ib,iph,iphp;
769 ph = &hash->
item[key];
771 if ( !ph->
a )
return 0;
772 else if ( ph->
a == ia && ph->
b == ib ) {
791 if ( ph->
a == ia && ph->
b == ib ) {
833 ph = &hash->
geom[key];
837 else if ( ph->
a == ia && ph->
b == ib ) {
846 if ( ph->
a == ia && ph->
b == ib ) {
861 MMG5_int ia,ib,iph,iphp;
866 assert ( hash->
siz );
871 ph = &hash->
geom[key];
873 if ( !ph->
a )
return 0;
874 else if ( ph->
a == ia && ph->
b == ib ) {
894 if ( ph->
a == ia && ph->
b == ib ) {
926 assert ( hash->
siz );
931 ph = &hash->
geom[key];
933 if ( !ph->
a )
return 0;
934 else if ( ph->
a == ia && ph->
b == ib ) {
941 if ( ph->
a == ia && ph->
b == ib ) {
956 assert ( hash->
siz );
961 ph = &hash->
geom[key];
963 if ( ph->
a == ia && ph->
b == ib )
968 if ( ph->
a == ia && ph->
b == ib )
return 1;
972 ph->
a = ia; ph->
b = ib;
973 ph->
ref = ref; ph->
tag = tag;
976 if ( hash->
nxt >= hash->
max ) {
978 fprintf(stderr,
"\n ## Memory alloc problem (edge): %" MMG5_PRId
"\n",hash->
max);
981 fprintf(stderr,
" Exit program.\n");
return 0;);
982 for (j=hash->
nxt; j<hash->max; j++) hash->
geom[j].
nxt = j+1;
987 ph->
a = ia; ph->
b = ib;
988 ph->
ref = ref; ph->
tag = tag;
998 hash->
siz = hsiz + 1;
999 hash->
max = hmax + 2;
1005 if ( !hash->
geom ) {
1006 perror(
" ## Memory problem: calloc");
1009 for (k=hash->
siz; k<hash->max; k++)
1026 MMG5_int edg,*adja,k,kk;
1040 fprintf(stderr,
"\n ## Warning: %s: no re-hash of edges of mesh. ",
1042 fprintf(stderr,
"mesh->htab.geom must be freed to enforce analysis.\n");
1050 for (k=1; k<=
mesh->
na; k++) {
1057 for (k=1; k<=
mesh->
nt; k++) {
1059 for (i=0; i<3; i++) {
1079 pt->
tag[i] &= ~MG_NOSURF;
1096 if ( !
ier )
return 0;
1099 for (k=1; k<=
mesh->
nt; k++) {
1102 for (i=0; i<3; i++) {
1107 else if ( (k < kk) && ( pt->
edg[i] || pt->
tag[i] ) )
mesh->
na++;
1121 for (k=1; k<=
mesh->
nt; k++) {
1124 for (i=0; i<3; i++) {
1137 else if ( k < kk && ( pt->
edg[i] || pt->
tag[i] ) ) {
1144 for (k=1; k<=
mesh->
nt; k++) {
1146 for (i=0; i<3; i++) {
1185 MMG5_int ref,*adja,adj,k,ia,ib,ic,kt,ntinit;
1206 for (k=1; k<=
mesh->
nt; k++) {
1212 for (i=0; i<3; i++) {
1219 if ( ntmesh != ntinit ) {
1220 for (k=1; k<=
mesh->
ne; k++) {
1222 if ( !
MG_EOK(pt) )
continue;
1226 for (i=0; i<4; i++) {
1233 if ( adj && ( pt->
ref <= pt1->
ref) )
continue;
1236 if ( adj && ( (pt->
ref<pt1->
ref) || (!pt->
xt) ||
1276 for( j = 0; j < 3; j++ ) {
1280 ptt->
tag[j] &= ~MG_BDY;
1315 if ( !
MG_EOK(pp) )
continue;
1321 for (i=0; i<2; i++) {
1326 if ( !
mesh->
nt )
continue;
1334 if ( !kt )
continue;
1355 if ( adj && ( pp->
ref <= ref) )
continue;
1389 else ptt->
ref = pxpr ? pxpr->
ref[i] : 0;
1393 ptt->
ref = pxpr ? pxpr->
ref[i] : 0;
1399 assert(
mesh->
nt==ntmesh);
1401 if ( ntmesh != ntinit ) {
1403 for (k=1; k<=
mesh->
nt; k++) {
1405 for (i=0; i<3; i++) {
1443 MMG5_int *adja,adj,k,kk,i,j,ntmesh;
1444 MMG5_int ia,ib,ic, nbl,nt,ntpres;
1449 ntmesh = ntpres = 0;
1450 for (k=1; k<=
mesh->
ne; k++) {
1452 if ( !
MG_EOK(pt) )
continue;
1454 for (i=0; i<4; i++) {
1463 if ( pt->
ref > pt1->
ref )
1471 for (k=1; k<=
mesh->
ne; k++) {
1473 if ( !
MG_EOK(pt) || !pt->
xt )
continue;
1475 for (i=0; i<4; i++) {
1478 if ( !adj )
continue;
1483 if ( pt->
ref != pt1->
ref )
continue;
1494 if ( !
MG_EOK(pp) )
continue;
1497 for (i=0; i<2; i++) {
1510 if ( pp->
ref > pp1->
ref) {
1519 for (k=1; k<=
mesh->
ne; k++) {
1521 if ( !
MG_EOK(pt) )
continue;
1524 for (i=0; i<4; i++) {
1526 if ( adj )
continue;
1542 if ( !
MG_EOK(pp) )
continue;
1545 for (i=0; i<2; i++) {
1547 if ( adj )
continue;
1570 for (k=1; k<=
mesh->
ne; k++) {
1572 if ( !
MG_EOK(pt) )
continue;
1574 for (i=0; i<4; i++) {
1582 for (k=1; k<=
mesh->
ne; k++) {
1584 if ( !
MG_EOK(pt) )
continue;
1586 for (i=0; i<4; i++) {
1597 if ( pt->
ref > pt1->
ref ) {
1608 if ( !
MG_EOK(pp) )
continue;
1610 for (i=0; i<2; i++) {
1618 else if ( adj<0 )
continue;
1623 if ( pp->
ref > pp1->
ref ) {
1639 for (k=1; k<=
mesh->
nt; k++) {
1671 adj =
mesh->
adja[4*(kk-1)+1+iface];
1688 fprintf(stderr,
"\n ## Warning: %s: %" MMG5_PRId
" extra boundaries provided."
1689 " Ignored\n",__func__,nbl);
1702 printf(
" %" MMG5_PRId
" triangles between 2 tetrahdra with same"
1703 " references\n",ntpres);
1706 for (k=1; k<=
mesh->
nt; k++) {
1708 for (i=0; i<3; i++) {
1722 if ( ntmesh >
mesh->
nt ) {
1729 fprintf(stderr,
"\n ## Warning: %s: %" MMG5_PRId
" extra boundaries founded\n",
1751 MMG5_int ref,*adja,adj,k,ia,ib,ic,kt,initedg[3];
1753 int16_t tag,inittag[3];
1756 if ( !
mesh->
nt )
return 1;
1760 fprintf(stderr,
"\n ## Error: %s: mesh->xtetra must be freed.\n",__func__);
1766 fprintf(stderr,
"\n ## Error: %s: mesh->xprism must be freed.\n",__func__);
1772 for (k=1; k<=
mesh->
nt; k++) {
1782 fprintf(stderr,
" Exit program.\n");
1788 for (k=1; k<=
mesh->
ne; k++) {
1790 if ( !
MG_EOK(pt) )
continue;
1792 for (i=0; i<4; i++) {
1795 if ( !adj || ( pt->
ref != pt1->
ref) ) {
1805 "larger xtetra table",
1807 fprintf(stderr,
" Exit program.\n");
return 0;);
1822 for (k=1; k<=
mesh->
ne; k++) {
1824 if ( !
MG_EOK(pt) )
continue;
1826 for (i=0; i<4; i++) {
1832 if ( !kt )
continue;
1838 "larger xtetra table",
1840 fprintf(stderr,
" Exit program.\n");
return 0;);
1854 for (k=1; k<=
mesh->
ne; k++) {
1856 if ( !
MG_EOK(pt) )
continue;
1857 if ( !pt->
xt )
continue;
1860 for (i=0; i<4; i++) {
1864 if ( pxt->
ftag[i] ) {
1865 if ( adj && (pt->
ref == pt1->
ref ) ) {
1877 if ( ptt->
v[0] == ia && ptt->
v[1] == ib && ptt->
v[2] == ic ) {
1879 for (j=0; j<3; j++) {
1880 tag = pxt->
ftag[i] | ptt->
tag[j];
1895 for (k=1; k<=
mesh->
ne; k++) {
1897 if ( !
MG_EOK(pt) )
continue;
1898 if ( !pt->
xt )
continue;
1901 for (i=0; i<4; i++) {
1910 if ( !kt )
continue;
1917 for ( j=0; j<3; ++j ) {
1920 if ( ptt->
v[j]==ia && ptt->
v[i1]==ib && ptt->
v[i2]==ic )
1931 inittag[0] = ptt->
tag[0];
1932 inittag[1] = ptt->
tag[1];
1933 inittag[2] = ptt->
tag[2];
1934 ptt->
tag[0] = inittag[j];
1935 ptt->
tag[1] = inittag[i1];
1936 ptt->
tag[2] = inittag[i2];
1938 initedg[0] = ptt->
edg[0];
1939 initedg[1] = ptt->
edg[1];
1940 initedg[2] = ptt->
edg[2];
1941 ptt->
edg[0] = initedg[j];
1942 ptt->
edg[1] = initedg[i1];
1943 ptt->
edg[2] = initedg[i2];
1953 if ( pxt->
ftag[i] ) {
1958 for (j=0; j<3; j++) {
1959 tag = pxt->
ftag[i] | ptt->
tag[j];
1978 fprintf(stderr,
" Exit program.\n");
1985 if ( !
MG_EOK(pp) )
continue;
1987 for (i=0; i<2; i++) {
1994 if ( adj && (pp->
ref == ref) )
continue;
2011 for (j=0; j<3; j++) {
2018 fprintf(stderr,
" Exit program.\n");
2021 "boundary prisms",
return 0);
2049 MMG5_int ia,ib,ic,k,kt;
2054 if ( !
mesh->
nt )
return 1;
2056 for (k=1; k<=
mesh->
nt; k++) {
2064 for (k=1; k<=
mesh->
ne; k++) {
2066 if ( !
MG_EOK(pt) )
continue;
2090 if ( !pt->
xt )
continue;
2093 for (i=0; i<4; i++) {
2108 pxt->
ftag[i] &= ~MG_NOSURF;
2109 ptt->
tag[0] &= ~MG_NOSURF;
2110 ptt->
tag[1] &= ~MG_NOSURF;
2111 ptt->
tag[2] &= ~MG_NOSURF;
2113 for ( j=0; j<3; j++ ) {
2115 if ( tag || ptt->
edg[j] ) {
2139 MMG5_int *adja,adj,k,kt,ia,ib,ic,nf;
2142 if ( !
mesh->
nt )
return 1;
2148 for (k=1; k<=
mesh->
nt; k++) {
2158 for (k=1; k<=
mesh->
ne; k++) {
2160 if ( !
MG_EOK(pt) )
continue;
2162 for (i=0; i<4; i++) {
2176 if ( ptt->
v[0] == ia && ptt->
v[1] == ib && ptt->
v[2] == ic )
2188 fprintf(stdout,
" ## %" MMG5_PRId
" faces reoriented\n",nf);
if(!ier) exit(EXIT_FAILURE)
int MMG5_settag(MMG5_pMesh mesh, MMG5_int start, int ia, int16_t tag, int edg)
int MMG5_deltag(MMG5_pMesh mesh, MMG5_int start, int ia, int16_t tag)
void MMG3D_coquilFaceSecondLoopInit(MMG5_pMesh mesh, MMG5_int piv, int8_t *iface, int8_t *ia, int64_t *list, int *ilist, MMG5_int *it1, MMG5_int *pradj, MMG5_int *adj)
int MMG3D_coquilFaceFirstLoop(MMG5_pMesh mesh, MMG5_int start, MMG5_int na, MMG5_int nb, int8_t iface, int8_t ia, int64_t *list, int *ilist, MMG5_int *it1, MMG5_int *it2, MMG5_int *piv, MMG5_int *adj, int8_t *hasadja, int *nbdy, int silent)
void MMG5_coquilFaceErrorMessage(MMG5_pMesh mesh, MMG5_int k1, MMG5_int k2)
int16_t MMG5_openCoquilTravel(MMG5_pMesh mesh, MMG5_int na, MMG5_int nb, MMG5_int *adj, MMG5_int *piv, int8_t *iface, int8_t *i)
int MMG5_boulernm(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int start, int ip, MMG5_int *ng, MMG5_int *nr, MMG5_int *nm)
MMG5_int MMG5_hashFace(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int ia, MMG5_int ib, MMG5_int ic, MMG5_int k)
int MMG5_mmgHashTria(MMG5_pMesh mesh, MMG5_int *adjt, MMG5_Hash *hash, int chkISO)
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
int MMG5_paktet(MMG5_pMesh mesh)
int MMG3D_hashTetra(MMG5_pMesh mesh, int pack)
int MMG5_hGeom(MMG5_pMesh mesh)
int MMG5_hNew(MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int hsiz, MMG5_int hmax)
int MMG3D_hashPrism(MMG5_pMesh mesh)
static int MMG5_bdryTria(MMG5_pMesh mesh, MMG5_int ntmesh)
MMG5_int MMG5_hashGetFace(MMG5_Hash *hash, MMG5_int ia, MMG5_int ib, MMG5_int ic)
int MMG5_hGet(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
int MMG5_chkBdryTria(MMG5_pMesh mesh)
int MMG5_bdrySet(MMG5_pMesh mesh)
static int MMG5_setEdgeNmTag(MMG5_pMesh mesh, MMG5_Hash *hash)
int MMG5_bdryUpdate(MMG5_pMesh mesh)
int MMG5_setNmTag(MMG5_pMesh mesh, MMG5_Hash *hash)
int MMG3D_hashTria(MMG5_pMesh mesh, MMG5_Hash *hash)
static int MMG5_setVertexNmTag(MMG5_pMesh mesh)
int MMG5_hashPop(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
int MMG5_hTag(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
int MMG5_hPop(MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int *ref, int16_t *tag)
int MMG5_bdryPerm(MMG5_pMesh mesh)
int MMG5_hEdge(MMG5_pMesh mesh, MMG5_HGeom *hash, MMG5_int a, MMG5_int b, MMG5_int ref, int16_t tag)
API headers for the mmg3d library.
MMG5_int MMG3D_indPt(MMG5_pMesh mesh, MMG5_int kp)
int MMG3D_delElt(MMG5_pMesh mesh, MMG5_int iel)
static const int8_t MMG5_iarf[4][3]
iarf[i]: edges of face opposite to vertex i
static const uint8_t MMG5_iare[6][2]
vertices of extremities of the edges of the tetra
static const uint8_t MMG5_iarf_pr[5][5]
iarf[i]: edges of face i for a prism
static const uint8_t MMG5_idir_pr[5][4]
idir[i]: vertices of face i for a prism
static const uint8_t MMG5_idir[4][3]
idir[i]: vertices of face opposite to vertex i
int MMG5_isLevelSet(MMG5_pMesh mesh, MMG5_int ref0, MMG5_int ref1)
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
#define MG_CLR(flag, bit)
#define MMG5_ADD_MEM(mesh, size, message, law)
#define MMG5_SAFE_REALLOC(ptr, prevSize, newSize, type, message, law)
static const uint8_t MMG5_iprv2[3]
#define MMG5_TAB_RECALLOC(mesh, ptr, initSize, wantedGap, type, message, law)
#define MG_GET(flag, bit)
static const uint8_t MMG5_inxt2[6]
#define MMG5_SAFE_FREE(ptr)
#define MMG5_DEL_MEM(mesh, ptr)
#define MG_SET(flag, bit)
#define MMG5_SAFE_RECALLOC(ptr, prevSize, newSize, type, message, law)
Structure to store edges of a MMG mesh.
Hash table to store geometric edges.
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Structure to store points of a MMG mesh.
Used to hash edges (memory economy compared to MMG5_hgeom).
Cell of the hash table of geom edges.
Structure to store the surface prism of a MMG mesh.
Structure to store the surface tetrahedra of a MMG mesh.