55 double o[3][3],p[3][3];
58 int i1,i2,
ier,it,maxit;
64 memset(p[i],0,3*
sizeof(
double));
65 memset(o[i],0,3*
sizeof(
double));
74 o[i][0] = 0.5 * (pa->
c[0] + pb->
c[0]);
75 o[i][1] = 0.5 * (pa->
c[1] + pb->
c[1]);
76 o[i][2] = 0.5 * (pa->
c[2] + pb->
c[2]);
93 ps->
c[0] = o[i][0] + t*(p[i][0] - o[i][0]);
94 ps->
c[1] = o[i][1] + t*(p[i][1] - o[i][1]);
95 ps->
c[2] = o[i][2] + t*(p[i][2] - o[i][2]);
100 case 1:
case 2:
case 4:
115 while ( ++it < maxit );
119 for (i=0; i<3; i++) {
122 ps->
c[0] = o[i][0] + t*(p[i][0] - o[i][0]);
123 ps->
c[1] = o[i][1] + t*(p[i][1] - o[i][1]);
124 ps->
c[2] = o[i][2] + t*(p[i][2] - o[i][2]);
132 case 1:
case 2:
case 4:
161 double m[3],o[3],tp,to,t;
180 m[0] = 0.5*(p0->
c[0] + p1->
c[0]);
181 m[1] = 0.5*(p0->
c[1] + p1->
c[1]);
182 m[2] = 0.5*(p0->
c[2] + p1->
c[2]);
190 ppt->
c[0] = m[0] + t*(o[0]-m[0]);
191 ppt->
c[1] = m[1] + t*(o[1]-m[1]);
192 ppt->
c[2] = m[2] + t*(o[2]-m[2]);
200 while ( ++it < maxit );
204 ppt->
c[0] = m[0] + t*(o[0]-m[0]);
205 ppt->
c[1] = m[1] + t*(o[1]-m[1]);
206 ppt->
c[2] = m[2] + t*(o[2]-m[2]);
218 double n[3][3],t[3][3],nt[3],c1[3],c2[3],*n1,*n2,t1[3],t2[3];
219 double ps,ps2,cosn,ux,uy,uz,ll,li,dd,hausd,hmax;
222 static int8_t mmgWarn0 = 0, mmgWarn1 = 0;
230 for (i=0; i<3; i++) {
231 if (
MS_SIN(p[i]->tag) ) {
234 else if (
MG_EDG(p[i]->tag) ) {
238 ps = n1[0]*nt[0] + n1[1]*nt[1] + n1[2]*nt[2];
239 ps2 = n2[0]*nt[0] + n2[1]*nt[1] + n2[2]*nt[2];
240 if ( fabs(ps) > fabs(ps2) )
241 memcpy(&n[i],n1,3*
sizeof(
double));
243 memcpy(&n[i],n2,3*
sizeof(
double));
244 memcpy(&t[i],p[i]->n,3*
sizeof(
double));
247 memcpy(&n[i],p[i]->n,3*
sizeof(
double));
251 for (i=0; i<3; i++) {
279 ux = p[i2]->
c[0] - p[i1]->
c[0];
280 uy = p[i2]->
c[1] - p[i1]->
c[1];
281 uz = p[i2]->
c[2] - p[i1]->
c[2];
282 ll = ux*ux + uy*uy + uz*uz;
283 if ( ll > hmax*hmax ) {
294 if (
MS_SIN(p[i1]->tag) ) {
304 fprintf(stderr,
"\n ## Warning: %s: a- at least 1 geometrical"
305 " problem\n",__func__);
310 memcpy(t1,t[i1],3*
sizeof(
double));
313 if (
MS_SIN(p[i2]->tag) ) {
322 fprintf(stderr,
"\n ## Warning: %s: b- at least 1 geometrical"
323 " problem\n",__func__);
328 memcpy(t2,t[i2],3*
sizeof(
double));
331 ps = t1[0]*ux + t1[1]*uy + t1[2]*uz;
336 if ( cosn > hausd*hausd ) {
341 ps = -(t2[0]*ux + t2[1]*uy + t2[2]*uz);
346 if ( cosn > hausd*hausd ) {
355 ps = ux*n1[0] + uy*n1[1] + uz*n1[2];
356 c1[0] = (2.0*p[i1]->
c[0] + p[i2]->
c[0] - ps*n1[0]) / 3.0 - p[i1]->c[0];
357 c1[1] = (2.0*p[i1]->
c[1] + p[i2]->
c[1] - ps*n1[1]) / 3.0 - p[i1]->c[1];
358 c1[2] = (2.0*p[i1]->
c[2] + p[i2]->
c[2] - ps*n1[2]) / 3.0 - p[i1]->c[2];
360 ps = -(ux*n2[0] + uy*n2[1] + uz*n2[2]);
361 c2[0] = (2.0*p[i2]->
c[0] + p[i1]->
c[0] - ps*n2[0]) / 3.0 - p[i2]->c[0];
362 c2[1] = (2.0*p[i2]->
c[1] + p[i1]->
c[1] - ps*n2[1]) / 3.0 - p[i2]->c[1];
363 c2[2] = (2.0*p[i2]->
c[2] + p[i1]->
c[2] - ps*n2[2]) / 3.0 - p[i2]->c[2];
366 ps = c1[0]*ux + c1[1]*uy + c1[2]*uz;
368 dd = c1[0]*c1[0] + c1[1]*c1[1] + c1[2]*c1[2];
372 if ( cosn > hausd*hausd ) {
377 ps = -c2[0]*ux - c2[1]*uy - c2[2]*uz;
379 dd = c2[0]*c2[0]+c2[1]*c2[1]+c2[2]*c2[2];
383 if ( cosn > hausd*hausd ) {
411 if ( (typchk == 1) && (met->
size == 6) ) {
415 else if ( typchk == 2 ) {
416 *MMGS_lenEdg = MMG5_lenSurfEdg;
417 *MMGS_caltri = MMG5_calelt;
446 for (k=1; k<=
mesh->
nt; k++) {
448 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
450 for (i=0; i<3; i++) {
453 MMGS_lenEdg,MMGS_caltri) ) {
461 while ( ns > 0 && ++it < maxit );
463 fprintf(stdout,
" %8" MMG5_PRId
" edge swapped\n",nns);
477 fprintf(stdout,
" ** OPTIMIZING MESH\n");
486 for (k=1; k<=
mesh->
nt; k++) {
488 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
490 for (i=0; i<3; i++) {
499 if ( ilist < 1 )
continue;
502 ier = movridpt(
mesh,met,list,ilist);
508 ier = movintpt(
mesh,met,list,ilist);
518 if (
mesh->
info.
ddebug ) fprintf(stdout,
" %8" MMG5_PRId
" moved, %" MMG5_PRId
" geometry\n",nm,ns);
520 while ( ++it < maxit && nm > 0);
523 fprintf(stdout,
" %8" MMG5_PRId
" vertices moved, %d iter.\n",nnm,it);
544 for (k=1; k<=
mesh->
nt; k++) {
546 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
548 for (i=0; i<3; i++) {
556 fprintf(stderr,
"\n ## Error: %s: unable to delete point idx"
557 " along edge %" MMG5_PRId
" %" MMG5_PRId
".\n", __func__,
585 double s,o[3],no[3],to[3],dd,len;
587 MMG5_int ns,nc,ni,ic;
588 MMG5_int k,nt,vx[3],j,ip,ip1,ip2;
590 static double uv[3][2] = { {0.5,0.5}, {0.,0.5}, {0.5,0.} };
591 static int8_t mmgWarn0=0,mmgWarn1=0,mmgWarn2=0,mmgWarn3=0;
596 for (k=1; k<=
mesh->
nt; k++) {
616 else if ( typchk == 2 ) {
617 for (i=0; i<3; i++) {
622 len = MMG5_lenSurfEdg(
mesh,met,pt->
v[i1],pt->
v[i2],0);
623 if ( !len )
return -1;
628 if ( !pt->
flag )
continue;
633 ier = MMG5_bezierCP(
mesh,pt,&pb,1);
637 for (i=0; i<3; i++) {
646 if ( !
MG_EDG(pt->
tag[i]) && ip > 0 )
continue;
656 fprintf(stderr,
"\n ## Error: %s: unable to"
657 " allocate a new point.\n",__func__);
678 "larger xpoint table",
687 memset(go->
n2,0x00,3*
sizeof(
double));
688 memcpy(go->
n1,no,3*
sizeof(
double));
690 dd = go->
n1[0]*ppt->
n[0] + go->
n1[1]*ppt->
n[1] + go->
n1[2]*ppt->
n[2];
691 ppt->
n[0] -= dd*go->
n1[0];
692 ppt->
n[1] -= dd*go->
n1[1];
693 ppt->
n[2] -= dd*go->
n1[2];
694 dd = ppt->
n[0]*ppt->
n[0] + ppt->
n[1]*ppt->
n[1] + ppt->
n[2]*ppt->
n[2];
703 if ( typchk == 1 && (met->
size>1) )
706 ier = intmet(
mesh,met,k,i,ip,s);
711 fprintf(stderr,
"\n ## Error: %s: unable to interpolate at least"
712 " 1 metric.\n",__func__);
721 memcpy(go->
n2,no,3*
sizeof(
double));
724 ppt->
n[0] = go->
n1[1]*go->
n2[2] - go->
n1[2]*go->
n2[1];
725 ppt->
n[1] = go->
n1[2]*go->
n2[0] - go->
n1[0]*go->
n2[2];
726 ppt->
n[2] = go->
n1[0]*go->
n2[1] - go->
n1[1]*go->
n2[0];
727 dd = ppt->
n[0]*ppt->
n[0] + ppt->
n[1]*ppt->
n[1] + ppt->
n[2]*ppt->
n[2];
737 fprintf(stderr,
"\n ## Warning: %s: flattened angle around ridge."
738 " Unable to split it.\n",__func__);
753 for (k=1; k<=
mesh->
nt; k++) {
755 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
756 else if ( pt->
flag == 7 )
continue;
759 ier = MMG5_bezierCP(
mesh,pt,&pb,1);
763 for (i=0; i<3; i++) {
778 memcpy(go->
n2,no,3*
sizeof(
double));
781 ppt->
n[0] = go->
n1[1]*go->
n2[2] - go->
n1[2]*go->
n2[1];
782 ppt->
n[1] = go->
n1[2]*go->
n2[0] - go->
n1[0]*go->
n2[2];
783 ppt->
n[2] = go->
n1[0]*go->
n2[1] - go->
n1[1]*go->
n2[0];
784 dd = ppt->
n[0]*ppt->
n[0] + ppt->
n[1]*ppt->
n[1] + ppt->
n[2]*ppt->
n[2];
798 fprintf(stdout,
" %" MMG5_PRId
" analyzed %" MMG5_PRId
" proposed\n",
mesh->
nt,ns);
803 for (k=1; k<=
mesh->
np; k++)
811 for (k=1; k<=
mesh->
nt; k++) {
813 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
814 else if ( pt->
flag == 0 )
continue;
816 vx[0] = vx[1] = vx[2] = 0;
819 for (i=0; i<3; i++) {
829 if ( !pt->
flag )
continue;
831 case 1:
case 2:
case 4:
850 for (i=0; i<3; i++) {
855 ppt->
c[0] = 0.5 * (p1->
c[0] + p2->
c[0]);
856 ppt->
c[1] = 0.5 * (p1->
c[1] + p2->
c[1]);
857 ppt->
c[2] = 0.5 * (p1->
c[2] + p2->
c[2]);
864 fprintf(stderr,
"\n ## Warning: %s: surfacic pattern: unable to"
865 " find a valid split for at least 1 point. Point(s)"
866 " deletion.",__func__ );
870 for (i=0; i<3; i++) {
874 fprintf(stderr,
"\n ## Error: %s: unable to delete point"
875 " idx along edge %" MMG5_PRId
" %" MMG5_PRId
".\n",
889 while( ni > 0 && ++it < 40 );
892 fprintf(stdout,
" %" MMG5_PRId
" corrected, %" MMG5_PRId
" invalid\n",nc,ni);
899 for (k=1; k<=nt; k++) {
901 if ( !
MG_EOK(pt) || pt->ref < 0 )
continue;
902 else if ( pt->flag == 0 )
continue;
905 vx[0] = vx[1] = vx[2] = 0;
906 for (i=0; i<3; i++) {
909 if (
MG_GET(pt->flag,i) ) {
914 fprintf(stderr,
"\n ## Error: %s: unable to create point on"
915 " at least 1 edge.\n Exit program.\n",__func__);
922 if ( pt->flag == 1 || pt->flag == 2 || pt->flag == 4 ) {
926 else if ( pt->flag == 7 ) {
934 if ( !
ier )
return -1;
937 fprintf(stdout,
" %7" MMG5_PRId
" splitted\n",ns);
959 double s,uv[2],o[3],no[3],to[3];
961 MMG5_int ip,*adja,jel;
962 int8_t i1,i2,j,jj,j2;
979 ier = MMG5_bezierCP(
mesh,pt,&b,1);
985 if (i == 1) uv[0] = 0.0;
986 else if ( i == 2 ) uv[1] = 0.0;
1005 memcpy(go->
n1,no,3*
sizeof(
double));
1009 ier = intmet(
mesh,met,k,i,ip,s);
1010 if ( !
ier )
return 0;
1029 double ll,ux,uy,uz,hmin;
1031 int l,isloc,
ier,ilist;
1042 for (k=1; k<=
mesh->
nt; k++) {
1044 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
1049 for (i=0; i<3; i++) {
1058 else if ( p1->
tag > p2->
tag || p1->
tag > pt->
tag[i] )
continue;
1061 if ( typchk == 1 ) {
1062 ux = p2->
c[0] - p1->
c[0];
1063 uy = p2->
c[1] - p1->
c[1];
1064 uz = p2->
c[2] - p1->
c[2];
1065 ll = ux*ux + uy*uy + uz*uz;
1084 if ( ll > hmin*hmin )
continue;
1087 ll = MMG5_lenSurfEdg(
mesh,met,pt->
v[i1],pt->
v[i2],0);
1088 if ( !ll )
return -1;
1093 ilist =
chkcol(
mesh,met,k,i,list,typchk,MMGS_lenEdg,MMGS_caltri);
1095 int8_t open = (
mesh->
adja[3*(k-1)+1+i] == 0);
1097 if ( ilist+open > 3 ) {
1099 if ( !
ier )
return -1;
1103 else if ( ilist == 3 ) {
1105 if ( !
ier )
return -1;
1109 else if ( ilist == 2 ) {
1111 if ( !
ier )
return -1;
1118 fprintf(stdout,
" %8" MMG5_PRId
" vertices removed\n",nc);
1138 int8_t i,i1,i2,imax;
1141 for (k=1; k<=
mesh->
nt; k++) {
1143 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
1149 for (i=0; i<3; i++) {
1152 len = MMG5_lenSurfEdg(
mesh,met,pt->
v[i1],pt->
v[i2],0);
1154 if ( !len )
return -1;
1162 else if (
MS_SIN(pt->
tag[imax]) )
continue;
1176 else if ( ip > 0 ) {
1217 for (k=1; k<=
mesh->
nt; k++) {
1219 if ( !
MG_EOK(pt) || pt->
ref < 0 )
continue;
1223 for (i=0; i<3; i++) {
1233 len = MMG5_lenSurfEdg(
mesh,met,pt->
v[i1],pt->
v[i2],0);
1234 if ( !len )
return -1;
1240 else if ( p1->
tag > p2->
tag || p1->
tag > pt->
tag[i] )
continue;
1243 ilist =
chkcol(
mesh,met,k,i,list,2,MMG5_lenSurfEdg,MMG5_calelt);
1245 int8_t open = (
mesh->
adja[3*(k-1)+1+i] == 0);
1247 if ( ilist+open > 3 ) {
1250 if ( !
ier )
return -1;
1253 else if ( ilist == 3 ) {
1256 if ( !
ier )
return -1;
1259 else if ( ilist == 2 ) {
1262 if ( !
ier )
return -1;
1274 int64_t nnc,nns,nnf,nnm;
1275 MMG5_int nc,ns,nf,nm;
1278 it = nnc = nns = nnf = nnm = 0;
1284 fprintf(stderr,
"\n ## Unable to complete mesh. Exit program.\n");
1294 fprintf(stderr,
"\n ## Unable to complete mesh. Exit program.\n");
1306 fprintf(stderr,
"\n ## Unable to improve mesh. Exiting.\n");
1315 fprintf(stderr,
"\n ## Unable to improve mesh. Exiting.\n");
1326 fprintf(stdout,
" %8" MMG5_PRId
" splitted, %8" MMG5_PRId
" collapsed, %8" MMG5_PRId
" swapped, %8" MMG5_PRId
" moved\n",ns,nc,nf,nm);
1327 if ( ns < 10 && MMG5_abs(nc-ns) < 3 )
break;
1328 else if ( it > 3 && MMG5_abs(nc-ns) < 0.3 *
MG_MAX(nc,ns) )
break;
1330 while( ++it < maxit && nc+ns > 0 );
1344 fprintf(stderr,
"\n ## Unable to improve mesh.\n");
1354 fprintf(stderr,
"\n ## Unable to improve mesh. Exiting.\n");
1362 fprintf(stdout,
" ");
1363 fprintf(stdout,
"%8" MMG5_PRId
" swapped, %8" MMG5_PRId
" moved\n",nf,nm);
1366 while( ++it < maxit && nm+nf > 0 );
1371 fprintf(stderr,
"\n ## Unable to improve mesh.\n");
1378 fprintf(stdout,
" %8" MMG5_PRId
" moved\n",nm);
1383 fprintf(stdout,
" %8" PRId64
" splitted, %8" PRId64
" collapsed, %8" PRId64
" swapped, %8" PRId64
" moved, %d iter. \n",nns,nnc,nnf,nnm,it);
1390 MMG5_int nc,ns,nf,nnc,nns,nnf;
1394 nns = nnc = nnf = it = 0;
1405 fprintf(stderr,
"\n ## Unable to complete surface mesh. Exit program.\n");
1410 fprintf(stderr,
"\n ## Hashing problem. Exit program.\n");
1417 fprintf(stderr,
"\n ## Unable to collapse mesh. Exiting.\n");
1430 fprintf(stderr,
"\n ## Unable to improve mesh. Exiting.\n");
1440 fprintf(stdout,
" %8" MMG5_PRId
" splitted, %8" MMG5_PRId
" collapsed, %8" MMG5_PRId
" swapped\n",ns,nc,nf);
1441 if ( it > 3 && MMG5_abs(nc-ns) < 0.1 *
MG_MAX(nc,ns) )
break;
1443 while ( ++it < maxit && ns+nc+nf > 0 );
1447 fprintf(stdout,
" %8" MMG5_PRId
" splitted, %8" MMG5_PRId
" collapsed, %8" MMG5_PRId
" swapped, %d iter.\n",nns,nnc,nnf,it);
1466 fprintf(stdout,
" ** MESH ANALYSIS\n");
1470 fprintf(stdout,
" ** GEOMETRIC MESH\n");
1473 fprintf(stderr,
"\n ## Unable to split mesh-> Exiting.\n");
1479 if ( getenv(
"MMG_SAVE_ANATRI1") ) {
1480 printf(
" ## WARNING: EXIT AFTER ANATRI-1."
1481 " (MMG_SAVE_ANATRI1 env variable is exported).\n");
1491 fprintf(stdout,
" ** COMPUTATIONAL MESH\n");
1494 if ( !MMGS_defsiz(
mesh,met) ) {
1495 fprintf(stderr,
"\n ## Metric undefined. Exit program.\n");
1501 if ( getenv(
"MMG_SAVE_DEFSIZ") ) {
1502 printf(
" ## WARNING: EXIT AFTER DEFSIZ."
1503 " (MMG_SAVE_DEFSIZ env variable is exported).\n");
1509 if (!MMGS_gradsiz(
mesh,met) ) {
1510 fprintf(stderr,
"\n ## Gradation problem. Exit program.\n");
1516 MMGS_gradsizreq(
mesh,met);
1521 if ( getenv(
"MMG_SAVE_GRADSIZ") ) {
1522 printf(
" ## WARNING: EXIT AFTER GRADSIZ."
1523 " (MMG_SAVE_GRADSIZ env variable is exported).\n");
1528 fprintf(stderr,
"\n ## Unable to proceed adaptation. Exit program.\n");
1533 if ( getenv(
"MMG_SAVE_ANATRI2") ) {
1534 printf(
" ## WARNING: EXIT AFTER ANATRI-2."
1535 " (MMG_SAVE_ANATRI2 env variable is exported).\n");
1544 fprintf(stderr,
"\n ## Unable to adapt. Exit program.\n");
MMG5_pMesh MMG5_pSol * sol
int MMGS_bezierInt(MMG5_pBezier pb, double uv[2], double o[3], double no[3], double to[3])
int MMG5_boulet(MMG5_pMesh mesh, MMG5_int start, int ip, MMG5_int *list, int8_t s, int8_t *opn)
int colver(MMG5_pMesh mesh, MMG5_int *list, int ilist)
int colver3(MMG5_pMesh mesh, MMG5_int *list)
int colver2(MMG5_pMesh mesh, MMG5_int *list)
int chkcol(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int *list, int8_t typchk, double(*MMGS_lenEdg)(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, int8_t), double(*MMGS_caltri)(MMG5_pMesh, MMG5_pSol, MMG5_pTria))
int MMG5_hashUpdate(MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
int MMG5_hashNew(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int hsiz, MMG5_int hmax)
MMG5_int MMG5_hashGet(MMG5_Hash *hash, MMG5_int a, MMG5_int b)
int MMG5_hashEdge(MMG5_pMesh mesh, MMG5_Hash *hash, MMG5_int a, MMG5_int b, MMG5_int k)
int MMGS_hashTria(MMG5_pMesh mesh)
static double MMG5_lenSurfEdg_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int ip1, MMG5_int ip2, int8_t isedg)
static double MMG5_lenSurfEdg33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int np0, MMG5_int np1, int8_t isedg)
int MMGS_intmet33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
void MMG5_gradation_info(MMG5_pMesh mesh)
MMG5_int MMGS_newPt(MMG5_pMesh mesh, double c[3], double n[3])
int MMG5_split2_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
int MMGS_split1(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int *vx)
int chkswp(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, int8_t typchk, double(*MMGS_lenEdg)(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, int8_t), double(*MMGS_caltri)(MMG5_pMesh, MMG5_pSol, MMG5_pTria))
int MMGS_split3_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
#define MMGS_POINT_REALLOC(mesh, sol, ip, wantedGap, law, o, tag)
int swapar(MMG5_pMesh mesh, MMG5_int k, int i)
void MMGS_delPt(MMG5_pMesh mesh, MMG5_int ip)
int MMGS_split3(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
int MMGS_simbulgept(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int ip)
int MMGS_split1_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int *vx)
int MMGS_split2(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
int split1b(MMG5_pMesh mesh, MMG5_int k, int8_t i, MMG5_int ip)
int MMG5_scotchCall(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pSol fields, MMG5_int *permNodGlob)
#define MMG5_INCREASE_MEM_MESSAGE()
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]
int MMG5_nortri(MMG5_pMesh mesh, MMG5_pTria pt, double *n)
double MMG5_caltri_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
double MMG5_caltri33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt)
#define MMG5_DEL_MEM(mesh, ptr)
#define MG_SET(flag, bit)
static int movtri(MMG5_pMesh mesh, MMG5_pSol met, int maxit)
int MMG5_mmgs1(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *permNodGlob)
int chkedg(MMG5_pMesh mesh, MMG5_int iel)
static void MMGS_set_localFunc(MMG5_pSol met, int8_t typchk, double(**MMGS_lenEdg)(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, int8_t), double(**MMGS_caltri)(MMG5_pMesh, MMG5_pSol, MMG5_pTria))
static int swpmsh(MMG5_pMesh mesh, MMG5_pSol met, int8_t typchk)
static int anaelt(MMG5_pMesh mesh, MMG5_pSol met, int8_t typchk)
static MMG5_int colelt(MMG5_pMesh mesh, MMG5_pSol met, int8_t typchk)
int MMGS_dichoto(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
static int anatri(MMG5_pMesh mesh, MMG5_pSol met, int8_t typchk)
static MMG5_int adpspl(MMG5_pMesh mesh, MMG5_pSol met)
MMG5_int chkspl(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i)
static int MMGS_delPatternPts(MMG5_pMesh mesh, MMG5_Hash hash)
static int adptri(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *permNodGlob)
int MMGS_dichoto1b(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel, int ia, MMG5_int ip)
static MMG5_int adpcol(MMG5_pMesh mesh, MMG5_pSol met)
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Local parameters for a specific entity and reference.
Structure to store vertices of an MMG mesh.
Structure to store triangles of a MMG mesh.
Structure to store surface vertices of an MMG mesh.