119 fprintf(stderr,
"\n ## Warning: %s: old solution deletion.\n",__func__);
122 fprintf(stderr,
"\n ## Error: %s: mmg3d need a solution imposed on vertices.\n",
141 fprintf(stderr,
"\n ## Error: %s: type of solution not yet implemented.\n",
162 MMG5_int nentities,
int *typSol) {
169 fprintf(stderr,
"\n ## Warning: %s: old solutions array deletion.\n",
182 for ( j=0; j<nsols; ++j ) {
187 sprintf(data,
"sol_%d",j);
192 sprintf(data,
"sol_%d.o",j);
198 fprintf(stderr,
"\n ## Error: %s: unable to set the size of the"
199 " solution num %d.\n",__func__,j);
221 MMG5_int nt, MMG5_int nquad, MMG5_int na ) {
225 fprintf(stderr,
"\n ## Warning: %s: old mesh deletion.\n",__func__);
228 fprintf(stderr,
" ** MISSING DATA:\n");
229 fprintf(stderr,
" Your mesh must contains at least points.\n");
233 fprintf(stderr,
" ** WARNING:\n");
234 fprintf(stderr,
" Your mesh don't contains tetrahedra.\n");
265 MMG5_int nt, MMG5_int nquad, MMG5_int na ) {
276 fprintf(stderr,
"\n ## Error: %s: not enough memory %d\n",__func__,
292 if ( typEntity != NULL )
295 if ( typSol != NULL ) {
296 if (
sol->size == 1 )
298 else if (
sol->size == 3 )
300 else if (
sol->size == 6 )
315 MMG5_int* np,
int* typSol) {
320 fprintf(stderr,
"\n ## Error: %s: your mesh structure must be allocated"
321 " and filled\n",__func__);
331 if ( typSol != NULL ) {
332 typSol[j] = psl->
type;
344 MMG5_int* nt, MMG5_int * nquad, MMG5_int* na) {
350 if ( nprism != NULL )
365 fprintf(stderr,
"\n ## Error: %s: you must set the number of points with the",
367 fprintf(stderr,
" MMG3D_Set_meshSize function before setting vertices in mesh.\n");
372 fprintf(stderr,
"\n ## Error: %s: unable to allocate a new point.\n",__func__);
373 fprintf(stderr,
" max number of points: %" MMG5_PRId
"\n",
mesh->
npmax);
379 fprintf(stderr,
"\n ## Error: %s: attempt to set new vertex at position %" MMG5_PRId
".",
381 fprintf(stderr,
" Overflow of the given number of vertices: %" MMG5_PRId
"\n",
mesh->
np);
382 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
383 fprintf(stderr,
" of the vertex.\n");
399 int* isCorner,
int* isRequired) {
404 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of points.\n",
406 fprintf(stderr,
" You must pass here exactly one time (the first time ");
407 fprintf(stderr,
"you call the MMG3D_Get_vertex function).\n");
408 fprintf(stderr,
" If not, the number of call of this function");
409 fprintf(stderr,
" exceed the number of points: %" MMG5_PRId
"\n ",
mesh->
np);
416 fprintf(stderr,
"\n ## Error: %s: unable to get point.\n",__func__);
417 fprintf(stderr,
" The number of call of MMG3D_Get_vertex function");
418 fprintf(stderr,
" can not exceed the number of points: %" MMG5_PRId
"\n ",
mesh->
np);
426 int* isCorner,
int* isRequired, MMG5_int idx) {
428 if ( idx < 1 || idx >
mesh->
np ) {
429 fprintf(stderr,
"\n ## Error: %s: unable to get point at position %" MMG5_PRId
".\n",
431 fprintf(stderr,
" Your vertices numbering goes from 1 to %" MMG5_PRId
"\n",
mesh->
np);
441 if ( isCorner != NULL ) {
448 if ( isRequired != NULL ) {
469 ppt->
c[0] = vertices[j];
470 ppt->
c[1] = vertices[j+1];
471 ppt->
c[2] = vertices[j+2];
478 ppt->
ref = refs[i-1];
486 int* areCorners,
int* areRequired) {
495 vertices[j] = ppt->
c[0];
496 vertices[j+1] = ppt->
c[1];
497 vertices[j+2] = ppt->
c[2];
503 if ( areCorners !=NULL ) {
510 if ( areRequired != NULL ) {
529 fprintf(stderr,
"\n ## Error: %s: You must set the number of elements with the",
531 fprintf(stderr,
" MMG3D_Set_meshSize function before setting elements in mesh\n");
536 fprintf(stderr,
"\n ## Error: %s: unable to allocate a new element.\n",
538 fprintf(stderr,
" max number of element: %" MMG5_PRId
"\n",
mesh->
nemax);
544 fprintf(stderr,
"\n ## Error: %s: attempt to set new tetrahedron at position %" MMG5_PRId
".",
546 fprintf(stderr,
" Overflow of the given number of tetrahedron: %" MMG5_PRId
"\n",
mesh->
ne);
547 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
548 fprintf(stderr,
" of the tetrahedron.\n");
557 pt->
ref = MMG5_abs(ref);
566 fprintf(stderr,
"\n ## Error: %s: tetrahedron %" MMG5_PRId
" has volume null.\n",
568 for ( ip=0; ip<4; ip++ ) {
570 for ( j=0; j<3; j++ ) {
571 if ( fabs(ppt->
c[j])>0. ) {
572 fprintf(stderr,
" Check that you don't have a sliver tetrahedron.\n");
577 fprintf(stderr,
" All vertices have zero coordinates.");
578 fprintf(stderr,
" Check that you have set the vertices before the tetrahedra.\n");
581 else if ( vol < 0.0 ) {
594 MMG5_int* ref,
int* isRequired) {
599 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of"
600 " tetrahedra.\n",__func__);
601 fprintf(stderr,
" You must pass here exactly one time (the first time ");
602 fprintf(stderr,
"you call the MMG3D_Get_tetrahedron function).\n");
603 fprintf(stderr,
" If not, the number of call of this function");
604 fprintf(stderr,
" exceed the number of tetrahedron: %" MMG5_PRId
"\n ",
mesh->
ne);
611 fprintf(stderr,
"\n ## Error: %s: unable to get tetra.\n",__func__);
612 fprintf(stderr,
" The number of call of MMG3D_Get_tetrahedron function");
613 fprintf(stderr,
" can not exceed the number of tetra: %" MMG5_PRId
"\n ",
mesh->
ne);
625 if ( isRequired != NULL ) {
648 pt->
v[1] = tetra[j+1];
649 pt->
v[2] = tetra[j+2];
650 pt->
v[3] = tetra[j+3];
653 pt->
ref = MMG5_abs(refs[i-1]);
663 fprintf(stderr,
"\n ## Error: %s: tetrahedron %" MMG5_PRId
" has volume null.\n",
666 for ( ip=0; ip<4; ip++ ) {
668 for ( j=0; j<3; j++ ) {
669 if ( fabs(ppt->
c[j])>0. ) {
670 fprintf(stderr,
" Check that you don't have a sliver tetrahedron.\n");
676 fprintf(stderr,
" All vertices have zero coordinates.");
677 fprintf(stderr,
" Check that you have set the vertices before the tetrahedra.\n");
680 else if ( vol < 0.0 ) {
702 tetra[j+1] = pt->
v[1];
703 tetra[j+2] = pt->
v[2];
704 tetra[j+3] = pt->
v[3];
706 refs[i-1] = pt->
ref ;
707 if ( areRequired != NULL ) {
709 areRequired[i-1] = 1;
711 areRequired[i-1] = 0;
718 MMG5_int v3, MMG5_int v4, MMG5_int v5, MMG5_int ref, MMG5_int pos) {
722 fprintf(stderr,
"\n ## Error: %s: You must set the number of prisms with the",
724 fprintf(stderr,
" MMG3D_Set_meshSize function before setting elements in mesh\n");
729 fprintf(stderr,
"\n ## Error: %s: attempt to set new prism at position %" MMG5_PRId
".",
731 fprintf(stderr,
" Overflow of the given number of prism: %" MMG5_PRId
"\n",
mesh->
nprism);
732 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
733 fprintf(stderr,
" of the prism.\n");
758 MMG5_int* v4, MMG5_int* v5, MMG5_int* ref,
int* isRequired) {
759 static MMG5_int npri = 0;
764 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of prisms.\n",
766 fprintf(stderr,
" You must pass here exactly one time (the first time ");
767 fprintf(stderr,
"you call the MMG3D_Get_prism function).\n");
768 fprintf(stderr,
" If not, the number of call of this function");
769 fprintf(stderr,
" exceed the number of prisms: %" MMG5_PRId
"\n ",
mesh->
nprism);
776 fprintf(stderr,
"\n ## Error: %s: unable to get prism.\n",__func__);
777 fprintf(stderr,
" The number of call of MMG3D_Get_prism function");
778 fprintf(stderr,
" can not exceed the number of prism: %" MMG5_PRId
"\n ",
mesh->
nprism);
793 if ( isRequired != NULL ) {
811 pp->
v[0] = prisms[j];
812 pp->
v[1] = prisms[j+1];
813 pp->
v[2] = prisms[j+2];
814 pp->
v[3] = prisms[j+3];
815 pp->
v[4] = prisms[j+4];
816 pp->
v[5] = prisms[j+5];
841 prisms[j] = pp->
v[0];
842 prisms[j+2] = pp->
v[1];
843 prisms[j+1] = pp->
v[2];
844 prisms[j+3] = pp->
v[3];
845 prisms[j+4] = pp->
v[4];
846 prisms[j+5] = pp->
v[5];
849 refs[i-1] = pp->
ref ;
850 if ( areRequired != NULL ) {
852 areRequired[i-1] = 1;
854 areRequired[i-1] = 0;
865 fprintf(stderr,
"\n ## Error: %s: You must set the number of triangles"
866 " with the",__func__);
867 fprintf(stderr,
" MMG3D_Set_meshSize function before setting triangles in mesh\n");
872 fprintf(stderr,
"\n ## Error: %s: unable to allocate a new triangle.\n",
874 fprintf(stderr,
" max number of triangle: %" MMG5_PRId
"\n",
mesh->
ntmax);
880 fprintf(stderr,
"\n ## Error: %s: attempt to set new triangle at"
881 " position %" MMG5_PRId
".",__func__,pos);
882 fprintf(stderr,
" Overflow of the given number of triangles: %" MMG5_PRId
"\n",
mesh->
nt);
883 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
884 fprintf(stderr,
" of the triangle.\n");
903 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of"
904 " triangles.\n",__func__);
905 fprintf(stderr,
" You must pass here exactly one time (the first time ");
906 fprintf(stderr,
"you call the MMG3D_Get_triangle function).\n");
907 fprintf(stderr,
" If not, the number of call of this function");
908 fprintf(stderr,
" exceed the number of triangles: %" MMG5_PRId
"\n ",
mesh->
nt);
915 fprintf(stderr,
"\n ## Error: %s: unable to get triangle.\n",__func__);
916 fprintf(stderr,
" The number of call of MMG3D_Get_triangle function");
917 fprintf(stderr,
" can not exceed the number of triangles: %" MMG5_PRId
"\n ",
mesh->
nt);
928 if ( isRequired != NULL ) {
947 ptt->
v[0] = tria[j] ;
948 ptt->
v[1] = tria[j+1];
949 ptt->
v[2] = tria[j+2];
951 ptt->
ref = refs[i-1];
965 tria[j+1] = ptt->
v[1];
966 tria[j+2] = ptt->
v[2];
969 refs[i-1] = ptt->
ref ;
970 if ( areRequired != NULL ) {
973 areRequired[i-1] = 1;
975 areRequired[i-1] = 0;
982 MMG5_int ref,MMG5_int pos) {
985 fprintf(stderr,
"\n ## Error: %s: You must set the number of quadrilaterals"
986 " with the",__func__);
987 fprintf(stderr,
" MMG3D_Set_meshSize function before setting quadrilaterals in mesh\n");
992 fprintf(stderr,
"\n ## Error: %s: attempt to set new quadrilateral"
993 " at position %" MMG5_PRId
".",__func__,pos);
994 fprintf(stderr,
" Overflow of the given number of quadrilaterals: %" MMG5_PRId
"\n",
mesh->
nquad);
995 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
996 fprintf(stderr,
" of the quadrilateral.\n");
1010 MMG5_int* ref,
int* isRequired) {
1012 static MMG5_int nqi = 0;
1017 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter"
1018 " of quadrilaterals.\n",__func__);
1019 fprintf(stderr,
" You must pass here exactly one time (the first time ");
1020 fprintf(stderr,
"you call the MMG3D_Get_quadrilateral function).\n");
1021 fprintf(stderr,
" If not, the number of call of this function");
1022 fprintf(stderr,
" exceed the number of quadrilaterals: %" MMG5_PRId
"\n ",
mesh->
nquad);
1029 fprintf(stderr,
"\n ## Error: %s: unable to get quadrilateral.\n",__func__);
1030 fprintf(stderr,
" The number of call of MMG3D_Get_quadrilateral function");
1031 fprintf(stderr,
" can not exceed the number of quadrilaterals: %" MMG5_PRId
"\n ",
mesh->
nquad);
1043 if ( isRequired != NULL ) {
1062 pq->
v[0] = quads[j] ;
1063 pq->
v[1] = quads[j+1];
1064 pq->
v[2] = quads[j+2];
1065 pq->
v[3] = quads[j+3];
1067 pq->
ref = refs[i-1];
1080 quads[j] = pq->
v[0];
1081 quads[j+1] = pq->
v[1];
1082 quads[j+2] = pq->
v[2];
1083 quads[j+3] = pq->
v[3];
1086 refs[i-1] = pq->
ref ;
1087 if ( areRequired != NULL ) {
1090 areRequired[i-1] = 1;
1092 areRequired[i-1] = 0;
1101 fprintf(stderr,
"\n ## Error: %s: You must set the number of edges with"
1103 fprintf(stderr,
" MMG3D_Set_meshSize function before setting edges in mesh\n");
1107 fprintf(stderr,
"\n ## Error: %s: unable to allocate a new edge.\n",
1109 fprintf(stderr,
" max number of edge: %" MMG5_PRId
"\n",
mesh->
namax);
1114 fprintf(stderr,
"\n ## Error: %s: attempt to set new edge at position %" MMG5_PRId
".",
1116 fprintf(stderr,
" Overflow of the given number of edges: %" MMG5_PRId
"\n",
mesh->
na);
1117 fprintf(stderr,
"\n ## Check the mesh size, its compactness or the position");
1118 fprintf(stderr,
" of the edge.\n");
1131 ,
int* isRidge,
int* isRequired) {
1136 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of edges.\n",
1138 fprintf(stderr,
" You must pass here exactly one time (the first time ");
1139 fprintf(stderr,
"you call the MMG3D_Get_edge function).\n");
1140 fprintf(stderr,
" If not, the number of call of this function");
1141 fprintf(stderr,
" exceed the number of edges: %" MMG5_PRId
"\n ",
mesh->
na);
1148 fprintf(stderr,
"\n ## Error: %s: unable to get edge.\n",__func__);
1149 fprintf(stderr,
" The number of call of MMG3D_Get_edge function");
1150 fprintf(stderr,
" can not exceed the number of edges: %" MMG5_PRId
"\n ",
mesh->
na);
1159 if ( isRidge != NULL ) {
1166 if ( isRequired != NULL ) {
1179 for (i=1;i<=
mesh->
na;i++)
1196 for (i=1;i<=
mesh->
na;i++)
1205 if ( areRidges != NULL ) {
1212 if ( areRequired != NULL ) {
1214 areRequired[i-1] = 1;
1216 areRequired[i-1] = 0;
1224 assert ( k <= mesh->np );
1230 assert ( k <= mesh->np );
1236 assert ( k <= mesh->np );
1243 assert ( k <= mesh->np );
1249 assert ( k <= mesh->ne );
1255 assert ( k <= mesh->ne );
1263 for ( k=0; k<nreq; ++k ){
1273 for ( k=0; k<nreq; ++k ){
1281 assert ( k <= mesh->nt );
1289 assert ( k <= mesh->nt );
1299 for ( k=0; k<nreq; ++k ){
1310 for ( k=0; k<nreq; ++k ){
1319 assert ( k <= mesh->nt );
1327 assert ( k <= mesh->nt );
1337 for ( k=0; k<npar; ++k ){
1348 for ( k=0; k<npar; ++k ){
1357 assert ( k <= mesh->na );
1363 assert ( k <= mesh->na );
1369 assert ( k <= mesh->na );
1375 assert ( k <= mesh->na );
1382 assert ( k <= mesh->np );
1394 assert ( k <= mesh->np );
1406 if ( k < 1 || k >
mesh->
ne ) {
1407 fprintf(stderr,
"\n ## Error: %s: unable to access to tetra %" MMG5_PRId
".\n",
1409 fprintf(stderr,
" Tetra numbering goes from 1 to %" MMG5_PRId
"\n",
mesh->
ne);
1415 if ( (!met) || (!met->
m) || met->
size==1 ) {
1437 fprintf(stderr,
"\n ## Error: %s: You must set the number of"
1438 " solution with the",__func__);
1439 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1440 fprintf(stderr,
" in solution structure \n");
1444 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",__func__);
1445 fprintf(stderr,
" Minimal index of the solution position must be 1.\n");
1448 if ( pos >= met->
npmax ) {
1449 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",__func__);
1450 fprintf(stderr,
" max number of solutions: %" MMG5_PRId
"\n",met->
npmax);
1454 if ( pos > met->
np ) {
1455 fprintf(stderr,
"\n ## Error: %s: attempt to set new solution at"
1456 " position %" MMG5_PRId
".",__func__,pos);
1457 fprintf(stderr,
" Overflow of the given number of solutions: %" MMG5_PRId
"\n",met->
np);
1458 fprintf(stderr,
"\n ## Check the solution size, its compactness or the position");
1459 fprintf(stderr,
" of the solution.\n");
1472 if ( met->
npi == met->
np ) {
1475 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of points.\n",
1477 fprintf(stderr,
" You must pass here exactly one time (the first time ");
1478 fprintf(stderr,
"you call the MMG3D_Get_scalarSol function).\n");
1479 fprintf(stderr,
" If not, the number of call of this function");
1480 fprintf(stderr,
" exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1486 if ( met->
npi > met->
np ) {
1487 fprintf(stderr,
"\n ## Error: %s: unable to get solution.\n",__func__);
1488 fprintf(stderr,
" The number of call of MMG3D_Get_scalarSol function");
1489 fprintf(stderr,
" can not exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1493 *s = met->
m[met->
npi];
1502 fprintf(stderr,
"\n ## Error: %s: You must set the number of solution"
1503 " with the",__func__);
1504 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1505 fprintf(stderr,
" in solution structure \n");
1509 for ( k=0; k<met->
np; ++k )
1518 for ( k=0; k<met->
np; ++k )
1527 fprintf(stderr,
"\n ## Error: %s: You must set the number of solution"
1528 " with the",__func__);
1529 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1530 fprintf(stderr,
" in solution structure \n");
1534 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",__func__);
1535 fprintf(stderr,
" Minimal index of the solution position must be 1.\n");
1538 if ( pos >= met->
npmax ) {
1539 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",__func__);
1540 fprintf(stderr,
" max number of solutions: %" MMG5_PRId
"\n",met->
npmax);
1544 if ( pos > met->
np ) {
1545 fprintf(stderr,
"\n ## Error: %s: attempt to set new solution at"
1546 " position %" MMG5_PRId
".",__func__,pos);
1547 fprintf(stderr,
" Overflow of the given number of solutions: %" MMG5_PRId
"\n",met->
np);
1548 fprintf(stderr,
"\n ## Check the solution size, its compactness or the position");
1549 fprintf(stderr,
" of the solution.\n");
1554 met->
m[3*pos+1] = vy;
1555 met->
m[3*pos+2] = vz;
1565 if ( met->
npi == met->
np ) {
1568 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of points.\n",
1570 fprintf(stderr,
" You must pass here exactly one time (the first time ");
1571 fprintf(stderr,
"you call the MMG3D_Get_vectorSol function).\n");
1572 fprintf(stderr,
" If not, the number of call of this function");
1573 fprintf(stderr,
" exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1579 if ( met->
npi > met->
np ) {
1580 fprintf(stderr,
"\n ## Error: %s: unable to get solution.\n",__func__);
1581 fprintf(stderr,
" The number of call of MMG3D_Get_vectorSol function");
1582 fprintf(stderr,
" can not exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1586 *vx = met->
m[3*met->
npi];
1587 *vy = met->
m[3*met->
npi+1];
1588 *vz = met->
m[3*met->
npi+2];
1598 fprintf(stderr,
"\n ## Error: %s: You must set the number of solution"
1599 " with the",__func__);
1600 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1601 fprintf(stderr,
" in solution structure \n");
1605 for ( k=0; k<met->
np; ++k ) {
1620 for ( k=0; k<met->
np; ++k ) {
1632 double m22,
double m23,
double m33, MMG5_int pos) {
1635 fprintf(stderr,
"\n ## Error: %s: You must set the number of solution"
1636 " with the",__func__);
1637 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1638 fprintf(stderr,
" in solution structure \n");
1642 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",
1644 fprintf(stderr,
" Minimal index of the solution position must be 1.\n");
1647 if ( pos >= met->
npmax ) {
1648 fprintf(stderr,
"\n ## Error: %s: unable to set a new solution.\n",__func__);
1649 fprintf(stderr,
" max number of solutions: %" MMG5_PRId
"\n",met->
npmax);
1653 if ( pos > met->
np ) {
1654 fprintf(stderr,
"\n ## Error: %s: attempt to set new solution at "
1655 "position %" MMG5_PRId
".",__func__,pos);
1656 fprintf(stderr,
" Overflow of the given number of solutions: %" MMG5_PRId
"\n",met->
np);
1657 fprintf(stderr,
"\n ## Check the solution size, its compactness or the position");
1658 fprintf(stderr,
" of the solution.\n");
1662 met->
m[6*pos] = m11;
1663 met->
m[6*pos+1] = m12;
1664 met->
m[6*pos+2] = m13;
1665 met->
m[6*pos+3] = m22;
1666 met->
m[6*pos+4] = m23;
1667 met->
m[6*pos+5] = m33;
1674 double *m22,
double *m23,
double *m33) {
1678 if ( met->
npi == met->
np ) {
1681 fprintf(stderr,
"\n ## Warning: %s: reset the internal counter of points.\n",
1683 fprintf(stderr,
" You must pass here exactly one time (the first time ");
1684 fprintf(stderr,
"you call the MMG3D_Get_tensorSol function).\n");
1685 fprintf(stderr,
" If not, the number of call of this function");
1686 fprintf(stderr,
" exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1692 if ( met->
npi > met->
np ) {
1693 fprintf(stderr,
"\n ## Error: %s: unable to get solution.\n",__func__);
1694 fprintf(stderr,
" The number of call of MMG3D_Get_tensorSol function");
1695 fprintf(stderr,
" can not exceed the number of points: %" MMG5_PRId
"\n ",met->
np);
1699 *m11 = met->
m[6*met->
npi];
1700 *m12 = met->
m[6*met->
npi+1];
1701 *m13 = met->
m[6*met->
npi+2];
1702 *m22 = met->
m[6*met->
npi+3];
1703 *m23 = met->
m[6*met->
npi+4];
1704 *m33 = met->
m[6*met->
npi+5];
1714 fprintf(stderr,
"\n ## Error: %s: You must set the number of"
1715 " solution with the",__func__);
1716 fprintf(stderr,
" MMG3D_Set_solSize function before setting values");
1717 fprintf(stderr,
" in solution structure \n");
1721 for ( k=0; k<met->
np; ++k ) {
1739 for ( k=0; k<met->
np; ++k ) {
1760 switch ( psl->
type ) {
1774 fprintf(stderr,
"\n ## Error: %s: unexpected type of solution: %s.\n",
1789 switch ( psl->
type ) {
1803 fprintf(stderr,
"\n ## Error: %s: unexpected type of solution: %s\n",
1817 switch ( psl->
type ) {
1831 fprintf(stderr,
"\n ## Error: %s: unexpected type of solution: %s.\n",
1845 switch ( psl->
type ) {
1859 fprintf(stderr,
"\n ## Error: %s: unexpected type of solution: %s\n",
1871 for (k=1; k<=
mesh->
ne; k++) {
1886 fprintf(stderr,
"\n ## Error: %s: if you don't use the MMG3D_loadMesh"
1887 " function,",__func__);
1888 fprintf(stderr,
" you must call the MMG3D_Set_meshSize function to have a");
1889 fprintf(stderr,
" valid mesh.\n");
1890 fprintf(stderr,
" Missing datas.\n");
1894 if ( met->
npi != met->
np ) {
1895 fprintf(stderr,
"\n ## Error: %s: if you don't use the MMG3D_loadSol"
1896 " function,",__func__);
1897 fprintf(stderr,
" you must call the MMG3D_Set_solSize function to have a");
1898 fprintf(stderr,
" valid solution.\n");
1899 fprintf(stderr,
" Missing datas.\n");
1907 fprintf(stderr,
" ** MISSING DATA.\n");
1908 fprintf(stderr,
" Check that your mesh contains points and tetrahedra.\n");
1909 fprintf(stderr,
" Exit program.\n");
1915 fprintf(stderr,
" ** 3 DIMENSIONAL MESH NEEDED. Exit program.\n");
1918 if ( met->
dim != 3 ) {
1919 fprintf(stderr,
" ** WRONG DIMENSION FOR METRIC. Exit program.\n");
1923 if ( !met ->ver ) met ->
ver = 2;
1935 fprintf(stderr,
"\n ## Warning: %s: skip of all entites with %"MMG5_PRId
1952 }
while( ++k <= mesh->nti );
1960 "triangles",
return 0);
1971 pa->
ref = MMG5_abs(pa->
ref);
1983 pa1->
ref = MMG5_abs(pa1->
ref);
1985 }
while( ++k <= mesh->nai );
2001 for (k=1; k<=
mesh->
ne; k++) {
2012 MMG5_int aux,vv[4],iel;
2019 for ( j=0; j<4; ++j ) {
2020 if ( vv[j] >
mesh->
np ) {
2021 fprintf(stderr,
"\n ## Error: %s: vertex %" MMG5_PRId
" doesn't exist in the mesh.\n",
2023 fprintf(stderr,
" Use the MMG3D_Add_vertex function to add it.\n");
2031 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
2032 " a new element.\n",__func__);
2034 fprintf(stderr,
" Exit program.\n");
2043 pt->
ref = MMG5_abs(ref);
2052 fprintf(stderr,
"\n ## Error: %s: tetrahedron %" MMG5_PRId
": null volume.\n",
2054 for ( ip=0; ip<4; ip++ ) {
2056 for ( j=0; j<3; j++ ) {
2057 if ( fabs(ppt->
c[j])>0. ) {
2058 fprintf(stderr,
" Check that you don't have a sliver tetrahedron.\n");
2063 fprintf(stderr,
" All vertices have zero coordinates.");
2064 fprintf(stderr,
" Check that you have set the vertices before the tetrahedra.\n");
2067 else if ( vol < 0.0 ) {
2070 pt->
v[2] = pt->
v[3];
2092 "larger point table",
2093 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
2094 " a new point\n",__func__);
2098 for (klink=
mesh->
npnil; klink<mesh->npmax-1; klink++)
2104 fprintf(stderr,
"\n ## Error: %s: unable to allocate"
2105 " a new point\n",__func__);
2123 fprintf(stderr,
"\n ## Warning: %s: maximal memory authorized must be"
2124 " strictly positive.\n",__func__);
2125 fprintf(stderr,
" Reset to default value.\n");
2151 fprintf(stderr,
"\n ## Warning: %s: angle detection parameter set"
2152 " to default value\n",__func__);
2176 if ( val < 0 || val > 2 )
2185 fprintf(stderr,
"\n ## Error: %s"
2186 " \"lagrangian motion\" option unavailable (-lag):\n"
2187 " set the USE_ELAS CMake's flag to ON when compiling the mmg3d"
2188 " library to enable this feature.\n",__func__);
2226 fprintf(stderr,
"\n ## Warning: %s: new local parameter values\n",__func__);
2233 printf(
" Exit program.\n");
2238 inival = MMG5_INTMAX;
2252 printf(
" Exit program.\n");
2265 fprintf(stderr,
"\n ## Warning: %s: new multi materials values\n",__func__);
2271 printf(
" Exit program.\n");
2289 fprintf(stderr,
"\n ## Error: %s: unknown type of parameter\n",__func__);
2359 fprintf(stderr,
"\n ## Error: %s: unknown type of parameter\n",__func__);
2377 fprintf(stderr,
"\n ## Warning: hmin value must be strictly lower than hmax one"
2386 fprintf(stderr,
"\n ## Warning: hmin value must be strictly lower than hmax one"
2410 fprintf(stderr,
"\n ## Error: %s: hausdorff number must be strictly"
2411 " positive.\n",__func__);
2421 if (val < 0.0 || val > 1.0) {
2422 fprintf(stderr,
"\n ## Error: %s: Coordinate regularization parameter must be comprised between 0 and 1.\n",__func__);
2438 fprintf(stderr,
"\n ## Error: %s: unknown type of parameter\n", __func__);
2445 double hmin,
double hmax,
double hausd){
2450 fprintf(stderr,
"\n ## Error: %s: You must set the number of local"
2451 " parameters",__func__);
2452 fprintf(stderr,
" with the MMG3D_Set_iparameters function before setting");
2453 fprintf(stderr,
" values in local parameters structure. \n");
2457 fprintf(stderr,
"\n ## Error: %s: unable to set a new local parameter.\n",
2459 fprintf(stderr,
" max number of local parameters: %d\n",
mesh->
info.
npar);
2463 fprintf(stderr,
"\n ## Warning: %s: you must apply your local parameters",
2465 fprintf(stderr,
" on triangles (MMG5_Triangle or %d) or tetrahedron"
2467 fprintf(stderr,
"\n ## Unknown type of entity: ignored.\n");
2471 fprintf(stderr,
"\n ## Error: %s: negative references are not allowed.\n",
2477 fprintf(stderr,
"\n ## Error: %s: negative hmin value is not allowed.\n",
2482 fprintf(stderr,
"\n ## Error: %s: negative hmax value is not allowed.\n",
2487 fprintf(stderr,
"\n ## Error: %s: negative hausd value is not allowed.\n",
2495 if ( par->
elt == typ && par->
ref == ref ) {
2500 fprintf(stderr,
"\n ## Warning: %s: new parameters (hausd, hmin and hmax)",
2502 fprintf(stderr,
" for entities of type %d and of ref %" MMG5_PRId
"\n",typ,ref);
2523 fprintf(stderr,
"\n ## Error: %s: unexpected entity type: %s.\n",
const char * MMG5_Get_typeName(enum MMG5_type typ)
int MMG5_Set_inputParamName(MMG5_pMesh mesh, const char *fparamin)
int MMG5_Set_outputMeshName(MMG5_pMesh mesh, const char *meshout)
int MMG5_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
int MMG5_Free_allSols(MMG5_pMesh mesh, MMG5_pSol *sol)
int MMG5_Set_inputMeshName(MMG5_pMesh mesh, const char *meshin)
void MMG5_Init_parameters(MMG5_pMesh mesh)
const char * MMG5_Get_entitiesName(enum MMG5_entities ent)
void MMG5_Init_fileNames(MMG5_pMesh mesh, MMG5_pSol sol)
int MMG5_Set_outputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solout)
int MMG3D_Init_mesh(const int starter,...)
Initialize a mesh structure and optionally the associated solution and metric structures.
int MMG3D_Set_vectorSol(MMG5_pSol met, double vx, double vy, double vz, MMG5_int pos)
Set a single element of a vector solution structure.
int MMG3D_Unset_requiredEdge(MMG5_pMesh mesh, MMG5_int k)
Remove the "required" attribute from a single edge.
int MMG3D_GetByIdx_vertex(MMG5_pMesh mesh, double *c0, double *c1, double *c2, MMG5_int *ref, int *isCorner, int *isRequired, MMG5_int idx)
Get the coordinates and reference of a specific vertex in the mesh.
int MMG3D_Get_vectorSol(MMG5_pSol met, double *vx, double *vy, double *vz)
Get the next element of a vector solution structure.
int MMG3D_Get_vertices(MMG5_pMesh mesh, double *vertices, MMG5_int *refs, int *areCorners, int *areRequired)
Get the coordinates and references of all vertices in the mesh.
int MMG3D_Get_prism(MMG5_pMesh mesh, MMG5_int *v0, MMG5_int *v1, MMG5_int *v2, MMG5_int *v3, MMG5_int *v4, MMG5_int *v5, MMG5_int *ref, int *isRequired)
Get the vertices and reference of the next prism in the mesh.
int MMG3D_Get_normalAtVertex(MMG5_pMesh mesh, MMG5_int k, double *n0, double *n1, double *n2)
Get the normal orientation at a single mesh vertex.
int MMG3D_Set_triangles(MMG5_pMesh mesh, MMG5_int *tria, MMG5_int *refs)
Set the vertices and references of all triangles in a mesh.
int MMG3D_Unset_corner(MMG5_pMesh mesh, MMG5_int k)
Remove the "corner" attribute from a vertex.
void MMG3D_Init_fileNames(MMG5_pMesh mesh, MMG5_pSol sol)
Initialize file names to their default values.
int MMG3D_Set_quadrilateral(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int v3, MMG5_int ref, MMG5_int pos)
Set the vertices and reference of a single quadrilateral in a mesh.
int MMG3D_Unset_ridge(MMG5_pMesh mesh, MMG5_int k)
Remove the "ridge" attribute from a single edge.
int MMG3D_Set_corner(MMG5_pMesh mesh, MMG5_int k)
Assign the "corner" attribute to a vertex.
int MMG3D_Get_edge(MMG5_pMesh mesh, MMG5_int *e0, MMG5_int *e1, MMG5_int *ref, int *isRidge, int *isRequired)
Get the vertices and reference of the next edge in the mesh.
int MMG3D_Set_inputMeshName(MMG5_pMesh mesh, const char *meshin)
Set the name of input mesh.
int MMG3D_Set_inputParamName(MMG5_pMesh mesh, const char *fparamin)
Set the name of the input parameter file.
int MMG3D_Set_ithSols_inSolsAtVertices(MMG5_pSol sol, int i, double *s)
Set all elements of one out of multiple solution fields that are defined on vertices.
int MMG3D_Get_prisms(MMG5_pMesh mesh, MMG5_int *prisms, MMG5_int *refs, int *areRequired)
Get the vertices and references of all prisms in the mesh.
int MMG3D_Set_edges(MMG5_pMesh mesh, MMG5_int *edges, MMG5_int *refs)
Set the vertices and references of all edges in a mesh.
int MMG3D_Set_tensorSols(MMG5_pSol met, double *sols)
Set all elements of a tensor solution structure.
int MMG3D_Set_requiredTetrahedron(MMG5_pMesh mesh, MMG5_int k)
Assign the "required" attribute to a tetrahedron.
int MMG3D_Get_triangle(MMG5_pMesh mesh, MMG5_int *v0, MMG5_int *v1, MMG5_int *v2, MMG5_int *ref, int *isRequired)
Get the vertices and reference of the next triangle in the mesh.
double MMG3D_Get_tetrahedronQuality(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k)
Get the quality measure of a single tetrahedron in the mesh.
int MMG3D_Set_dparameter(MMG5_pMesh mesh, MMG5_pSol sol, int dparam, double val)
set a real-valued parameter of the remesher
int MMG3D_Get_tensorSol(MMG5_pSol met, double *m11, double *m12, double *m13, double *m22, double *m23, double *m33)
Get the next element of a tensor solution structure.
int MMG3D_Set_localParameter(MMG5_pMesh mesh, MMG5_pSol sol, int typ, MMG5_int ref, double hmin, double hmax, double hausd)
set a local parameter
int MMG3D_Set_tetrahedron(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int v3, MMG5_int ref, MMG5_int pos)
set a single tetrahedron's vertices
int MMG3D_Set_triangle(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int ref, MMG5_int pos)
Set the vertices and reference of a single triangle in a mesh.
int MMG3D_Get_tetrahedron(MMG5_pMesh mesh, MMG5_int *v0, MMG5_int *v1, MMG5_int *v2, MMG5_int *v3, MMG5_int *ref, int *isRequired)
Get the vertices and reference of the next tetrahedron in the mesh.
int MMG3D_Set_scalarSols(MMG5_pSol met, double *s)
Set the values of all elements of a scalar solution structure.
int MMG3D_Get_quadrilaterals(MMG5_pMesh mesh, MMG5_int *quads, MMG5_int *refs, int *areRequired)
Get the vertices and references of all quadrilaterals of the mesh.
int MMG3D_Get_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int *typEntity, MMG5_int *np, int *typSol)
Get the number of elements, dimension, and type of a solution structure.
int MMG3D_Set_edge(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int ref, MMG5_int pos)
Set the vertices and reference of a single edge in a mesh.
int MMG3D_Get_ithSol_inSolsAtVertices(MMG5_pSol sol, int i, double *s, MMG5_int pos)
Get one out of several solutions at a specific vertex.
int MMG3D_Set_scalarSol(MMG5_pSol met, double s, MMG5_int pos)
Set a single element of a scalar solution structure.
int MMG3D_Free_allSols(MMG5_pMesh mesh, MMG5_pSol *sol)
Deallocate an array of solution fields.
int MMG3D_Get_vectorSols(MMG5_pSol met, double *sols)
Get all elements of a vector solution structure.
int MMG3D_Set_quadrilaterals(MMG5_pMesh mesh, MMG5_int *quads, MMG5_int *refs)
Set the vertices and references of all quadrilaterals in a mesh.
int MMG3D_Get_vertex(MMG5_pMesh mesh, double *c0, double *c1, double *c2, MMG5_int *ref, int *isCorner, int *isRequired)
Get the coordinates c0, c1,c2 and reference ref of the next vertex of mesh.
int MMG3D_Set_ithSol_inSolsAtVertices(MMG5_pSol sol, int i, double *s, MMG5_int pos)
Set a single element of one out of multiple solution fields that are defined on vertices.
int MMG3D_Get_edges(MMG5_pMesh mesh, MMG5_int *edges, MMG5_int *refs, int *areRidges, int *areRequired)
Get the vertices and references of all edges in a mesh.
int MMG3D_Get_tensorSols(MMG5_pSol met, double *sols)
Get all elements of a tensor solution field.
int MMG3D_Set_lsBaseReference(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int br)
Set a new level-set base reference.
int MMG3D_Set_parallelTriangles(MMG5_pMesh mesh, MMG5_int *parIdx, MMG5_int npar)
Assign the "parallel" attribute to multiple triangles.
int MMG3D_Set_vectorSols(MMG5_pSol met, double *sols)
Set all elements of a vector solution structure.
void MMG3D_Set_handGivenMesh(MMG5_pMesh mesh)
Finish providing mesh data without using the API functions.
int MMG3D_Set_requiredVertex(MMG5_pMesh mesh, MMG5_int k)
Assign the "required" attribute to a vertex.
int MMG3D_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
Set the name of input solution file.
int MMG3D_Unset_requiredTriangles(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq)
Remove the "required" attribute from multiple triangles.
int MMG3D_Unset_requiredTetrahedra(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq)
Remove the "required" attribute from multiple tetrahedra.
int MMG3D_Set_multiMat(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ref, int split, MMG5_int rmin, MMG5_int rplus)
Set the reference mapping for the elements of reference ref in level-set discretization mode.
int MMG3D_Set_requiredTriangle(MMG5_pMesh mesh, MMG5_int k)
Assign the "required" attribute to a single triangle.
int MMG3D_Set_vertices(MMG5_pMesh mesh, double *vertices, MMG5_int *refs)
Set all vertex coordinates and references in a mesh structure.
int MMG3D_Free_structures(const int starter,...)
Structure deallocations before return.
int MMG3D_Add_tetrahedron(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int v3, MMG5_int ref)
Add a tetrahedron to the mesh.
int MMG3D_Set_ridge(MMG5_pMesh mesh, MMG5_int k)
Assign the "ridge" attribute to a single edge.
int MMG3D_Set_solsAtVerticesSize(MMG5_pMesh mesh, MMG5_pSol *sol, int nsols, MMG5_int nentities, int *typSol)
Initialize an array of solution values defined at vertices.
int MMG3D_Free_names(const int starter,...)
Structure deallocations before return.
int MMG3D_Set_outputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solout)
Set the name of the output solution file.
int MMG3D_Get_iparameter(MMG5_pMesh mesh, MMG5_int iparam)
Get the value of an integer parameter of the remesher.
int MMG3D_Set_outputMeshName(MMG5_pMesh mesh, const char *meshout)
Set the name of output mesh file.
int MMG3D_Set_parallelTriangle(MMG5_pMesh mesh, MMG5_int k)
Assign the "parallel" attribute to a single triangle.
int MMG3D_Set_prism(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int v3, MMG5_int v4, MMG5_int v5, MMG5_int ref, MMG5_int pos)
Set the vertices and reference of a single prism in a mesh.
int MMG3D_Get_ithSols_inSolsAtVertices(MMG5_pSol sol, int i, double *s)
Get one out of several solutions at all vertices in the mesh.
int MMG3D_setMeshSize_initData(MMG5_pMesh mesh, MMG5_int np, MMG5_int ne, MMG5_int nprism, MMG5_int nt, MMG5_int nquad, MMG5_int na)
int MMG3D_Chk_meshData(MMG5_pMesh mesh, MMG5_pSol met)
Check if the number of given entities match with mesh and sol size.
int MMG3D_Get_scalarSols(MMG5_pSol met, double *s)
Get all elements of a scalar solution structure defined at vertices.
MMG5_int MMG3D_Add_vertex(MMG5_pMesh mesh, double c0, double c1, double c2, MMG5_int ref)
Add a vertex to the mesh.
int MMG3D_Get_solsAtVerticesSize(MMG5_pMesh mesh, MMG5_pSol *sol, int *nsols, MMG5_int *np, int *typSol)
Get the number of elements, type, and dimensions of several solutions defined on vertices.
int MMG3D_Get_triangles(MMG5_pMesh mesh, MMG5_int *tria, MMG5_int *refs, int *areRequired)
Get the vertices and references of all triangles in the mesh.
int MMG3D_Unset_parallelTriangle(MMG5_pMesh mesh, MMG5_int k)
Remove the "parallel" attribute from a single triangle.
int MMG3D_Set_tensorSol(MMG5_pSol met, double m11, double m12, double m13, double m22, double m23, double m33, MMG5_int pos)
Set a single element of a tensor solution structure.
int MMG3D_Get_quadrilateral(MMG5_pMesh mesh, MMG5_int *v0, MMG5_int *v1, MMG5_int *v2, MMG5_int *v3, MMG5_int *ref, int *isRequired)
Get the vertices and reference of the next quadrilateral of the mesh.
int MMG3D_Get_tetrahedra(MMG5_pMesh mesh, MMG5_int *tetra, MMG5_int *refs, int *areRequired)
Get the vertices and reference of all tetrahedra in the mesh.
int MMG3D_Set_vertex(MMG5_pMesh mesh, double c0, double c1, double c2, MMG5_int ref, MMG5_int pos)
Set the coordinates of a single vertex.
int MMG3D_Get_scalarSol(MMG5_pSol met, double *s)
Get the next element of a scalar solution structure defined at vertices.
int MMG3D_Get_meshSize(MMG5_pMesh mesh, MMG5_int *np, MMG5_int *ne, MMG5_int *nprism, MMG5_int *nt, MMG5_int *nquad, MMG5_int *na)
Get the number of vertices, tetrahedra, prisms, triangles, quadrilaterals and edges of the mesh.
int MMG3D_Set_prisms(MMG5_pMesh mesh, MMG5_int *prisms, MMG5_int *refs)
Set the vertices and references of all prisms in a mesh.
void MMG3D_Init_parameters(MMG5_pMesh mesh)
Initialize parameters to their default values.
int MMG3D_Free_all(const int starter,...)
Deallocations before return.
int MMG3D_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
set an integer parameter of the remesher
int MMG3D_Unset_requiredTetrahedron(MMG5_pMesh mesh, MMG5_int k)
Remove the "required" attribute from a tetrahedron.
int MMG3D_Unset_requiredVertex(MMG5_pMesh mesh, MMG5_int k)
Remove required attribute from a vertex.
int MMG3D_Set_normalAtVertex(MMG5_pMesh mesh, MMG5_int k, double n0, double n1, double n2)
Set the normal orientation at a single vertex.
int MMG3D_Set_requiredEdge(MMG5_pMesh mesh, MMG5_int k)
Assign the "required" attribute to a single edge.
int MMG3D_Set_meshSize(MMG5_pMesh mesh, MMG5_int np, MMG5_int ne, MMG5_int nprism, MMG5_int nt, MMG5_int nquad, MMG5_int na)
Set the number of vertices, tetrahedra, prisms, triangles, quadrilaterals, and edges of a mesh.
int MMG3D_Unset_requiredTriangle(MMG5_pMesh mesh, MMG5_int k)
Remove the "required" attribute from a single triangle.
int MMG3D_Unset_parallelTriangles(MMG5_pMesh mesh, MMG5_int *parIdx, MMG5_int npar)
Remove the "parallel" attribute from multiple triangles.
int MMG3D_Set_requiredTriangles(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq)
Assign the "required" attribute to multiple triangles.
int MMG3D_Set_requiredTetrahedra(MMG5_pMesh mesh, MMG5_int *reqIdx, MMG5_int nreq)
Assign the "required" attribute to multiple tetrahedra.
int MMG3D_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
Initialize a solution field.
int MMG3D_Set_tetrahedra(MMG5_pMesh mesh, MMG5_int *tetra, MMG5_int *refs)
Set the vertices and references of all tetrahedra in a mesh structure.
static int MMG3D_skipIso(MMG5_pMesh mesh)
MMG5_pMesh MMG5_pSol * sol
if(!ier) exit(EXIT_FAILURE)
va_start(argptr, starter)
static double MMG5_caltet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG5_caltet_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
static double MMG3D_caltetLES_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
API headers and documentation for the mmg3d library, for volumetric meshes in 3D.
@ MMG3D_IPARAM_numberOfLocalParam
@ MMG3D_DPARAM_angleDetection
@ MMG3D_IPARAM_numsubdomain
@ MMG3D_IPARAM_numberOfMat
@ MMG3D_IPARAM_numberOfLSBaseReferences
MMG5_int MMG3D_newElt(MMG5_pMesh mesh)
int MMG3D_Free_all_var(va_list argptr)
int MMG3D_Free_structures_var(va_list argptr)
MMG5_int MMG3D_newPt(MMG5_pMesh mesh, double c[3], uint16_t tag, MMG5_int src)
double MMG5_caltet33_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt)
int MMG3D_Free_names_var(va_list argptr)
int MMG3D_Init_mesh_var(va_list argptr)
#define MMG3D_TETRA_REALLOC(mesh, jel, wantedGap, law)
int MMG3D_memOption(MMG5_pMesh mesh)
int MMG3D_setMeshSize_alloc(MMG5_pMesh)
LIBMMG_CORE_EXPORT int MMG5_Set_multiMat(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int ref, int split, MMG5_int rin, MMG5_int rex)
LIBMMG_CORE_EXPORT int MMG5_Set_lsBaseReference(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_int br)
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
#define MMG5_INCREASE_MEM_MESSAGE()
#define MMG5_ADD_MEM(mesh, size, message, law)
#define MMG5_TAB_RECALLOC(mesh, ptr, initSize, wantedGap, type, message, law)
double MMG5_orvol(MMG5_pPoint point, MMG5_int *v)
#define MMG5_DEL_MEM(mesh, ptr)
#define MMG5_SAFE_RECALLOC(ptr, prevSize, newSize, type, message, law)
Structure to store edges of am MMG mesh.
To store user-defined references in the mesh (useful in LS mode)
Local parameters for a specific entity and reference.
Structure to store vertices of an MMG mesh.
Structure to store prsim of a MMG mesh.
Structure to store quadrangles of an MMG mesh.
Structure to store tetrahedra of an MMG mesh.
Structure to store triangles of a MMG mesh.