Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
main.c
Go to the documentation of this file.
1/* =============================================================================
2** This file is part of the mmg software package for the tetrahedral
3** mesh modification.
4** Copyright (c) Bx INP/Inria/UBordeaux/UPMC, 2004- .
5**
6** mmg is free software: you can redistribute it and/or modify it
7** under the terms of the GNU Lesser General Public License as published
8** by the Free Software Foundation, either version 3 of the License, or
9** (at your option) any later version.
10**
11** mmg is distributed in the hope that it will be useful, but WITHOUT
12** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14** License for more details.
15**
16** You should have received a copy of the GNU Lesser General Public
17** License and of the GNU General Public License along with mmg (in
18** files COPYING.LESSER and COPYING). If not, see
19** <http://www.gnu.org/licenses/>. Please read their terms carefully and
20** use this copy of the mmg distribution only if you accept them.
21** =============================================================================
22*/
23
34
35#include <assert.h>
36#include <stdio.h>
37#include <stdlib.h>
38#include <signal.h>
39#include <string.h>
40#include <ctype.h>
41#include <math.h>
42#include <float.h>
43
45// if the header file is in the "include" directory
46// #include "libmmgs.h"
47// if the header file is in "include/mmg/mmgs"
48#include "mmg/mmgs/libmmgs.h"
49
50int main(int argc,char *argv[]) {
51 MMG5_pMesh mmgMesh;
52 MMG5_pSol mmgLs;
53 int ier;
54 char *inname,*lsname,*outname;
55
56 fprintf(stdout," -- TEST MMGSLS \n");
57
58 if ( argc != 4 ) {
59 printf(" Usage: %s meshfile lsfile meshout\n",argv[0]);
60 return(1);
61 }
62
63 /* Name and path of the mesh files */
64 inname = (char *) calloc(strlen(argv[1]) + 1, sizeof(char));
65 if ( inname == NULL ) {
66 perror(" ## Memory problem: calloc");
67 exit(EXIT_FAILURE);
68 }
69 strcpy(inname,argv[1]);
70
71 lsname = (char *) calloc(strlen(argv[2]) + 1, sizeof(char));
72 if ( lsname == NULL ) {
73 perror(" ## Memory problem: calloc");
74 exit(EXIT_FAILURE);
75 }
76 strcpy(lsname,argv[2]);
77
78
79 outname = (char *) calloc(strlen(argv[3]) + 1, sizeof(char));
80 if ( outname == NULL ) {
81 perror(" ## Memory problem: calloc");
82 exit(EXIT_FAILURE);
83 }
84 strcpy(outname,argv[3]);
85
87 /* args of InitMesh:
88 * MMG5_ARG_start: we start to give the args of a variadic func
89 * MMG5_ARG_ppMesh: next arg will be a pointer over a MMG5_pMesh
90 * &mmgMesh: pointer toward your MMG5_pMesh (that store your mesh)
91 * MMG5_ARG_ppLs: next arg will be a pointer over a MMG5_pSol storing a level-set
92 * &mmgLs: pointer toward your MMG5_pSol (that store your level-set)
93 */
94 mmgMesh = NULL;
95 mmgLs = NULL;
97 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
99
101 /* Ask for level set discretization: note that it is important to do this step
102 * here because in iso mode, some filters are applied at mesh loading */
103 if ( MMGS_Set_iparameter(mmgMesh,mmgLs,MMGS_IPARAM_iso, 1) != 1 )
104 exit(EXIT_FAILURE);
105
106
110
112 if ( MMGS_loadMesh(mmgMesh,inname) != 1 ) exit(EXIT_FAILURE);
113
118 if ( MMGS_loadSol(mmgMesh,mmgLs,lsname) != 1 )
119 exit(EXIT_FAILURE);
120
122 if ( MMGS_Chk_meshData(mmgMesh,mmgLs) != 1 ) exit(EXIT_FAILURE);
123
127
128
130
133 ier = MMGS_mmgsls(mmgMesh,mmgLs,NULL);
134
135 if ( ier == MMG5_STRONGFAILURE ) {
136 fprintf(stdout,"BAD ENDING OF MMGSLS: UNABLE TO SAVE MESH\n");
137 return(ier);
138 } else if ( ier == MMG5_LOWFAILURE )
139 fprintf(stdout,"BAD ENDING OF MMGSLS\n");
140
141 /* (Not mandatory) Automatically save the mesh */
142 if ( MMGS_saveMesh(mmgMesh,outname) != 1 )
143 exit(EXIT_FAILURE);
144
145 /* 9) free the MMGS5 structures */
147 MMG5_ARG_ppMesh,&mmgMesh,MMG5_ARG_ppLs,&mmgLs,
149
150 free(inname);
151 inname = NULL;
152
153 free(outname);
154 outname = NULL;
155
156 free(lsname);
157 outname = NULL;
158
159 return(ier);
160}
int MMGS_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val)
set an integer parameter of the remesher
int MMGS_Init_mesh(const int starter,...)
Initialize a mesh structure and optionally the associated solution and metric structures.
int MMGS_Free_all(const int starter,...)
Deallocations before return.
int MMGS_Chk_meshData(MMG5_pMesh mesh, MMG5_pSol met)
Check if the numbers of given entities match with mesh and solution size and check mesh data.
int ier
program main
Example for using mmglib (basic use)
Definition main.F90:6
int MMGS_loadSol(MMG5_pMesh mesh, MMG5_pSol met, const char *filename)
Load a metric field (or other solution) in medit's .sol format.
Definition inout_s.c:1312
int MMGS_saveMesh(MMG5_pMesh mesh, const char *filename)
Save a mesh in .mesh or .meshb format.
Definition inout_s.c:842
int MMGS_loadMesh(MMG5_pMesh mesh, const char *filename)
Load a mesh (in .mesh/.mesb format) from file.
Definition inout_s.c:41
int MMGS_mmgsls(MMG5_pMesh mesh, MMG5_pSol sol, MMG5_pSol umet)
Main "program" for level-set discretization.
Definition libmmgs.c:298
@ MMGS_IPARAM_iso
Definition libmmgs.h:114
#define MMG5_ARG_ppMesh
#define MMG5_ARG_end
#define MMG5_ARG_ppLs
#define MMG5_STRONGFAILURE
Definition libmmgtypes.h:65
#define MMG5_LOWFAILURE
Definition libmmgtypes.h:57
MMG5_Sol * MMG5_pSol
MMG5_Mesh * MMG5_pMesh
#define MMG5_ARG_start
Definition libmmgtypes.h:93