48#include "mmg/mmgs/libmmgs.h"
50#define MAX0(a,b) (((a) > (b)) ? (a) : (b))
51#define MAX3(a,b,c) (((MAX0(a,b)) > c) ? (MAX0(a,b)) : c)
53int main(
int argc,
char *argv[]) {
60 MMG5_int k,np, nt, na, nc, nr, nreq,ref,Tria[3], Edge[2];
61 int typEntity, typSol;
62 int *corner, *required, *ridge;
64 char *fileout,*solout;
66 fprintf(stdout,
" -- TEST MMGSLIB \n");
69 printf(
" Usage: %s fileout\n",argv[0]);
74 fileout = (
char *) calloc(strlen(argv[1]) + 6,
sizeof(char));
75 if ( fileout == NULL ) {
76 perror(
" ## Memory problem: calloc");
79 strcpy(fileout,argv[1]);
80 strcat(fileout,
".mesh");
82 solout = (
char *) calloc(strlen(argv[1]) + 5,
sizeof(char));
83 if ( solout == NULL ) {
84 perror(
" ## Memory problem: calloc");
87 strcpy(solout,argv[1]);
88 strcat(solout,
".sol");
116 if (
MMGS_Set_vertex(mmgMesh,0.5,0 ,0 ,0, 2) != 1 ) exit(EXIT_FAILURE);
117 if (
MMGS_Set_vertex(mmgMesh,0.5,0 ,1 ,0, 3) != 1 ) exit(EXIT_FAILURE);
120 if (
MMGS_Set_vertex(mmgMesh,0.5,1 ,0 ,0, 6) != 1 ) exit(EXIT_FAILURE);
121 if (
MMGS_Set_vertex(mmgMesh,0.5,1 ,1 ,0, 7) != 1 ) exit(EXIT_FAILURE);
124 if (
MMGS_Set_vertex(mmgMesh,1 ,1 ,0 ,0, 10) != 1 ) exit(EXIT_FAILURE);
125 if (
MMGS_Set_vertex(mmgMesh,1 ,0 ,1 ,0, 11) != 1 ) exit(EXIT_FAILURE);
126 if (
MMGS_Set_vertex(mmgMesh,1 ,1 ,1 ,0, 12) != 1 ) exit(EXIT_FAILURE);
164 for(k=1 ; k<=12 ; k++) {
176 fprintf(stdout,
"BAD ENDING OF MMGSLIB: UNABLE TO SAVE MESH\n");
179 fprintf(stdout,
"BAD ENDING OF MMGSLIB\n");
189 if( !(inm = fopen(fileout,
"w")) ) {
190 fprintf(stderr,
" ** UNABLE TO OPEN OUTPUT MESH FILE.\n");
193 fprintf(inm,
"MeshVersionFormatted 2\n");
194 fprintf(inm,
"\nDimension 3\n");
200 corner = (
int*)calloc(np+1,
sizeof(
int));
202 perror(
" ## Memory problem: calloc");
206 required = (
int*)calloc(
MAX3(np,nt,na)+1 ,
sizeof(int));
208 perror(
" ## Memory problem: calloc");
212 ridge = (
int*)calloc(na+1 ,
sizeof(
int));
214 perror(
" ## Memory problem: calloc");
219 fprintf(inm,
"\nVertices\n%"MMG5_PRId
"\n",np);
220 for(k=1; k<=np; k++) {
223 &ref,&(corner[k]),&(required[k])) != 1 )
225 fprintf(inm,
"%.15lg %.15lg %.15lg %"MMG5_PRId
" \n",Point[0],Point[1],Point[2],ref);
226 if ( corner[k] ) nc++;
227 if ( required[k] ) nreq++;
229 fprintf(inm,
"\nCorners\n%"MMG5_PRId
"\n",nc);
230 for(k=1; k<=np; k++) {
231 if ( corner[k] ) fprintf(inm,
"%"MMG5_PRId
" \n",k);
233 fprintf(inm,
"\nRequiredVertices\n%"MMG5_PRId
"\n",nreq);
234 for(k=1; k<=np; k++) {
235 if ( required[k] ) fprintf(inm,
"%"MMG5_PRId
" \n",k);
241 fprintf(inm,
"\nTriangles\n%"MMG5_PRId
"\n",nt);
242 for(k=1; k<=nt; k++) {
245 &ref,&(required[k])) != 1 )
247 fprintf(inm,
"%"MMG5_PRId
" %"MMG5_PRId
" %"MMG5_PRId
" %"MMG5_PRId
" \n",
248 Tria[0],Tria[1],Tria[2],ref);
249 if ( required[k] ) nreq++;
251 fprintf(inm,
"\nRequiredTriangles\n%"MMG5_PRId
"\n",nreq);
252 for(k=1; k<=nt; k++) {
253 if ( required[k] ) fprintf(inm,
"%"MMG5_PRId
" \n",k);
257 fprintf(inm,
"\nEdges\n%"MMG5_PRId
"\n",na);
258 for(k=1; k<=na; k++) {
261 &(ridge[k]),&(required[k])) != 1 ) exit(EXIT_FAILURE);
262 fprintf(inm,
"%"MMG5_PRId
" %"MMG5_PRId
" %"MMG5_PRId
" \n",Edge[0],Edge[1],ref);
263 if ( ridge[k] ) nr++;
264 if ( required[k] ) nreq++;
266 fprintf(inm,
"\nRequiredEdges\n%"MMG5_PRId
"\n",nreq);
267 for(k=1; k<=na; k++) {
268 if ( required[k] ) fprintf(inm,
"%"MMG5_PRId
" \n",k);
270 fprintf(inm,
"\nRidges\n%"MMG5_PRId
"\n",nr);
271 for(k=1; k<=na; k++) {
272 if ( ridge[k] ) fprintf(inm,
"%"MMG5_PRId
" \n",k);
275 fprintf(inm,
"\nEnd\n");
284 if( !(inm = fopen(solout,
"w")) ) {
285 fprintf(stderr,
" ** UNABLE TO OPEN OUTPUT SOL FILE.\n");
288 fprintf(inm,
"MeshVersionFormatted 2\n");
289 fprintf(inm,
"\nDimension 3\n");
299 fprintf(inm,
"\nSolAtVertices\n%"MMG5_PRId
"\n",np);
300 fprintf(inm,
"1 1 \n\n");
301 for(k=1; k<=np; k++) {
304 fprintf(inm,
"%.15lg \n",Sol);
306 fprintf(inm,
"\nEnd\n");
int MMGS_Get_edge(MMG5_pMesh mesh, MMG5_int *e0, MMG5_int *e1, MMG5_int *ref, int *isRidge, int *isRequired)
int MMGS_Get_meshSize(MMG5_pMesh mesh, MMG5_int *np, MMG5_int *nt, MMG5_int *na)
int MMGS_Init_mesh(const int starter,...)
int MMGS_Set_vertex(MMG5_pMesh mesh, double c0, double c1, double c2, MMG5_int ref, MMG5_int pos)
int MMGS_Get_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int *typEntity, MMG5_int *np, int *typSol)
int MMGS_Free_all(const int starter,...)
int MMGS_Get_scalarSol(MMG5_pSol met, double *s)
int MMGS_Set_scalarSol(MMG5_pSol met, double s, MMG5_int pos)
int MMGS_Set_solSize(MMG5_pMesh mesh, MMG5_pSol sol, int typEntity, MMG5_int np, int typSol)
int MMGS_Get_triangle(MMG5_pMesh mesh, MMG5_int *v0, MMG5_int *v1, MMG5_int *v2, MMG5_int *ref, int *isRequired)
int MMGS_Set_meshSize(MMG5_pMesh mesh, MMG5_int np, MMG5_int nt, MMG5_int na)
int MMGS_Set_triangle(MMG5_pMesh mesh, MMG5_int v0, MMG5_int v1, MMG5_int v2, MMG5_int ref, MMG5_int pos)
int MMGS_Get_vertex(MMG5_pMesh mesh, double *c0, double *c1, double *c2, MMG5_int *ref, int *isCorner, int *isRequired)
int MMGS_Chk_meshData(MMG5_pMesh mesh, MMG5_pSol met)
program main
Example for using mmglib (basic use)
int MMGS_mmgslib(MMG5_pMesh mesh, MMG5_pSol met)
#define MMG5_STRONGFAILURE