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.