35 long posnp,posnt,posncor,posned,posnq,posreq,posreqed,posntreq,posnqreq;
36 MMG5_int k,
tmp,ncor,norient,nreq,ntreq,nreqed,nqreq,nref;
44 posnp = posnt = posncor = posned = posnq = posreq = posreqed = posntreq = posnqreq = 0;
45 ncor = nreq = nreqed = ntreq = nqreq = 0;
53 ptr = strstr(data,
".mesh");
55 strcat(data,
".meshb");
56 if (!(inm = fopen(data,
"rb")) ) {
57 ptr = strstr(data,
".mesh");
60 if (!(inm = fopen(data,
"rb")) ) {
68 ptr = strstr(data,
".meshb");
72 if( !(inm = fopen(data,
"rb")) ) {
78 fprintf(stdout,
" %%%% %s OPENED\n",data);
84 while(fscanf(inm,
"%127s",&chaine[0])!=EOF && strncmp(chaine,
"End",strlen(
"End")) ) {
85 if ( chaine[0] ==
'#' ) {
90 if(!strncmp(chaine,
"MeshVersionFormatted",strlen(
"MeshVersionFormatted"))) {
94 else if(!strncmp(chaine,
"Dimension",strlen(
"Dimension"))) {
98 fprintf(stdout,
"WRONG USE OF 3dMedit option \n");
104 fprintf(stdout,
"BAD DIMENSION : %d\n",
mesh->
dim);
109 else if(!strncmp(chaine,
"Vertices",strlen(
"Vertices"))) {
114 else if(!strncmp(chaine,
"Triangles",strlen(
"Triangles"))) {
119 else if(!strncmp(chaine,
"Quadrilaterals",strlen(
"Quadrilaterals"))) {
124 else if(!strncmp(chaine,
"RequiredQuadrilaterals",strlen(
"RequiredQuadrilaterals"))) {
126 posnqreq = ftell(inm);
129 else if(!strncmp(chaine,
"Corners",strlen(
"Corners"))) {
131 posncor = ftell(inm);
134 else if(!strncmp(chaine,
"RequiredVertices",strlen(
"RequiredVertices"))) {
139 else if(!strncmp(chaine,
"Edges",strlen(
"Edges"))) {
144 else if(!strncmp(chaine,
"RequiredEdges",strlen(
"RequiredEdges"))) {
146 posreqed = ftell(inm);
149 else if(!strncmp(chaine,
"RequiredTriangles",strlen(
"RequiredTriangles"))) {
151 posntreq = ftell(inm);
163 fprintf(stdout,
"BAD FILE ENCODING\n");
167 while(fread(&binch,
MMG5_SW,1,inm)!=0 && binch!=54 ) {
170 if(!bdim && binch==3) {
177 fprintf(stdout,
"BAD MESH DIMENSION : %d\n",
mesh->
dim);
181 }
else if(!
mesh->
np && binch==4) {
188 fseek(inm,bpos,SEEK_SET);
190 }
else if(!
mesh->
nt && binch==6) {
197 fseek(inm,bpos,SEEK_SET);
204 if(iswp) ntreq=MMG5_SWAPBIN(ntreq);
205 posntreq = ftell(inm);
207 fseek(inm,bpos,SEEK_SET);
216 fseek(inm,bpos,SEEK_SET);
218 }
else if(binch==18) {
222 if(iswp) nqreq=MMG5_SWAPBIN(nqreq);
223 posnqreq = ftell(inm);
225 fseek(inm,bpos,SEEK_SET);
227 }
else if(!ncor && binch==13) {
231 if(iswp) ncor=MMG5_SWAPBIN(ncor);
232 posncor = ftell(inm);
234 fseek(inm,bpos,SEEK_SET);
236 }
else if(!
mesh->
na && binch==5) {
243 fseek(inm,bpos,SEEK_SET);
245 }
else if(!nreqed && binch==16) {
249 if(iswp) nreqed=MMG5_SWAPBIN(nreqed);
250 posreqed = ftell(inm);
252 fseek(inm,bpos,SEEK_SET);
254 }
else if(!nreq && binch==15) {
258 if(iswp) nreq=MMG5_SWAPBIN(nreq);
261 fseek(inm,bpos,SEEK_SET);
269 fseek(inm,bpos,SEEK_SET);
276 fprintf(stdout,
" ** MISSING DATA : no point\n");
284 fprintf(stdout,
" ** MISSING DATA\n");
293 fseek(inm,posnp,SEEK_SET);
294 for (k=1; k<=
mesh->
np; k++) {
299 for (i=0 ; i<3 ; i++) {
302 ppt->
c[i] = (double) fc;
305 for (i=0 ; i<2 ; i++) {
307 ppt->
c[i] = (double) fc;
313 fprintf(stderr,
" ## Warning: %s: binary not available with"
314 " -msh option.\n",__func__);
317 for (i=0 ; i<2 ; i++) {
320 ppt->
c[i] = (double) fc;
323 if(iswp) ppt->
ref=MMG5_SWAPBIN(ppt->
ref);
328 MMG_FSCANF(inm,
"%lf %lf %lf %" MMG5_PRId
"",&ppt->
c[0],&ppt->
c[1],&dtmp,&ppt->
ref);
330 MMG_FSCANF(inm,
"%lf %lf %" MMG5_PRId
"",&ppt->
c[0],&ppt->
c[1],&ppt->
ref);
334 for (i=0 ; i<2 ; i++) {
339 if(iswp) ppt->
ref=MMG5_SWAPBIN(ppt->
ref);
342 if ( ppt->
ref < 0 ) {
351 fseek(inm,posned,SEEK_SET);
352 for (k=1; k<=
mesh->
na; k++) {
355 MMG_FSCANF(inm,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"",&ped->
a,&ped->
b,&ped->
ref);
359 if(iswp) ped->
a=MMG5_SWAPBIN(ped->
a);
361 if(iswp) ped->
b=MMG5_SWAPBIN(ped->
b);
363 if(iswp) ped->
ref=MMG5_SWAPBIN(ped->
ref);
365 if ( ped->
ref < 0 ) {
375 fseek(inm,posnt,SEEK_SET);
377 for (k=1; k<=
mesh->
nt; k++) {
380 MMG_FSCANF(inm,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"",&pt->
v[0],&pt->
v[1],&pt->
v[2],&pt->
ref);
383 for (i=0 ; i<3 ; i++) {
385 if(iswp) pt->
v[i]=MMG5_SWAPBIN(pt->
v[i]);
388 if(iswp) pt->
ref=MMG5_SWAPBIN(pt->
ref);
390 for (i=0; i<3; i++) {
414 fprintf(stdout,
"\n $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ \n");
415 fprintf(stdout,
" BAD ORIENTATION : vol < 0 -- %8" MMG5_PRId
" element(s) reoriented\n",norient);
416 fprintf(stdout,
" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ \n\n");
421 fseek(inm,posntreq,SEEK_SET);
422 for (k=1; k<=ntreq; k++) {
428 if(iswp) i=MMG5_SWAPBIN(i);
431 fprintf(stderr,
"\n ## Warning: %s: required triangle number %8" MMG5_PRId
""
432 " ignored.\n",__func__,i);
443 for (k=1; k<=
mesh->
np; k++) {
452 fseek(inm,posnq,SEEK_SET);
457 MMG_FSCANF(inm,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"",&pq1->
v[0],&pq1->
v[1],&pq1->
v[2],
458 &pq1->
v[3],&pq1->
ref);
461 for (i=0 ; i<4 ; i++) {
463 if(iswp) pq1->
v[i]=MMG5_SWAPBIN(pq1->
v[i]);
466 if(iswp) pq1->
ref=MMG5_SWAPBIN(pq1->
ref);
468 for (i=0; i<4; i++) {
473 if ( pq1->
ref < 0 ) {
481 fseek(inm,posnqreq,SEEK_SET);
482 for (k=1; k<=nqreq; k++) {
488 if(iswp) i=MMG5_SWAPBIN(i);
491 fprintf(stderr,
"\n ## Warning: %s: required quadrilaterals number"
492 " %8" MMG5_PRId
" ignored.\n",__func__,i);
507 fseek(inm,posncor,SEEK_SET);
508 for (k=1; k<=ncor; k++) {
514 if(iswp) ref=MMG5_SWAPBIN(ref);
524 fseek(inm,posreq,SEEK_SET);
525 for (k=1; k<=nreq; k++) {
531 if(iswp) ref=MMG5_SWAPBIN(ref);
542 fseek(inm,posreqed,SEEK_SET);
543 for (k=1; k<=nreqed; k++) {
549 if(iswp) ref=MMG5_SWAPBIN(ref);
559 fprintf(stdout,
"\n $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ \n");
560 fprintf(stdout,
" WARNING : %" MMG5_PRId
" entities with unexpected refs (ref< 0).\n",nref);
561 fprintf(stdout,
" We take their absolute values.\n");
562 fprintf(stdout,
" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ \n\n");
566 fprintf(stdout,
" NUMBER OF VERTICES %8" MMG5_PRId
" CORNERS %6" MMG5_PRId
"\n",
mesh->
np,ncor);
567 fprintf(stdout,
" NUMBER OF TRIANGLES %8" MMG5_PRId
"\n",
mesh->
nt);
569 fprintf(stdout,
" NUMBER OF QUADRILATERALS %8" MMG5_PRId
"\n",
mesh->
nquad);
572 fprintf(stdout,
" NUMBER OF EDGES %8" MMG5_PRId
"\n",
mesh->
na);
574 if ( nreq || nreqed || ntreq || nqreq ) {
575 fprintf(stdout,
" NUMBER OF REQUIRED ENTITIES: \n");
577 fprintf(stdout,
" VERTICES %8" MMG5_PRId
" \n",nreq);
579 fprintf(stdout,
" EDGES %8" MMG5_PRId
" \n",nreqed);
581 fprintf(stdout,
" TRIANGLES %8" MMG5_PRId
" \n",ntreq);
583 fprintf(stdout,
" QUADRILATERALS %8" MMG5_PRId
" \n",nqreq);
586 fprintf(stdout,
" NUMBER OF CORNERS %8" MMG5_PRId
" \n",ncor);
594 const char *filenameptr,*solnameptr;
611 fprintf(stderr,
" ## Error: %s: please provide input file name"
612 " (either in the mesh structure or as function argument).\n",
618 strcpy(
tmp,filenameptr);
640 if (
ier < 1 ) {
break; }
645 strcpy(soltmp,solnameptr);
648 fprintf(stderr,
"\n ## ERROR: WRONG DATA TYPE OR WRONG SOLUTION NUMBER.\n");
680 for (k=1; k<=
mesh->
np; k++) {
687 for ( k=1; k<=
mesh->
np; ++k ) {
689 if ( !
MG_VOK(ppt) )
continue;
691 z += fabs(ppt->
c[2]);
694 fprintf(stderr,
"\n ## Error: %s: Input mesh must be a two-dimensional mesh.\n",
703 long posNodes,posElts,*posNodeData;
711 &posNodes,&posElts,&posNodeData,
712 &bin,&iswp,&nelts,&nsols);
713 if (
ier < 1 )
return (
ier);
716 fprintf(stderr,
"Error: SEVERAL SOLUTIONS FOUND (%d)\n",nsols);
729 fprintf(stderr,
"\n ## Error: %s: Input mesh must be a two-dimensional mesh.\n",
736 fprintf(stdout,
" ** WARNING NO GIVEN TRIANGLE\n");
745 posNodes,posElts,posNodeData,
746 bin,iswp,nelts,nsols);
749 if (
ier < 1 )
return ier;
755 fprintf(stderr,
" ** ERROR WHEN PARSING THE INPUT FILE\n");
769 long posNodes,posElts,*posNodeData;
777 &posNodes,&posElts,&posNodeData,
778 &bin,&iswp,&nelts,&nsols);
779 if (
ier < 1 )
return (
ier);
785 printf(
" Exit program.\n"); fclose(inm);
797 fprintf(stderr,
"\n ## Error: %s: Input mesh must be a two-dimensional mesh.\n",
804 fprintf(stdout,
" ** WARNING NO GIVEN TRIANGLE\n");
813 posNodes,posElts,posNodeData,
814 bin,iswp,nelts,nsols);
818 fprintf(stderr,
" ** ERROR WHEN PARSING THE INPUT FILE\n");
846 for (i=0; i<
sol->size; i++) {
849 sol->m[
sol->size*pos+i] = (double)fbuf;
854 sol->m[
sol->size*pos+i] = (double)fbuf;
877 for (i=0; i<
sol->size; i++) {
880 sol->m[
sol->size*pos+i] = (double)dbuf;
885 sol->m[
sol->size*pos+i] = (double)dbuf;
903 int iswp,
ier,meshDim,*type,nsols,dim;
919 if (
ier < 1 )
return ier;
922 fprintf(stderr,
"Error: SEVERAL SOLUTIONS FOUND (%d)\n",nsols);
929 fprintf(stderr,
" ** MISMATCHES DATA: THE NUMBER OF VERTICES IN "
930 "THE MESH (%" MMG5_PRId
") DIFFERS FROM THE NUMBER OF VERTICES IN "
931 "THE SOLUTION (%" MMG5_PRId
") \n",
mesh->
np,np);
953 if ( ver )
sol->
ver = ver;
959 fseek(inm,posnp,SEEK_SET);
963 for (k=1; k<=
sol->
np; k++) {
968 for (k=1; k<=
sol->
np; k++) {
995 int iswp,
ier,meshDim,nsols,*type;
999 static int8_t mmgWarn = 0;
1010 if (
ier < 1 )
return ier;
1013 fprintf(stderr,
" ** MISMATCHES DATA: THE NUMBER OF VERTICES IN "
1014 "THE MESH (%" MMG5_PRId
") DIFFERS FROM THE NUMBER OF VERTICES IN "
1015 "THE SOLUTION (%" MMG5_PRId
") \n",
mesh->
np,np);
1025 fprintf(stderr,
"\n ## Error: %s: unexpected number of data (%d).\n",
1035 printf(
" Exit program.\n"); fclose(inm);
1040 for ( j=0; j<nsols; ++j) {
1045 sprintf(data,
"sol_%d",j);
1049 fprintf(stderr,
"\n ## Warning: %s: unable to set solution name for"
1050 " at least 1 solution.\n",__func__);
1062 if ( ver ) psl->
ver = ver;
1068 fseek(inm,posnp,SEEK_SET);
1070 if ( (*
sol)[0].ver == 1 ) {
1072 for (k=1; k<=
mesh->
np; k++) {
1073 for ( j=0; j<nsols; ++j ) {
1081 for (k=1; k<=
mesh->
np; k++) {
1082 for ( j=0; j<nsols; ++j ) {
1103 MMG5_int k,ne,np,nc,nreq,nereq,nedreq,nq,nqreq,bpos,ref;
1104 int bin, binch,gmsh;
1115 ptr = strstr(data,
".mesh");
1117 strcat(data,
".meshb");
1118 if( !(inm = fopen(data,
"wb")) ) {
1119 ptr = strstr(data,
".mesh");
1121 strcat(data,
".mesh");
1122 if( !(inm = fopen(data,
"wb")) ) {
1132 ptr = strstr(data,
".meshb");
1134 if( !(inm = fopen(data,
"wb")) ) {
1135 fprintf(stderr,
" ** UNABLE TO OPEN %s.\n",data);
1142 fprintf(stdout,
" %%%% %s OPENED\n",data);
1148 strcpy(&chaine[0],
"MeshVersionFormatted 2\n");
1149 fprintf(inm,
"%s",chaine);
1151 strcpy(&chaine[0],
"\n\nDimension 3\n");
1154 strcpy(&chaine[0],
"\n\nDimension 2\n");
1156 fprintf(inm,
"%s ",chaine);
1177 for (k=1; k<=
mesh->
np; k++) {
1184 strcpy(&chaine[0],
"\n\nVertices\n");
1185 fprintf(inm,
"%s",chaine);
1186 fprintf(inm,
"%" MMG5_PRId
"\n",np);
1201 for (k=1; k<=
mesh->
np; k++) {
1207 fprintf(inm,
"%.15lg %.15lg 0 %" MMG5_PRId
"\n",ppt->
c[0],ppt->
c[1],ref);
1210 fwrite((
unsigned char*)&ppt->
c[0],
MMG5_SD,1,inm);
1211 fwrite((
unsigned char*)&ppt->
c[1],
MMG5_SD,1,inm);
1212 fwrite((
unsigned char*)&dblb,
MMG5_SD,1,inm);
1213 fwrite((
unsigned char*)&ref,
MMG5_SW,1,inm);
1218 fprintf(inm,
"%.15lg %.15lg %" MMG5_PRId
"\n",ppt->
c[0],ppt->
c[1],ref);
1232 for (k=1; k<=
mesh->
np; k++) {
1239 strcpy(&chaine[0],
"\n\nCorners\n");
1240 fprintf(inm,
"%s",chaine);
1241 fprintf(inm,
"%" MMG5_PRId
"\n",nc);
1252 for (k=1; k<=
mesh->
np; k++) {
1256 fprintf(inm,
"%" MMG5_PRId
"\n",ppt->
tmp);
1267 for (k=1; k<=
mesh->
np; k++) {
1276 strcpy(&chaine[0],
"\n\nRequiredVertices\n");
1277 fprintf(inm,
"%s",chaine);
1278 fprintf(inm,
"%" MMG5_PRId
"\n",nreq);
1287 for (k=1; k<=
mesh->
np; k++) {
1294 fprintf(inm,
"%" MMG5_PRId
"\n",ppt->
tmp);
1306 strcpy(&chaine[0],
"\n\nEdges\n");
1307 fprintf(inm,
"%s",chaine);
1308 fprintf(inm,
"%" MMG5_PRId
"\n",
mesh->
na);
1317 for (k=1; k<=
mesh->
na; k++) {
1332 strcpy(&chaine[0],
"\n\nRequiredEdges\n");
1333 fprintf(inm,
"%s",chaine);
1334 fprintf(inm,
"%" MMG5_PRId
"\n",nedreq);
1340 fwrite(&nedreq,
MMG5_SW,1,inm);
1343 for (k=1; k<=
mesh->
na; k++) {
1347 fprintf(inm,
"%" MMG5_PRId
"\n",ne);
1359 for (k=1; k<=
mesh->
nt; k++) {
1361 if ( !
MG_EOK(pt) )
continue;
1369 strcpy(&chaine[0],
"\n\nTriangles\n");
1370 fprintf(inm,
"%s",chaine);
1371 fprintf(inm,
"%" MMG5_PRId
"\n",ne);
1380 for (k=1; k<=
mesh->
nt; k++) {
1385 fprintf(inm,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",
mesh->
point[pt->
v[0]].
tmp,
1399 strcpy(&chaine[0],
"\n\nRequiredTriangles\n");
1400 fprintf(inm,
"%s",chaine);
1401 fprintf(inm,
"%" MMG5_PRId
"\n",nereq);
1410 for (k=1; k<=
mesh->
nt; k++) {
1412 if ( !
MG_EOK(pt) )
continue;
1417 fprintf(inm,
"%" MMG5_PRId
"\n",ne);
1446 strcpy(&chaine[0],
"\n\nQuadrilaterals\n");
1447 fprintf(inm,
"%s",chaine);
1448 fprintf(inm,
"%" MMG5_PRId
"\n",nq);
1458 if ( !
MG_EOK(pq) )
continue;
1461 fprintf(inm,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",
mesh->
point[pq->
v[0]].
tmp,
1478 strcpy(&chaine[0],
"\n\nRequiredQuadrilaterals\n");
1479 fprintf(inm,
"%s",chaine);
1480 fprintf(inm,
"%" MMG5_PRId
"\n",nqreq);
1493 fprintf(inm,
"%" MMG5_PRId
"\n",k);
1503 strcpy(&chaine[0],
"\n\nEnd\n");
1504 fprintf(inm,
"%s",chaine);
1514 fprintf(stdout,
" NUMBER OF VERTICES %8" MMG5_PRId
" CORNERS %8" MMG5_PRId
""
1515 " REQUIRED %8" MMG5_PRId
"\n",np,nc,nreq);
1518 fprintf(stdout,
" NUMBER OF EDGES %8" MMG5_PRId
" REQUIRED %8" MMG5_PRId
"\n",
mesh->
na,nedreq);
1520 fprintf(stdout,
" NUMBER OF TRIANGLES %8" MMG5_PRId
" REQUIRED %8" MMG5_PRId
"\n",
1523 fprintf(stdout,
" NUMBER OF QUADRILATERALS %8" MMG5_PRId
" REQUIRED %8" MMG5_PRId
"\n",nq,nqreq);
1553 isol = pos *
sol->size;
1557 switch (
sol->size ) {
1559 fprintf(inm,
" %.15lg",
sol->m[isol]);
1562 fprintf(inm,
" %.15lg %.15lg 0",
sol->m[isol],
sol->m[isol+1]);
1565 fprintf(inm,
" %.15lg %.15lg %.15lg 0 0 1",
sol->m[isol],
sol->m[isol+1],
sol->m[isol+2]);
1572 switch (
sol->size ) {
1592 for (i=0; i<
sol->size; i++)
1593 fprintf(inm,
" %.15lg",
sol->m[isol + i]);
1596 for (i=0; i<
sol->size; i++)
1616 int binch,bin,dim,
ier,gmsh;
1618 if ( !
sol->
np )
return 1;
1622 fprintf(stderr,
"\n ## Warning: %s: no metric data to save.\n",__func__);
1630 if (
sol->
dim==2 && gmsh ) {
1641 if (
ier < 1 )
return ier;
1643 for (k=1; k<=
mesh->
np; k++) {
1645 if ( !
MG_VOK(ppt) )
continue;
1653 fprintf(inm,
"\n\nEnd\n");
1678 int binch,bin,npointSols,ncellSols,*size;
1679 int *type,*entities,
ier,gmsh,dim;
1682 if ( !(*
sol)[0].np )
return 1;
1711 printf(
"\n ## Warning: %s: unexpected entity type for solution %" MMG5_PRId
": %s."
1716 type[k] = (*sol)[k].type;
1717 size[k] = (*sol)[k].size;
1718 entities[k] = (*sol)[k].entities;
1726 if (
ier < 1 )
return ier;
1728 for (k=1; k<=
mesh->
np; k++) {
1730 if ( !
MG_VOK(ppt) )
continue;
1743 ncellSols,entities,type,size );
1745 for (k=1; k<=
mesh->
nt; k++) {
1747 if ( !
MG_EOK(ptt) )
continue;
1764 fprintf(inm,
"\n\nEnd\n");
1780 MMG5_int k,np,nt,nc;
1787 fprintf(out,
"MeshVersionFormatted %d\n\nDimension %d\n\n",1,2);
1790 for (k=1; k<=
mesh->
np; k++) {
1792 if ( pack &&
MG_VOK(ppt) ) {
1801 fprintf(out,
"Vertices\n %" MMG5_PRId
"\n\n",np);
1802 for (k=1; k<=
mesh->
np; k++) {
1804 if ( ( pack &&
MG_VOK(ppt) ) || !pack )
1805 fprintf(out,
"%f %f %" MMG5_PRId
"\n",ppt->
c[0],ppt->
c[1],ppt->
ref);
1809 for (k=1; k<=
mesh->
nt; k++) {
1814 fprintf(out,
"Triangles\n %" MMG5_PRId
"\n\n",nt);
1815 for (k=1; k<=
mesh->
nt; k++) {
1822 fprintf(out,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",p0->
tmp,p1->
tmp,p2->
tmp,pt->
ref);
1825 fprintf(out,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",pt->
v[0],pt->
v[1],pt->
v[2],pt->
ref);
1832 fprintf(out,
"Edges\n %" MMG5_PRId
"\n\n",
mesh->
na);
1833 for (k=1; k<=
mesh->
na; k++) {
1837 if ( pack ) fprintf(out,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",p1->
tmp,p2->
tmp,pa->
ref);
1838 else fprintf(out,
"%" MMG5_PRId
" %" MMG5_PRId
" %" MMG5_PRId
"\n",pa->
a,pa->
b,pa->
ref);
1844 for (k=1; k<=
mesh->
np; k++) {
1850 fprintf(out,
"Corners\n %" MMG5_PRId
"\n\n",nc);
1851 for (k=1; k<=
mesh->
np; k++) {
1854 if ( pack ) fprintf(out,
"%" MMG5_PRId
"\n",ppt->
tmp);
1855 else fprintf(out,
"%" MMG5_PRId
"\n",k);
1861 fprintf(out,
"End\n");
1872 char *ptr,typ=0,*data;
1875 if ( met->
size == 1 ) typ =1;
1876 else if ( met->
size == 3 ) typ = 3;
1880 ptr = strstr(data,
".mesh");
1884 strcat(data,
".sol");
1885 out = fopen(data,
"w");
1890 for (k=1; k<=
mesh->
np; k++)
1894 fprintf(out,
"MeshVersionFormatted %d\n\nDimension %d\n\n",1,2);
1897 for (k=1; k<=
mesh->
np; k++) {
1899 if ( pack &&
MG_VOK(ppt) ) {
1909 fprintf(out,
"SolAtVertices\n %" MMG5_PRId
"\n%d %d\n\n",np,1,typ);
1910 for (k=1; k<=
mesh->
np; k++) {
1912 if ( ( pack &&
MG_VOK(ppt) ) || !pack ) {
1913 if ( met->
size == 1 )
1914 fprintf(out,
"%f\n",met->
m[k]);
1915 else if ( met->
size == 3 )
1916 fprintf(out,
"%f %f %f\n",met->
m[3*k+0],met->
m[3*k+1],met->
m[3*k+2]);
1921 fprintf(out,
"End\n");
1937 ptr = strstr(data,
".mesh");
1941 strcat(data,
".nor.sol");
1942 out = fopen(data,
"w");
1947 for (k=1; k<=
mesh->
np; k++)
1951 fprintf(out,
"MeshVersionFormatted %d\n\nDimension %d\n\n",1,2);
1954 for (k=1; k<=
mesh->
np; k++) {
1956 if ( pack &&
MG_VOK(ppt) ) {
1966 fprintf(out,
"SolAtVertices\n %" MMG5_PRId
"\n%d %d\n\n",np,1,2);
1967 for (k=1; k<=
mesh->
np; k++) {
1969 if ( ( pack &&
MG_VOK(ppt) ) || !pack ) {
1971 else fprintf(out,
"%f %f\n",0.0,0.0);
1976 fprintf(out,
"End\n");
1992 ptr = strstr(data,
".sol");
1996 strcat(data,
".disp.sol");
1997 out = fopen(data,
"w");
2001 for (k=1; k<=
mesh->
np; k++)
2005 fprintf(out,
"MeshVersionFormatted %d\n\nDimension %d\n\n",1,2);
2008 for (k=1; k<=
mesh->
np; k++) {
2010 if ( pack &&
MG_VOK(ppt) ) {
2020 fprintf(out,
"SolAtVertices\n %" MMG5_PRId
"\n%d %d\n\n",np,1,2);
2021 for (k=1; k<=
mesh->
np; k++) {
2023 if ( ( pack &&
MG_VOK(ppt) ) || !pack )
2024 fprintf(out,
"%f %f\n",disp->
m[2*(k-1)+1],disp->
m[2*(k-1)+2]);
2028 fprintf(out,
"End\n");
2050 printf(
"\n ## Error: %s: unable to save a file without a valid filename\n.",
2058 ptr = strstr(data,
".node");
2064 strcat(data,
".ele");
2065 if( !(inm = fopen(data,
"wb")) ) {
2066 fprintf(stderr,
" ** UNABLE TO OPEN %s.\n",data);
2071 fprintf(stdout,
" %%%% %s OPENED\n",data);
2075 for (k=1; k<=
mesh->
nt; k++) {
2077 if ( !
MG_EOK(pt) )
continue;
2082 fprintf(inm,
"%" MMG5_PRId
" %d %d\n\n",ne,
mesh->
dim+1,1);
2085 for ( k=1; k<=
mesh->
nt; ++k ) {
2089 fprintf(inm,
"%" MMG5_PRId
" ",++ne);
2092 for ( i=0; i<=
mesh->
dim; ++i ) {
2097 fprintf(inm,
"%" MMG5_PRId
"\n",pt->
ref);
2100 fprintf(stdout,
" NUMBER OF ELEMENT %8" MMG5_PRId
"\n",ne);
2111 MMG5_int k,i,ne,idx;
2122 printf(
"\n ## Error: %s: unable to save a file without a valid filename\n.",
2130 ptr = strstr(data,
".node");
2136 strcat(data,
".neigh");
2137 if( !(inm = fopen(data,
"wb")) ) {
2138 fprintf(stderr,
" ** UNABLE TO OPEN %s.\n",data);
2143 fprintf(stdout,
" %%%% %s OPENED\n",data);
2148 printf(
"\n ## Error: %s: unable to compute triangle adjacencies\n.",__func__);
2154 for (k=1; k<=
mesh->
nt; k++) {
2156 if ( !
MG_EOK(pt) )
continue;
2161 fprintf(inm,
"%" MMG5_PRId
" %d\n\n",ne,
mesh->
dim+1);
2164 for ( k=1; k<=
mesh->
nt; ++k ) {
2168 fprintf(inm,
"%" MMG5_PRId
" ",++ne);
2171 for ( i=1; i<=
mesh->
dim+1; ++i ) {
2174 fprintf(inm,
"%" MMG5_PRId
" ",idx);
2193 printf(
"\n ## Error: %s: unable to save boundary edges\n.",__func__);
2200 printf(
"\n ## Error: %s: unable to count and append internal edges\n.",__func__);
2232 const char *filenameptr,*solnameptr;
2249 fprintf(stderr,
" ## Error: %s: please provide input file name"
2250 " (either in the mesh structure or as function argument).\n",
2256 strcpy(
tmp,filenameptr);
2262 int8_t savesolFile = 0;
2284 if (
ier && savesolFile ) {
2288 strcpy(soltmp,solnameptr);
2291 fprintf(stderr,
"\n ## ERROR: WRONG DATA TYPE OR WRONG SOLUTION NUMBER.\n");
const char * MMG5_Get_formatName(enum MMG5_Format fmt)
const char * MMG5_Get_entitiesName(enum MMG5_entities ent)
int MMG5_Get_format(char *ptr, int fmt)
char * MMG5_Get_filenameExt(char *filename)
int MMG2D_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
int MMG2D_Set_inputSolName(MMG5_pMesh mesh, MMG5_pSol sol, const char *solin)
MMG5_pMesh MMG5_pSol * sol
if(!ier) exit(EXIT_FAILURE)
MMG5_pMesh char * filename
int MMG2D_hashTria(MMG5_pMesh mesh)
int MMG5_chkMetricType(MMG5_pMesh mesh, int *type, int *entities, FILE *inm)
void MMG5_printSolStats(MMG5_pMesh mesh, MMG5_pSol *sol)
float MMG5_swapf(float sbin)
int MMG5_saveSolAtTrianglesHeader(MMG5_pMesh mesh, FILE *inm, int ver, int bin, MMG5_int *bpos, int nsols, int nsolsAtTriangles, int *entities, int *type, int *size)
int MMG5_saveNode(MMG5_pMesh mesh, const char *filename)
int MMG5_saveEdge(MMG5_pMesh mesh, const char *filename, const char *ext)
int MMG5_saveSolHeader(MMG5_pMesh mesh, const char *filename, FILE **inm, int ver, int *bin, MMG5_int *bpos, MMG5_int np, int dim, int nsols, int *entities, int *type, int *size)
int MMG5_loadMshMesh_part1(MMG5_pMesh mesh, const char *filename, FILE **inm, long *posNodes, long *posElts, long **posNodeData, int *bin, int *iswp, MMG5_int *nelts, int *nsols)
double MMG5_swapd(double sbin)
int MMG5_loadMshMesh_part2(MMG5_pMesh mesh, MMG5_pSol *sol, FILE **inm, const long posNodes, const long posElts, const long *posNodeData, const int bin, const int iswp, const MMG5_int nelts, const int nsols)
int MMG5_saveMshMesh(MMG5_pMesh mesh, MMG5_pSol *sol, const char *filename, int metricData)
void MMG5_printMetStats(MMG5_pMesh mesh, MMG5_pSol met)
int MMG5_loadSolHeader(const char *filename, int meshDim, FILE **inm, int *ver, int *bin, int *iswp, MMG5_int *np, int *dim, int *nsols, int **type, long *posnp, int imprim)
int MMG5_swapbin(int sbin)
static int MMG2D_readDoubleSol(MMG5_pSol sol, FILE *inm, int bin, int iswp, MMG5_int pos)
int MMG2D_saveTetgenMesh(MMG5_pMesh mesh, const char *filename)
int MMG2D_saveMesh(MMG5_pMesh mesh, const char *filename)
int MMG2D_saveMshMesh_and_allData(MMG5_pMesh mesh, MMG5_pSol *sol, const char *filename)
int MMG2D_loadMshMesh_and_allData(MMG5_pMesh mesh, MMG5_pSol *sol, const char *filename)
static int MMG2D_readFloatSol(MMG5_pSol sol, FILE *inm, int bin, int iswp, MMG5_int pos)
int MMG2D_saveMshMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
static int MMG2D_saveNeigh(MMG5_pMesh mesh, const char *filename)
int MMG2D_savedisp_db(MMG5_pMesh mesh, MMG5_pSol disp, char *filename, int8_t pack)
int MMG2D_loadGenericMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_saveGenericMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_saveAllSols(MMG5_pMesh mesh, MMG5_pSol *sol, const char *filename)
int MMG2D_saveSol(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_loadMesh(MMG5_pMesh mesh, const char *filename)
static int MMG2D_saveEle(MMG5_pMesh mesh, const char *filename)
int MMG2D_savemesh_db(MMG5_pMesh mesh, char *filename, int8_t pack)
int MMG2D_loadSol(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_loadMshMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_savemet_db(MMG5_pMesh mesh, MMG5_pSol met, char *filename, int8_t pack)
int MMG2D_2dMeshCheck(MMG5_pMesh mesh)
static int MMG2D_saveEdge(MMG5_pMesh mesh, const char *filename)
int MMG2D_savenor_db(MMG5_pMesh mesh, char *filename, int8_t pack)
int MMG2D_loadAllSols(MMG5_pMesh mesh, MMG5_pSol *sol, const char *filename)
static void MMG2D_writeDoubleSol(MMG5_pSol sol, FILE *inm, int bin, MMG5_int pos, int gmsh)
int MMG2D_loadVtkMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_saveVtkMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_saveVtuMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
int MMG2D_loadVtuMesh(MMG5_pMesh mesh, MMG5_pSol sol, const char *filename)
API headers for the mmg2d library.
LIBMMG2D_EXPORT int MMG2D_Get_numberOfNonBdyEdges(MMG5_pMesh mesh, MMG5_int *nb_edges)
int MMG2D_zaldy(MMG5_pMesh mesh)
#define MMG5_SAFE_CALLOC(ptr, size, type, law)
double MMG2D_quickarea(double a[2], double b[2], double c[2])
#define MMG5_ADD_MEM(mesh, size, message, law)
#define MMG_FREAD(ptr, size, count, stream)
#define MMG5_SAFE_MALLOC(ptr, size, type, law)
#define MMG5_FILESTR_LGTH
#define MMG5_SAFE_FREE(ptr)
#define MMG_FSCANF(stream, format,...)
#define MMG5_DEL_MEM(mesh, ptr)
Structure to store edges of a MMG mesh.
Structure to store points of a MMG mesh.