59 assert( pt && pt1 &&
MG_EOK(pt1) );
64 while ( ++k < mesh->ne );
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");
155 if (
sizeof(MMG5_int) == 8 ) {
163 for (k=0; k<=
mesh->
ne; k++)
167 for (k=1; k<=
mesh->
ne; k++) {
169 if ( !
MG_EOK(pt) )
continue;
170 for (i=0; i<4; i++) {
178 sum = pt->
v[i1] + pt->
v[i2] + pt->
v[i3];
181 link[iadr] = hcode[key];
187 if (
mesh->
info.
ddebug ) fprintf(stdout,
" h- stage 2: adjacencies\n");
188 for (l=iadr; l>0; l--) {
189 if ( link[l] >= 0 )
continue;
200 sum = pt->
v[i1] + pt->
v[i2] + pt->
v[i3];
206 while ( ll != inival ) {
213 sum1 = pt1->
v[i1] + pt1->
v[i2] + pt1->
v[i3];
219 if ( mins1 == mins && maxs1 == maxs ) {
220 if ( pp != 0 ) link[pp] = link[ll];
248 MMG5_int k,kk,l,ll,jj;
249 MMG5_int max12,min12,max34,min34,mins,mins1,mins_b, mins_b1,maxs,maxs1;
251 MMG5_int *hcode,*link,hsize,inival;
252 uint8_t i,ii,i1,i2,i3,i4;
259 fprintf(stderr,
"\n ## Warning: %s: no re-build of adjacencies of prisms. "
260 "mesh->adjapr must be freed to enforce analysis.\n",__func__);
266 fprintf(stdout,
" ** SETTING PRISMS ADJACENCY\n");
270 printf(
" Exit program.\n");
281 if (
sizeof(MMG5_int) == 8 ) {
296 for (i=0; i<2; i++) {
302 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
304 mins =
MG_MIN(min12,pp->
v[i3]);
306 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
308 maxs =
MG_MAX(max12,pp->
v[i3]);
311 mins_b = pp->
v[i1] + pp->
v[i2] + pp->
v[i3] -mins -maxs;
316 link[iadr] = hcode[key];
326 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
327 min34 =
MG_MIN(pp->
v[i3],pp->
v[i4]);
329 mins =
MG_MIN(min12,min34);
331 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
332 max34 =
MG_MAX(pp->
v[i3],pp->
v[i4]);
334 maxs =
MG_MAX(max12,max34);
342 link[iadr] = hcode[key];
348 if (
mesh->
info.
ddebug ) fprintf(stdout,
" h- stage 2: adjacencies\n");
349 for (l=iadr; l>0; l--) {
350 if ( link[l] >= 0 )
continue;
365 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
366 mins =
MG_MIN(min12,pp->
v[i3]);
368 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
369 maxs =
MG_MAX(max12,pp->
v[i3]);
371 mins_b = pp->
v[i1] + pp->
v[i2] + pp->
v[i3] - mins - maxs;
382 min12 =
MG_MIN(pp->
v[i1],pp->
v[i2]);
383 min34 =
MG_MIN(pp->
v[i3],pp->
v[i4]);
384 mins =
MG_MIN(min12,min34);
386 max12 =
MG_MAX(pp->
v[i1],pp->
v[i2]);
387 max34 =
MG_MAX(pp->
v[i3],pp->
v[i4]);
388 maxs =
MG_MAX(max12,max34);
397 while ( ll != inival ) {
411 min12 =
MG_MIN(pp1->
v[i1],pp1->
v[i2]);
412 mins1 =
MG_MIN(min12,pp1->
v[i3]);
414 max12 =
MG_MAX(pp1->
v[i1],pp1->
v[i2]);
415 maxs1 =
MG_MAX(max12,pp1->
v[i3]);
417 mins_b1 = pp1->
v[i1] + pp1->
v[i2] + pp1->
v[i3] - mins1 - maxs1;
428 min12 =
MG_MIN(pp1->
v[i1],pp1->
v[i2]);
429 min34 =
MG_MIN(pp1->
v[i3],pp1->
v[i4]);
430 mins1 =
MG_MIN(min12,min34);
432 max12 =
MG_MAX(pp1->
v[i1],pp1->
v[i2]);
433 max34 =
MG_MAX(pp1->
v[i3],pp1->
v[i4]);
434 maxs1 =
MG_MAX(max12,max34);
440 if ( mins1 == mins && maxs1 == maxs && mins_b1 == mins_b ) {
441 if ( jj != 0 ) link[jj] = link[ll];
475 MMG5_int adj,pradj,piv;
478 MMG5_int k,l,i1,i2,na,nb,ia,it1,it2, nr;
480 int ilist,nbdy,ipa,ipb;
481 int8_t iface,hasadja,i;
482 static int8_t mmgWarn0=0,mmgWarn1=0;
488 for (k=1; k<=
mesh->
nt; k++) {
491 if ( !
MG_EOK(ptt) )
continue;
493 for (l=0; l<3; l++) {
506 ph = &hash->
item[key];
510 if ( ph->
a == na && ph->
b == nb )
break;
522 for (ia=0; ia<6; ++ia) {
525 if ( (pt->
v[ipa] == na && pt->
v[ipb] == nb) ||
526 (pt->
v[ipa] == nb && pt->
v[ipb] == na))
break;
534 MMG3D_coquilFaceFirstLoop(
mesh,start,na,nb,iface,ia,list,&ilist,&it1,&it2,
535 &piv,&adj,&hasadja,&nbdy,1);
539 if ( adj == start ) {
543 fprintf(stderr,
"\n ## Warning: %s: at least 1 wrong boundary tag:"
544 " Only 0 or 1 boundary triangles founded in the shell of the edge\n",
571 fprintf(stderr,
"\n ## Warning: %s: problem in surface remesh"
572 " process. At least 1 shell of edge (%" MMG5_PRId
"-%" MMG5_PRId
") contains"
575 fprintf(stderr,
"\n ## Try to modify the hausdorff"
576 " number, or/and the maximum mesh.\n");
589 it2 = 4*pradj + iface;
591 if ( (!it1 || !it2) || (it1 == it2) ) {
600 if ( nbdy != ph->
s ) {
603 ptt->
tag[l] &= ~MG_NOSURF;
619 fprintf(stdout,
" %" MMG5_PRId
" required edges added\n",nr);
643 MMG5_int k,base,np,nc,nm,nre, ng, nrp;
651 for (k=1; k<=
mesh->
np; ++k) {
661 for (k=1; k<=
mesh->
ne; ++k) {
663 if ( !
MG_EOK(ptet) )
continue;
665 for ( i=0; i<4; ++i ) {
671 if ( (!
MG_VOK(ppt)) || (ppt->
flag==base) )
continue;
677 if (
ier < 0 )
return 0;
678 else if ( !
ier )
continue;
680 if ( (ng+nrp+nm) > 2 ) {
684 ppt->
tag &= ~MG_NOSURF;
688 else if ( (ng == 2) || (nrp == 2) || (nm == 2) ) {
693 else if ( (ng+nrp+nm) == 2 ) {
697 ppt->
tag &= ~MG_NOSURF;
700 else if ( ng == 1 && !nrp ){
702 ppt->
tag &= ~MG_NOSURF;
706 else if ( (ng+nrp+nm) == 1 ){
709 assert ( (ng == 1) || (nrp==1) || (nm==1) );
711 ppt->
tag &= ~MG_NOSURF;
716 assert ( 0 &&
"unexpected case");
725 fprintf(stdout,
" %" MMG5_PRId
" corner and %" MMG5_PRId
" required vertices added\n",nc,nre);
778 MMG5_int ia,ib,iph,iphp;
783 ph = &hash->
item[key];
785 if ( !ph->
a )
return 0;
786 else if ( ph->
a == ia && ph->
b == ib ) {
805 if ( ph->
a == ia && ph->
b == ib ) {
847 ph = &hash->
geom[key];
851 else if ( ph->
a == ia && ph->
b == ib ) {
860 if ( ph->
a == ia && ph->
b == ib ) {
875 MMG5_int ia,ib,iph,iphp;
880 assert ( hash->
siz );
885 ph = &hash->
geom[key];
887 if ( !ph->
a )
return 0;
888 else if ( ph->
a == ia && ph->
b == ib ) {
908 if ( ph->
a == ia && ph->
b == ib ) {
940 assert ( hash->
siz );
945 ph = &hash->
geom[key];
947 if ( !ph->
a )
return 0;
948 else if ( ph->
a == ia && ph->
b == ib ) {
955 if ( ph->
a == ia && ph->
b == ib ) {
970 assert ( hash->
siz );
975 ph = &hash->
geom[key];
977 if ( ph->
a == ia && ph->
b == ib )
982 if ( ph->
a == ia && ph->
b == ib )
return 1;
986 ph->
a = ia; ph->
b = ib;
987 ph->
ref = ref; ph->
tag = tag;
990 if ( hash->
nxt >= hash->
max ) {
992 fprintf(stderr,
"\n ## Memory alloc problem (edge): %" MMG5_PRId
"\n",hash->
max);
995 fprintf(stderr,
" Exit program.\n");
return 0;);
1001 ph->
a = ia; ph->
b = ib;
1002 ph->
ref = ref; ph->
tag = tag;
1012 hash->
siz = hsiz + 1;
1013 hash->
max = hmax + 2;
1019 if ( !hash->
geom ) {
1020 perror(
" ## Memory problem: calloc");
1023 for (k=hash->
siz; k<hash->
max; k++)
1040 MMG5_int edg,*adja,k,kk;
1054 fprintf(stderr,
"\n ## Warning: %s: no re-hash of edges of mesh. ",
1056 fprintf(stderr,
"mesh->htab.geom must be freed to enforce analysis.\n");
1064 for (k=1; k<=
mesh->
na; k++) {
1071 for (k=1; k<=
mesh->
nt; k++) {
1073 for (i=0; i<3; i++) {
1093 pt->
tag[i] &= ~MG_NOSURF;
1110 if ( !
ier )
return 0;
1113 for (k=1; k<=
mesh->
nt; k++) {
1116 for (i=0; i<3; i++) {
1121 else if ( (k < kk) && ( pt->
edg[i] || pt->
tag[i] ) )
mesh->
na++;
1135 for (k=1; k<=
mesh->
nt; k++) {
1138 for (i=0; i<3; i++) {
1151 else if ( k < kk && ( pt->
edg[i] || pt->
tag[i] ) ) {
1158 for (k=1; k<=
mesh->
nt; k++) {
1160 for (i=0; i<3; i++) {
1199 MMG5_int ref,*adja,adj,k,ia,ib,ic,kt,ntinit;
1220 for (k=1; k<=
mesh->
nt; k++) {
1226 for (i=0; i<3; i++) {
1233 if ( ntmesh != ntinit ) {
1234 for (k=1; k<=
mesh->
ne; k++) {
1236 if ( !
MG_EOK(pt) )
continue;
1240 for (i=0; i<4; i++) {
1247 if ( adj && ( pt->
ref <= pt1->
ref) )
continue;
1250 if ( adj && ( (pt->
ref<pt1->
ref) || (!pt->
xt) ||
1290 for( j = 0; j < 3; j++ ) {
1294 ptt->
tag[j] &= ~MG_BDY;
1329 if ( !
MG_EOK(pp) )
continue;
1335 for (i=0; i<2; i++) {
1340 if ( !
mesh->
nt )
continue;
1348 if ( !kt )
continue;
1369 if ( adj && ( pp->
ref <= ref) )
continue;
1403 else ptt->
ref = pxpr ? pxpr->
ref[i] : 0;
1407 ptt->
ref = pxpr ? pxpr->
ref[i] : 0;
1413 assert(
mesh->
nt==ntmesh);
1415 if ( ntmesh != ntinit ) {
1417 for (k=1; k<=
mesh->
nt; k++) {
1419 for (i=0; i<3; i++) {
1457 MMG5_int *adja,adj,k,kk,i,j,ntmesh;
1458 MMG5_int ia,ib,ic, nbl,nt,ntpres;
1463 ntmesh = ntpres = 0;
1464 for (k=1; k<=
mesh->
ne; k++) {
1466 if ( !
MG_EOK(pt) )
continue;
1468 for (i=0; i<4; i++) {
1477 if ( pt->
ref > pt1->
ref )
1485 for (k=1; k<=
mesh->
ne; k++) {
1487 if ( !
MG_EOK(pt) || !pt->
xt )
continue;
1489 for (i=0; i<4; i++) {
1492 if ( !adj )
continue;
1497 if ( pt->
ref != pt1->
ref )
continue;
1508 if ( !
MG_EOK(pp) )
continue;
1511 for (i=0; i<2; i++) {
1524 if ( pp->
ref > pp1->
ref) {
1533 for (k=1; k<=
mesh->
ne; k++) {
1535 if ( !
MG_EOK(pt) )
continue;
1538 for (i=0; i<4; i++) {
1540 if ( adj )
continue;
1556 if ( !
MG_EOK(pp) )
continue;
1559 for (i=0; i<2; i++) {
1561 if ( adj )
continue;
1584 for (k=1; k<=
mesh->
ne; k++) {
1586 if ( !
MG_EOK(pt) )
continue;
1588 for (i=0; i<4; i++) {
1596 for (k=1; k<=
mesh->
ne; k++) {
1598 if ( !
MG_EOK(pt) )
continue;
1600 for (i=0; i<4; i++) {
1611 if ( pt->
ref > pt1->
ref ) {
1622 if ( !
MG_EOK(pp) )
continue;
1624 for (i=0; i<2; i++) {
1632 else if ( adj<0 )
continue;
1637 if ( pp->
ref > pp1->
ref ) {
1653 for (k=1; k<=
mesh->
nt; k++) {
1685 adj =
mesh->
adja[4*(kk-1)+1+iface];
1702 fprintf(stderr,
"\n ## Warning: %s: %" MMG5_PRId
" extra boundaries provided."
1703 " Ignored\n",__func__,nbl);
1716 printf(
" %" MMG5_PRId
" triangles between 2 tetrahdra with same"
1717 " references\n",ntpres);
1720 for (k=1; k<=
mesh->
nt; k++) {
1722 for (i=0; i<3; i++) {
1736 if ( ntmesh >
mesh->
nt ) {
1743 fprintf(stderr,
"\n ## Warning: %s: %" MMG5_PRId
" extra boundaries founded\n",
1765 MMG5_int ref,*adja,adj,k,ia,ib,ic,kt,initedg[3];
1767 int16_t tag,inittag[3];
1770 if ( !
mesh->
nt )
return 1;
1774 fprintf(stderr,
"\n ## Error: %s: mesh->xtetra must be freed.\n",__func__);
1780 fprintf(stderr,
"\n ## Error: %s: mesh->xprism must be freed.\n",__func__);
1786 for (k=1; k<=
mesh->
nt; k++) {
1796 fprintf(stderr,
" Exit program.\n");
1802 for (k=1; k<=
mesh->
ne; k++) {
1804 if ( !
MG_EOK(pt) )
continue;
1806 for (i=0; i<4; i++) {
1809 if ( !adj || ( pt->
ref != pt1->
ref) ) {
1819 "larger xtetra table",
1821 fprintf(stderr,
" Exit program.\n");
return 0;);
1836 for (k=1; k<=
mesh->
ne; k++) {
1838 if ( !
MG_EOK(pt) )
continue;
1840 for (i=0; i<4; i++) {
1846 if ( !kt )
continue;
1852 "larger xtetra table",
1854 fprintf(stderr,
" Exit program.\n");
return 0;);
1868 for (k=1; k<=
mesh->
ne; k++) {
1870 if ( !
MG_EOK(pt) )
continue;
1871 if ( !pt->
xt )
continue;
1874 for (i=0; i<4; i++) {
1878 if ( pxt->
ftag[i] ) {
1879 if ( adj && (pt->
ref == pt1->
ref ) ) {
1891 if ( ptt->
v[0] == ia && ptt->
v[1] == ib && ptt->
v[2] == ic ) {
1893 for (j=0; j<3; j++) {
1894 tag = pxt->
ftag[i] | ptt->
tag[j];
1909 for (k=1; k<=
mesh->
ne; k++) {
1911 if ( !
MG_EOK(pt) )
continue;
1912 if ( !pt->
xt )
continue;
1915 for (i=0; i<4; i++) {
1924 if ( !kt )
continue;
1931 for ( j=0; j<3; ++j ) {
1934 if ( ptt->
v[j]==ia && ptt->
v[i1]==ib && ptt->
v[i2]==ic )
1945 inittag[0] = ptt->
tag[0];
1946 inittag[1] = ptt->
tag[1];
1947 inittag[2] = ptt->
tag[2];
1948 ptt->
tag[0] = inittag[j];
1949 ptt->
tag[1] = inittag[i1];
1950 ptt->
tag[2] = inittag[i2];
1952 initedg[0] = ptt->
edg[0];
1953 initedg[1] = ptt->
edg[1];
1954 initedg[2] = ptt->
edg[2];
1955 ptt->
edg[0] = initedg[j];
1956 ptt->
edg[1] = initedg[i1];
1957 ptt->
edg[2] = initedg[i2];
1967 if ( pxt->
ftag[i] ) {
1972 for (j=0; j<3; j++) {
1973 tag = pxt->
ftag[i] | ptt->
tag[j];
1992 fprintf(stderr,
" Exit program.\n");
1999 if ( !
MG_EOK(pp) )
continue;
2001 for (i=0; i<2; i++) {
2008 if ( adj && (pp->
ref == ref) )
continue;
2025 for (j=0; j<3; j++) {
2032 fprintf(stderr,
" Exit program.\n");
2035 "boundary prisms",
return 0);
2063 MMG5_int ia,ib,ic,k,kt;
2068 if ( !
mesh->
nt )
return 1;
2070 for (k=1; k<=
mesh->
nt; k++) {
2078 for (k=1; k<=
mesh->
ne; k++) {
2080 if ( !
MG_EOK(pt) )
continue;
2104 if ( !pt->
xt )
continue;
2107 for (i=0; i<4; i++) {
2122 pxt->
ftag[i] &= ~MG_NOSURF;
2123 ptt->
tag[0] &= ~MG_NOSURF;
2124 ptt->
tag[1] &= ~MG_NOSURF;
2125 ptt->
tag[2] &= ~MG_NOSURF;
2127 for ( j=0; j<3; j++ ) {
2129 if ( tag || ptt->
edg[j] ) {
2153 MMG5_int *adja,adj,k,kt,ia,ib,ic,nf;
2156 if ( !
mesh->
nt )
return 1;
2162 for (k=1; k<=
mesh->
nt; k++) {
2172 for (k=1; k<=
mesh->
ne; k++) {
2174 if ( !
MG_EOK(pt) )
continue;
2176 for (i=0; i<4; i++) {
2190 if ( ptt->
v[0] == ia && ptt->
v[1] == ib && ptt->
v[2] == ic )
2202 fprintf(stdout,
" ## %" MMG5_PRId
" faces reoriented\n",nf);
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.