92 fprintf(stdout,
"-keep-ref preserve initial domain references in level-set mode.\n");
95 fprintf(stdout,
"-rn [n] Turn on or off the renumbering using SCOTCH [0/1] \n");
106 fprintf(stdout,
"\n\n");
115 fprintf(stdout,
"SCOTCH renumbering : enabled\n");
117 fprintf(stdout,
"SCOTCH renumbering : disabled\n");
119 fprintf(stdout,
"\n\n");
133 for ( i=1; i< argc; ++i ) {
134 if ( !strcmp(argv[i],
"-val") ) {
138 else if ( ( !strcmp( argv[ i ],
"-?" ) ) || ( !strcmp( argv[ i ],
"-h" ) ) ) {
147 if ( *argv[i] ==
'-' ) {
150 if ( !strcmp(argv[i],
"-ar") ) {
151 if ( i >= argc -1 ) {
152 fprintf(stderr,
"\nMissing argument option %s\n",argv[i]);
156 val = strtof(argv[i+1],&endptr);
157 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
164 fprintf(stderr,
"\nMissing argument option %s\n",argv[i]);
175 if ( !strcmp(argv[i],
"-f") ) {
176 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-' ) {
181 fprintf(stderr,
"\nMissing filename for %s\n",argv[i-1]);
189 if ( i >= argc -1 ) {
190 fprintf(stderr,
"\nMissing argument option %s\n",argv[i]);
194 if ( !strcmp(argv[i],
"-hmin") ) {
197 else if ( !strcmp(argv[i],
"-hmax") ) {
200 else if ( !strcmp(argv[i],
"-hsiz") ) {
203 else if ( !strcmp(argv[i],
"-hausd") ) {
206 else if ( !strcmp(argv[i],
"-hgradreq") ) {
209 else if ( !strcmp(argv[i],
"-hgrad") ) {
220 val = strtof(argv[i+1],&endptr);
221 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
228 fprintf(stderr,
"\nMissing argument option %s\n",argv[i]);
235 if ( !strcmp(argv[i],
"-default") ) {
244 if ( !strcmp(argv[i],
"-in") ) {
245 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-') {
252 fprintf(stderr,
"\nMissing filname for %s\n",argv[i-1]);
257 else if ( !strcmp(argv[i],
"-isoref") && ++i <= argc ) {
268 if ( !strcmp(argv[i],
"-keep-ref") ) {
274 if ( !strcmp(argv[i],
"-ls") ) {
279 val = strtof(argv[i+1],&endptr);
280 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
287 else if ( !strcmp(argv[i],
"-lssurf") ) {
292 val = strtof(argv[i+1],&endptr);
293 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
302 if ( !strcmp(argv[i],
"-met") ) {
304 fprintf(stderr,
"\nNo metric structure allocated for %s option\n",
308 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-' ) {
313 fprintf(stderr,
"\nMissing filname for %s\n",argv[i-1]);
318 else if (!strcmp(argv[i],
"-m") ) {
319 if ( ++i < argc && isdigit(argv[i][0]) ) {
324 fprintf(stderr,
"\nMissing argument option %s\n",argv[i-1]);
331 if ( !strcmp(argv[i],
"-nr") ) {
335 else if ( !strcmp(argv[i],
"-nsd") ) {
336 if ( ++i < argc && isdigit(argv[i][0]) ) {
341 fprintf(stderr,
"\nMissing argument option %s\n",argv[i-1]);
346 else if ( !strcmp(argv[i],
"-noswap") ) {
350 else if( !strcmp(argv[i],
"-noinsert") ) {
354 else if( !strcmp(argv[i],
"-nomove") ) {
358 else if ( !strcmp(argv[i],
"-nreg") ) {
362 else if( !strcmp(argv[i],
"-nosizreq") ) {
369 if ( (!strcmp(argv[i],
"-out")) || (!strcmp(argv[i],
"-o")) ) {
370 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-') {
374 fprintf(stderr,
"\nMissing filname for %s\n",argv[i-1]);
379 else if( !strcmp(argv[i],
"-optim") ) {
384 fprintf(stderr,
"\nUnrecognized option %s\n",argv[i]);
390 if ( !strcmp(argv[i],
"-rmc") ) {
394 val = strtof(argv[i+1],&endptr);
395 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
403 else if ( !strcmp(argv[i],
"-rn") ) {
405 if ( isdigit(argv[i][0]) ) {
410 fprintf(stderr,
"\nMissing argument option %s\n",argv[i-1]);
416 fprintf(stderr,
"\nMissing argument option %s\n",argv[i-1]);
423 fprintf(stderr,
"\nUnrecognized option %s\n",argv[i]);
429 if ( !strcmp(argv[i],
"-sol") ) {
433 if ( ++i < argc && isascii(argv[i][0]) && argv[i][0]!=
'-' ) {
438 fprintf(stderr,
"\nMissing filname for %s\n",argv[i-1]);
446 if ( argv[i][0] ==
'-' || isdigit(argv[i][0]) ) {
454 fprintf(stderr,
"\nMissing argument option %s\n",argv[i-1]);
460 if ( !strcmp(argv[i],
"-xreg") ) {
464 val = strtof(argv[i+1],&endptr);
465 if ( endptr == &(argv[i+1][strlen(argv[i+1])]) ) {
474 fprintf(stderr,
"\nUnrecognized option %s\n",argv[i]);
493 fprintf(stdout,
"\nArgument %s ignored\n",argv[i]);
503 fprintf(stdout,
"\n -- PRINT (0 10(advised) -10) ?\n");
511 fprintf(stdout,
"\n -- INPUT MESH NAME ?\n");
534 if (
tmp->namein == NULL ) {
574 MMG5_int *adja,k,j,iel;
582 fprintf(stderr,
"\n ## Error: %s: unable to create "
583 "adjacency table.\n",__func__);
589 for ( k=1; k<=
mesh->
nt; k++ ) {
591 if ( !
MG_EOK(pt) )
continue;
595 for ( i=0; i<3; i++ ) {
604 if ( (!iel) || (pt->
ref != pt1->
ref) ) {
618 printf(
" Exit program.\n");
621 MMG5_Edge,
"non bdy edges arrray",
return 0);
625 printf(
" Exit program.\n");
628 MMG5_Edge,
"non bdy edges arrray",
return 0);
632 for ( k=1; k<=
mesh->
nt; k++ ) {
634 if ( !
MG_EOK(pt) )
continue;
638 for ( i=0; i<3; i++ ) {
649 if ( (!iel) || (pt->
ref != pt1->
ref) ) {
673 fprintf(stderr,
"\n ## Error: %s: edge array is not allocated.\n"
674 " Please, call the MMGS_Get_numberOfNonBdyEdges function"
675 " before the %s one.\n",
680 ptr_c = ptr_c-
sizeof(size_t);
681 na_tot = *((
size_t*)ptr_c);
684 fprintf(stderr,
"\n ## Error: %s: no internal edge.\n"
685 " Please, call the MMGS_Get_numberOfNonBdyEdges function"
686 " before the %s one and check that the number of internal"
687 " edges is non null.\n",
691 if ( (
size_t)
mesh->
namax+idx > na_tot ) {
692 fprintf(stderr,
"\n ## Error: %s: Can't get the internal edge of index %" MMG5_PRId
"."
693 " Index must be between 1 and %zu.\n",
694 __func__,idx,na_tot-(
size_t)
mesh->
namax);
716 listri[0] =
mesh->
adja[3*(kel-1)+1]/3;
717 listri[1] =
mesh->
adja[3*(kel-1)+2]/3;
718 listri[2] =
mesh->
adja[3*(kel-1)+3]/3;
726 MMG5_int k,prevk,*adja;
727 int i,i1,i2,iploc,nbpoi;
731 for ( iploc=0; iploc<3; ++iploc ) {
732 if ( pt->
v[iploc] == ip )
break;
742 fprintf(stderr,
"\n ## Warning: %s: unable to compute adjacent"
743 " vertices of the vertex %" MMG5_PRId
":\nthe ball of point contain too many"
744 " elements.\n",__func__,ip);
757 while ( k && k != start );
759 if ( k > 0 )
return nbpoi;
763 fprintf(stderr,
"\n ## Warning: %s: unable to compute adjacent vertices of the"
764 " vertex %" MMG5_PRId
":\nthe ball of point contain too many elements.\n",
782 fprintf(stderr,
"\n ## Warning: %s: unable to compute adjacent vertices of the"
783 " vertex %" MMG5_PRId
":\nthe ball of point contain too many elements.\n",
820 for (k=1; k<=
mesh->
np; k++) {
825 for (k=1; k<=
mesh->
nt; k++) {
827 if ( !
MG_EOK(ptt) )
continue;
829 for (i=0; i<3; i++) {
872 if ( met->
size!=1 ) {
873 fprintf(stderr,
"\n ## Error: %s: unexpected size of metric: %d.\n",
884 for (k=1; k<=
mesh->
nt; k++) {
886 if ( !
MG_EOK(ptt) )
continue;
888 for (i=0; i<3; i++) {
894 ux = p1->
c[0] - p2->
c[0];
895 uy = p1->
c[1] - p2->
c[1];
896 uz = p1->
c[2] - p2->
c[2];
897 dd = sqrt(ux*ux + uy*uy + uz*uz);
907 for (k=1; k<=
mesh->
np; k++) {
912 met->
m[k] = met->
m[k] / (double)mark[k];
947 fprintf(stderr,
"\n ## Error: %s: unable to compute ball of point.\n",
959 for ( j=0; j<6; ++j ) {
963 for ( j=0; j<ilist; ++j ) {
966 MMG5_int iel = list[j] / 3;
967 int8_t i1 = list[j] % 3;
973 u[0] = p1->
c[0] - p2->
c[0];
974 u[1] = p1->
c[1] - p2->
c[1];
975 u[2] = p1->
c[2] - p2->
c[2];
993 for ( j=0; j<6; ++j ) {
994 if ( !isfinite(tensordot[j]) ) {
1002 double lambda[3],vp[3][3];
1006 else if ( (!isfinite(lambda[0])) || (!isfinite(lambda[1])) || (!isfinite(lambda[2])) ) {
1009 else if ( lambda[0]<=0 || lambda[1]<=0 || lambda[2]<=0 ) {
1025 double dd = (double)ilist/3.;
1026 for ( j=0; j<6; ++j ) {
1027 m[j] = dd*tensordot[j];
1051 int ilist,
double r[3][3],
double *lispoi,
double n[3]) {
1055 MMG5_int *adja,kold;
1071 j = (int)adja[i1] % 3;
1077 while ( iel && iel != k );
1090 ux = p2->
c[0] - p0->
c[0];
1091 uy = p2->
c[1] - p0->
c[1];
1092 uz = p2->
c[2] - p0->
c[2];
1094 lispoi[3*idx+1] = r[0][0]*ux + r[0][1]*uy + r[0][2]*uz;
1095 lispoi[3*idx+2] = r[1][0]*ux + r[1][1]*uy + r[1][2]*uz;
1096 lispoi[3*idx+3] = r[2][0]*ux + r[2][1]*uy + r[2][2]*uz;
1099 j = (int)adja[i1] % 3;
1111 ux = p2->
c[0] - p0->
c[0];
1112 uy = p2->
c[1] - p0->
c[1];
1113 uz = p2->
c[2] - p0->
c[2];
1115 lispoi[3*idx+1] = r[0][0]*ux + r[0][1]*uy + r[0][2]*uz;
1116 lispoi[3*idx+2] = r[1][0]*ux + r[1][1]*uy + r[1][2]*uz;
1117 lispoi[3*idx+3] = r[2][0]*ux + r[2][1]*uy + r[2][2]*uz;
1119 assert ( idx == ilist );
1122 for (j=0; j<ilist; j++) {
1123 double area = lispoi[3*j+1]*lispoi[3*(j+1)+2] - lispoi[3*j+2]*lispoi[3*(j+1)+1];
1124 if ( area <= 0.0 ) {
1125 fprintf(stderr,
"\n ## Error: %s: unable to compute ball rotation.\n",
1149 double *m,
double isqhmax) {
1151 double r[3][3],lispoi[3*
MMGS_LMAX+1],b0[3],b1[3],b2[3],dd;
1162 fprintf(stderr,
"\n ## Error: %s: unable to compute ball of point.\n",
1174 double nn[3] = {0.,0.,0.};
1178 for ( j=0; j<ilist; ++j ) {
1183 nn[0] += n[0]; nn[1] += n[1]; nn[2] += n[2];
1186 dd = nn[0]*nn[0] + nn[1]*nn[1] + nn[2]*nn[2];
1188 dd = 1.0 / sqrt(dd);
1196 fprintf(stderr,
"\n ## Error: %s: we should not pass here with a "
1197 "non-manifold point: it sould always be posible to compute the 3D"
1198 " unit tensor on such points.\n",
1210 dd = nn[0]*nn[0] + nn[1]*nn[1] + nn[2]*nn[2];
1212 dd = 1.0 / sqrt(dd);
1227 nn[0] = p1->
n[0]; nn[1] = p1->
n[1]; nn[2] = p1->
n[2];
1234 fprintf(stderr,
"\n ## Error: %s: unable to compute opened ball rotation.\n",
1241 fprintf(stderr,
"\n ## Error: %s: unable to compute ball rotation.\n",
1248 double tensordot[3];
1253 for ( j=0; j<ilist; ++j ) {
1256 tensordot[0] += lispoi[3*j+1]*lispoi[3*j+1];
1257 tensordot[1] += lispoi[3*j+1]*lispoi[3*j+2];
1258 tensordot[2] += lispoi[3*j+2]*lispoi[3*j+2];
1262 dd = 1./(tensordot[0]*tensordot[2] - tensordot[1]*tensordot[1]);
1263 dd *= (double)ilist/2.;
1265 double tmp = tensordot[0];
1267 tensordot[0] = dd*tensordot[2];
1268 tensordot[1] = -dd*tensordot[1];
1269 tensordot[2] = dd*
tmp;
1273 double lambda[2],vp[2][2];
1276 assert (lambda[0] > 0. && lambda[1] > 0. &&
"Negative eigenvalue");
1280 assert (isfinite(lambda[0]) && isfinite(lambda[1]) &&
"wrong eigenvalue");
1296 b0[0] = tensordot[0]*r[0][0] + tensordot[1]*r[1][0];
1297 b0[1] = tensordot[0]*r[0][1] + tensordot[1]*r[1][1];
1298 b0[2] = tensordot[0]*r[0][2] + tensordot[1]*r[1][2];
1299 b1[0] = tensordot[1]*r[0][0] + tensordot[2]*r[1][0];
1300 b1[1] = tensordot[1]*r[0][1] + tensordot[2]*r[1][1];
1301 b1[2] = tensordot[1]*r[0][2] + tensordot[2]*r[1][2];
1303 b2[0] = isqhmax*r[2][0];
1304 b2[1] = isqhmax*r[2][1];
1305 b2[2] = isqhmax*r[2][2];
1307 m[0] = r[0][0] * b0[0] + r[1][0] * b1[0] + r[2][0] * b2[0];
1308 m[1] = r[0][0] * b0[1] + r[1][0] * b1[1] + r[2][0] * b2[1];
1309 m[2] = r[0][0] * b0[2] + r[1][0] * b1[2] + r[2][0] * b2[2];
1311 m[3] = r[0][1] * b0[1] + r[1][1] * b1[1] + r[2][1] * b2[1];
1312 m[4] = r[0][1] * b0[2] + r[1][1] * b1[2] + r[2][1] * b2[2];
1314 m[5] = r[0][2] * b0[2] + r[1][2] * b1[2] + r[2][2] * b2[2];
1337 double *m,tensordot[6];
1342 if ( met->
size!=6 ) {
1343 fprintf(stderr,
"\n ## Error: %s: unexpected size of metric: %d.\n",
1344 __func__,met->
size);
1350 fprintf(stderr,
"\n ## Error: %s: unable to allocate metric.\n",
1359 for (k=1; k<=
mesh->
np; k++) {
1375 for (k=1; k<=
mesh->
nt; k++) {
1377 if ( !
MG_EOK(ptt) )
continue;
1379 for (i=0; i<3; i++) {
1390 u[0] = p1->
c[0] - p2->
c[0];
1391 u[1] = p1->
c[1] - p2->
c[1];
1392 u[2] = p1->
c[2] - p2->
c[2];
1394 tensordot[0] = u[0]*u[0];
1395 tensordot[1] = u[0]*u[1];
1396 tensordot[2] = u[0]*u[2];
1397 tensordot[3] = u[1]*u[1];
1398 tensordot[4] = u[1]*u[2];
1399 tensordot[5] = u[2]*u[2];
1403 for ( j=0; j<6; ++j ) {
1404 met->
m[iadr+j] += tensordot[j];
1411 for ( j=0; j<6; ++j ) {
1412 met->
m[iadr+j] += tensordot[j];
1419 for (k=1; k<=
mesh->
np; k++) {
1434 fprintf(stdout,
" ## Warning: %s: %d: non invertible matrix."
1435 " Impose hmax size at point\n",__func__,__LINE__);
1436 met->
m[iadr+0] = isqhmax;
1438 met->
m[iadr+3] = isqhmax;
1440 met->
m[iadr+5] = isqhmax;
1444 double dd = (double)mark[k]/3.;
1446 for ( j=0; j<6; ++j ) {
1447 met->
m[iadr+j] = dd*tensordot[j];
1458 for (k=1; k<=
mesh->
nt; k++) {
1460 if ( !
MG_EOK(ptt) )
continue;
1462 for (i=0; i<3; i++) {
1488 fprintf(stderr,
"\n ## Error: %s: unable to compute anisotropic unit"
1489 " tensor at corner point %"MMG5_PRId
".\n",__func__,
MMGS_indPt(
mesh,ip));
1498 fprintf(stderr,
"\n ## Error: %s: unable to compute anisotropic unit"
1499 " tensor at required point %"MMG5_PRId
".\n",__func__,
MMGS_indPt(
mesh,ip));
1516 fprintf(stderr,
"\n ## Error: %s: unable to compute anisotropic unit"
1517 " tensor at ridge point %"MMG5_PRId
".\n",__func__,
1529 fprintf(stderr,
"\n ## Error: %s: unable to compute anisotropic unit"
1530 " tensor at required point %"MMG5_PRId
".\n",__func__,
1537 double lambda[3],vp[3][3];
1539 fprintf(stdout,
" ## Warning: %s: %d: non diagonalizable metric.",
1543 assert ( lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.
1544 &&
"Negative eigenvalue" );
1545 assert ( isfinite(lambda[0]) && isfinite(lambda[1]) && isfinite(lambda[2])
1546 &&
"Infinite eigenvalue" );
1552 for (k=1; k<=
mesh->
np; k++) {
1560 double lambda[3],vp[3][3];
1562 fprintf(stdout,
" ## Warning: %s: %d: non diagonalizable metric.",
1566 assert ( lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.
1567 &&
"Negative eigenvalue" );
1568 assert ( isfinite(lambda[0]) && isfinite(lambda[1]) && isfinite(lambda[2])
1569 &&
"Infinite eigenvalue" );
int MMG5_Compute_constantSize(MMG5_pMesh mesh, MMG5_pSol met, double *hsiz)
void MMG5_Set_constantSize(MMG5_pMesh mesh, MMG5_pSol met, double hsiz)
int MMGS_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
set an integer parameter of the remesher
int MMGS_Set_inputMeshName(MMG5_pMesh mesh, const char *meshin)
Set the name of the input mesh.
int MMGS_Set_inputParamName(MMG5_pMesh mesh, const char *fparamin)
Set the name of the input parameter file.
int MMGS_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
Set the name of the input solution file.
int MMGS_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
Initialize an array of solution fields: set dimension, types and number of fields.
int MMGS_Set_outputMeshName(MMG5_pMesh mesh, const char *meshout)
Set the name of the output mesh file.
int MMGS_Set_dparameter(MMG5_pMesh mesh, MMG5_pSol sol, int dparam, double val)
set a real-valued parameter of the remesher
int MMGS_Set_outputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solout)
Set the name of the output solution file.
MMG5_pMesh MMG5_pSol * sol
if(!ier) exit(EXIT_FAILURE)
int movintpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
int movridpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
int MMG5_gradsizreq_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMG5_compute_meanMetricAtMarkedPoints_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMGS_gradsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMGS_defsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMGS_surfballRotation(MMG5_pMesh mesh, MMG5_pPoint p0, MMG5_int *list, int ilist, double r[3][3], double *lispoi, double n[3])
int MMG5_boulet(MMG5_pMesh mesh, MMG5_int start, int ip, MMG5_int *list, int8_t s, int8_t *opn)
int MMG5_eigensym(double m[3], double lambda[2], double vp[2][2])
int MMG5_eigenv3d(int symmat, double *mat, double lambda[3], double v[3][3])
Find eigenvalues and vectors of a 3x3 matrix.
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_lenSurfEdg_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int np0, MMG5_int np1, int8_t isedg)
int intmet_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
int intmet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
int MMG5_gradsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMG5_compute_meanMetricAtMarkedPoints_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMG5_gradsizreq_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMGS_defsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
LIBMMG_CORE_EXPORT int MMG5_Clean_isoEdges(MMG5_pMesh mesh)
API headers and documentation for the mmgs library.
LIBMMGS_EXPORT int(* MMGS_doSol)(MMG5_pMesh mesh, MMG5_pSol met)
Compute an isotropic size map according to the mean of the length of the edges passing through a vert...
@ MMGS_IPARAM_numsubdomain
@ MMGS_DPARAM_angleDetection
int movridpt_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
int movintpt_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
int MMGS_memOption(MMG5_pMesh mesh)
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
int MMG5_3dSolTruncature_ani(MMG5_pMesh mesh, MMG5_pSol met)
double MMG5_caltri_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
#define MMG5_ADD_MEM(mesh, size, message, law)
static const uint8_t MMG5_iprv2[3]
static const uint8_t MMG5_inxt2[6]
int MMG5_solTruncature_iso(MMG5_pMesh mesh, MMG5_pSol met)
int MMG5_nortri(MMG5_pMesh mesh, MMG5_pTria pt, double *n)
int MMG5_rotmatrix(double n[3], double r[3][3])
#define MMG5_FILESTR_LGTH
double MMG5_caltri_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
#define MMG5_SAFE_FREE(ptr)
#define MMG_FSCANF(stream, format,...)
#define MMG5_DEL_MEM(mesh, ptr)
int MMG5_invmat(double *m, double *mi)
#define MMG5_SAFE_RECALLOC(ptr, prevSize, newSize, type, message, law)
Structure to store edges of am MMG mesh.
Structure to store input parameters of the job.
Structure to store vertices of an MMG mesh.
Structure to store triangles of a MMG mesh.