mmgs
mmgs.h
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/CNRS/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
24#ifndef MMGS_H
25#define MMGS_H
26
27#include "libmmgcommon.h"
28#include "libmmgs.h"
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34/* numerical accuracy */
35#define MMGS_ALPHAD 3.464101615137755 /* 6.0 / sqrt(3.0) */
36
37#define MMGS_LOPTL 1.4
38#define MMGS_LOPTS 0.71
39#define MMGS_LLONG 2.0
40#define MMGS_LSHRT 0.3
41
42#define MMGS_LMAX 1024
43#define MMGS_BADKAL 2.e-2
44#define MMGS_NULKAL 1.e-4
45
46#define MMGS_NPMAX 500000
47#define MMGS_NTMAX 1000000
48#define MMGS_XPMAX 500000
49
50
51#define MS_SIN(tag) ((tag & MG_CRN) || (tag & MG_REQ) || (tag & MG_NOM))
52
53
55#define MMGS_RETURN_AND_FREE(mesh,met,ls,val)do \
56 { \
57 if ( !MMGS_Free_all(MMG5_ARG_start, \
58 MMG5_ARG_ppMesh,&mesh,MMG5_ARG_ppMet,&met, \
59 MMG5_ARG_ppLs,&ls, \
60 MMG5_ARG_end) ) { \
61 return MMG5_LOWFAILURE; \
62 } \
63 return val; \
64 }while(0)
65
68#define MMGS_POINT_REALLOC(mesh,sol,ip,wantedGap,law,o,tag ) do \
69 { \
70 int klink; \
71 assert ( mesh && mesh->point ); \
72 MMG5_TAB_RECALLOC(mesh,mesh->point,mesh->npmax,wantedGap,MMG5_Point, \
73 "larger point table",law); \
74 \
75 mesh->npnil = mesh->np+1; \
76 for (klink=mesh->npnil; klink<mesh->npmax-1; klink++) \
77 mesh->point[klink].tmp = klink+1; \
78 \
79 /* solution */ \
80 if ( sol->m ) { \
81 MMG5_ADD_MEM(mesh,(sol->size*(mesh->npmax-sol->npmax))*sizeof(double), \
82 "larger solution",law); \
83 MMG5_SAFE_REALLOC(sol->m,sol->size*(sol->npmax+1), \
84 sol->size*(mesh->npmax+1),double, \
85 "larger solution",law); \
86 } \
87 sol->npmax = mesh->npmax; \
88 \
89 /* We try again to add the point */ \
90 ip = MMGS_newPt(mesh,o,tag); \
91 if ( !ip ) {law;} \
92 }while(0)
93
96#define MMGS_TRIA_REALLOC( mesh,jel,wantedGap,law ) do \
97 { \
98 int klink,oldSiz; \
99 \
100 oldSiz = mesh->ntmax; \
101 MMG5_TAB_RECALLOC(mesh,mesh->tria,mesh->ntmax,wantedGap,MMG5_Tria, \
102 "larger tria table",law); \
103 \
104 mesh->nenil = mesh->nt+1; \
105 for (klink=mesh->nenil; klink<mesh->ntmax-1; klink++) \
106 mesh->tria[klink].v[2] = klink+1; \
107 \
108 if ( mesh->adja ) { \
109 /* adja table */ \
110 MMG5_ADD_MEM(mesh,3*(mesh->ntmax-oldSiz)*sizeof(int), \
111 "larger adja table",law); \
112 MMG5_SAFE_RECALLOC(mesh->adja,3*oldSiz+5,3*mesh->ntmax+5,int \
113 ,"larger adja table",law); \
114 } \
115 \
116 /* We try again to add the point */ \
117 jel = MMGS_newElt(mesh); \
118 if ( !jel ) {law;} \
119 }while(0)
120
121/* prototypes */
122int MMGS_Init_mesh_var( va_list argptr );
123int MMGS_Free_all_var( va_list argptr );
124int MMGS_Free_structures_var( va_list argptr );
125int MMGS_Free_names_var( va_list argptr );
126
137int boulet(MMG5_pMesh mesh,int start,int ip,int *list);
138int boulechknm(MMG5_pMesh mesh,int start,int ip,int *list);
139int bouletrid(MMG5_pMesh mesh,int start,int ip,int *il1,int *l1,int *il2,int *l2,int *ip0,int *ip1);
140int MMGS_newPt(MMG5_pMesh mesh,double c[3],double n[3]);
141void MMGS_delPt(MMG5_pMesh mesh,int ip);
143int MMGS_delElt(MMG5_pMesh mesh,int iel);
144int chkedg(MMG5_pMesh ,int );
146int MMGS_bezierInt(MMG5_pBezier ,double *,double *,double *,double *);
147int MMGS_simbulgept(MMG5_pMesh mesh,MMG5_pSol met, int k,int i,int ip);
148int MMGS_split1_sim(MMG5_pMesh mesh,MMG5_pSol met,int k,int i, int *vx);
149int MMG5_split2_sim(MMG5_pMesh mesh,MMG5_pSol met,int k,int *vx);
150int MMGS_split3_sim(MMG5_pMesh mesh,MMG5_pSol met,int k,int *vx);
151int MMGS_split1(MMG5_pMesh mesh,MMG5_pSol met,int k,int i,int *vx);
152int MMGS_split2(MMG5_pMesh mesh,MMG5_pSol met,int k,int *vx);
153int MMGS_split3(MMG5_pMesh mesh,MMG5_pSol met,int k,int *vx);
154int split1b(MMG5_pMesh mesh,int k,int8_t i,int ip);
155int chkcol(MMG5_pMesh mesh,MMG5_pSol met,int k,int8_t i,int *list,int8_t typchk);
156int colver(MMG5_pMesh mesh,int *list,int ilist);
157int colver3(MMG5_pMesh mesh,int*list);
158int colver2(MMG5_pMesh mesh,int *ilist);
159int swapar(MMG5_pMesh mesh,int k,int i);
160int chkswp(MMG5_pMesh mesh,MMG5_pSol met,int k,int i,int8_t typchk);
161int swpedg(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist,int8_t typchk);
162int8_t typelt(MMG5_pPoint p[3],int8_t *ia);
163int litswp(MMG5_pMesh mesh,int k,int8_t i,double kal);
164int litcol(MMG5_pMesh mesh,int k,int8_t i,double kal);
165int MMG5_mmgsChkmsh(MMG5_pMesh,int,int);
166int paratmet(double c0[3],double n0[3],double m[6],double c1[3],double n1[3],double mt[6]);
167int intregmet(MMG5_pMesh mesh,MMG5_pSol met,int k,int8_t i,double s,double mr[6]);
168int MMG5_intridmet(MMG5_pMesh,MMG5_pSol,int,int,double,double*,double*);
169int setref(MMG5_pMesh,int,int,int);
170int delref(MMG5_pMesh);
172int chknor(MMG5_pMesh);
173size_t MMG5_memSize(void);
176
177#ifdef USE_SCOTCH
178int MMG5_mmgsRenumbering(int,MMG5_pMesh,MMG5_pSol,MMG5_pSol,int*);
179#endif
180
181/* tools */
183
184/* useful functions to debug */
185int MMGS_indElt(MMG5_pMesh mesh,int kel);
186int MMGS_indPt(MMG5_pMesh mesh,int kp);
187
188/* function pointers */
189/* init structures */
191/* iso/aniso computations */
192double caleltsig_ani(MMG5_pMesh mesh,MMG5_pSol met,int iel);
193double caleltsig_iso(MMG5_pMesh mesh,MMG5_pSol met,int iel);
198int intmet_iso(MMG5_pMesh mesh,MMG5_pSol met,int k,int8_t i,int ip,double s);
199int intmet_ani(MMG5_pMesh mesh,MMG5_pSol met,int k,int8_t i,int ip,double s);
200int MMGS_intmet33_ani(MMG5_pMesh,MMG5_pSol,int,int8_t,int,double);
201int MMGS_paramDisp(MMG5_pMesh,int,int8_t,int,int,double,double[3]);
203 double llold,double lam0,double lam1,double lam2,
204 double nn1[3],double nn2[3],double to[3]);
205int movridpt_iso(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
206int movintpt_iso(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
207int movridpt_ani(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
208int movintpt_ani(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
209int MMGS_surfballRotation(MMG5_pMesh,MMG5_pPoint,int*,int,double r[3][3],double*);
212
213extern double (*MMG5_calelt)(MMG5_pMesh mesh,MMG5_pSol met,MMG5_pTria ptt);
214extern int (*MMGS_defsiz)(MMG5_pMesh mesh,MMG5_pSol met);
215extern int (*MMGS_gradsiz)(MMG5_pMesh mesh,MMG5_pSol met);
216extern int (*MMGS_gradsizreq)(MMG5_pMesh mesh,MMG5_pSol met);
217extern int (*intmet)(MMG5_pMesh mesh,MMG5_pSol met,int k,int8_t i,int ip,double s);
218extern int (*movridpt)(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
219extern int (*movintpt)(MMG5_pMesh mesh,MMG5_pSol met,int *list,int ilist);
220
225static inline
233#ifdef USE_SCOTCH
234 MMG5_renumbering = MMG5_mmgsRenumbering;
235#endif
236}
237
238#ifdef __cplusplus
239}
240#endif
241
242#endif
MMG5_pMesh * mesh
Definition: API_functionsf_s.c:63
const int va_list argptr
Definition: API_functionsf_s.c:712
int MMG5_grad2metSurfreq(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt, int npmaster, int npslave)
Definition: anisosiz.c:1448
int MMG5_grad2metSurf(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt, int np1, int np2)
Definition: anisosiz.c:910
API header for the common part of the MMG libraries.
API headers for the mmgs library.
int(* MMG5_chkmsh)(MMG5_pMesh, int, int)
Definition: mmgexterns.c:27
int(* MMG5_bezierCP)(MMG5_pMesh, MMG5_Tria *, MMG5_pBezier, int8_t)
Definition: mmgexterns.c:28
int(* MMG5_indPt)(MMG5_pMesh mesh, int kp)
Definition: mmgexterns.c:31
int(* MMG5_grad2metreq_ani)(MMG5_pMesh, MMG5_pSol, MMG5_pTria, int, int)
Definition: mmgexterns.c:33
int(* MMG5_indElt)(MMG5_pMesh mesh, int kel)
Definition: mmgexterns.c:30
int(* MMG5_grad2met_ani)(MMG5_pMesh, MMG5_pSol, MMG5_pTria, int, int)
Definition: mmgexterns.c:32
int MMGS_assignEdge(MMG5_pMesh mesh)
Definition: hash_s.c:113
int MMGS_bdryUpdate(MMG5_pMesh mesh)
Definition: hash_s.c:169
int split1b(MMG5_pMesh mesh, int k, int8_t i, int ip)
Definition: split_s.c:220
int intmet_ani(MMG5_pMesh mesh, MMG5_pSol met, int k, int8_t i, int ip, double s)
Definition: intmet_s.c:104
int MMGS_indPt(MMG5_pMesh mesh, int kp)
Definition: gentools_s.c:138
int MMGS_moveTowardPoint(MMG5_pMesh mesh, MMG5_pPoint p0, MMG5_pPoint p, double llold, double lam0, double lam1, double lam2, double nn1[3], double nn2[3], double to[3])
Definition: movpt_s.c:553
size_t MMG5_memSize(void)
Definition: tools.c:547
int litcol(MMG5_pMesh mesh, int k, int8_t i, double kal)
Definition: colver_s.c:470
int swpedg(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist, int8_t typchk)
Definition: swapar_s.c:427
int intregmet(MMG5_pMesh mesh, MMG5_pSol met, int k, int8_t i, double s, double mr[6])
Definition: intmet_s.c:57
int colver2(MMG5_pMesh mesh, int *ilist)
Definition: colver_s.c:430
int MMG5_mmgsBezierCP(MMG5_pMesh, MMG5_Tria *, MMG5_pBezier, int8_t ori)
Definition: bezier_s.c:54
int MMGS_newPt(MMG5_pMesh mesh, double c[3], double n[3])
Definition: zaldy_s.c:39
int MMGS_Init_mesh_var(va_list argptr)
Definition: variadic_s.c:148
int MMG5_intridmet(MMG5_pMesh, MMG5_pSol, int, int, double, double *, double *)
int MMGS_delElt(MMG5_pMesh mesh, int iel)
Definition: zaldy_s.c:93
int MMGS_split2(MMG5_pMesh mesh, MMG5_pSol met, int k, int *vx)
Definition: split_s.c:429
int MMGS_split1(MMG5_pMesh mesh, MMG5_pSol met, int k, int i, int *vx)
Definition: split_s.c:107
int MMGS_gradsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz_s.c:805
int MMGS_paramDisp(MMG5_pMesh, int, int8_t, int, int, double, double[3])
Definition: movpt_s.c:373
int curvpo(MMG5_pMesh, MMG5_pSol)
int8_t typelt(MMG5_pPoint p[3], int8_t *ia)
Definition: quality_s.c:510
int(* MMGS_gradsizreq)(MMG5_pMesh mesh, MMG5_pSol met)
Definition: mmgsexterns.c:8
int MMGS_mmgs2(MMG5_pMesh, MMG5_pSol, MMG5_pSol)
Definition: mmgs2.c:608
int MMGS_outqua(MMG5_pMesh, MMG5_pSol)
Definition: quality_s.c:453
int MMGS_hashTria(MMG5_pMesh)
Definition: hash_s.c:77
int MMGS_analys(MMG5_pMesh mesh)
Definition: analys_s.c:701
double(* MMG5_calelt)(MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
Definition: mmgsexterns.c:6
int(* movintpt)(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: mmgsexterns.c:4
int MMGS_zaldy(MMG5_pMesh mesh)
Definition: zaldy_s.c:241
int MMGS_setMeshSize_alloc(MMG5_pMesh mesh)
Definition: zaldy_s.c:201
int MMGS_split3(MMG5_pMesh mesh, MMG5_pSol met, int k, int *vx)
Definition: split_s.c:590
int MMGS_inqua(MMG5_pMesh, MMG5_pSol)
Definition: quality_s.c:386
int colver(MMG5_pMesh mesh, int *list, int ilist)
Definition: colver_s.c:277
int chknor(MMG5_pMesh)
Definition: chkmsh_s.c:240
int movintpt_ani(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: anisomovpt_s.c:48
void MMG5_Init_parameters(MMG5_pMesh mesh)
Definition: API_functions.c:51
int MMGS_surfballRotation(MMG5_pMesh, MMG5_pPoint, int *, int, double r[3][3], double *)
Definition: anisosiz_s.c:518
int litswp(MMG5_pMesh mesh, int k, int8_t i, double kal)
Definition: swapar_s.c:374
int setref(MMG5_pMesh, int, int, int)
Definition: gentools_s.c:64
int MMGS_split1_sim(MMG5_pMesh mesh, MMG5_pSol met, int k, int i, int *vx)
Definition: split_s.c:50
int MMGS_defsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
Definition: isosiz_s.c:139
int(* movridpt)(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: mmgsexterns.c:10
int(* intmet)(MMG5_pMesh mesh, MMG5_pSol met, int k, int8_t i, int ip, double s)
Definition: mmgsexterns.c:9
void MMGS_keep_only1Subdomain(MMG5_pMesh mesh, int nsd)
Definition: gentools_s.c:160
int MMGS_Free_all_var(va_list argptr)
Definition: variadic_s.c:235
int MMGS_defsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz_s.c:708
int MMGS_indElt(MMG5_pMesh mesh, int kel)
Definition: gentools_s.c:122
int boulechknm(MMG5_pMesh mesh, int start, int ip, int *list)
Definition: boulep_s.c:111
int MMG5_mmgs1(MMG5_pMesh, MMG5_pSol, int *)
Definition: mmgs1.c:1385
int MMG5_mmgsChkmsh(MMG5_pMesh, int, int)
Definition: chkmsh_s.c:48
void MMGS_delPt(MMG5_pMesh mesh, int ip)
Definition: zaldy_s.c:58
int movintpt_iso(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: movpt_s.c:51
int bouletrid(MMG5_pMesh mesh, int start, int ip, int *il1, int *l1, int *il2, int *l2, int *ip0, int *ip1)
Definition: boulep_s.c:260
int swapar(MMG5_pMesh mesh, int k, int i)
Definition: swapar_s.c:296
int intmet_iso(MMG5_pMesh mesh, MMG5_pSol met, int k, int8_t i, int ip, double s)
Definition: intmet_s.c:77
int movridpt_ani(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: anisomovpt_s.c:251
int MMGS_Free_names_var(va_list argptr)
Definition: variadic_s.c:436
double caleltsig_ani(MMG5_pMesh mesh, MMG5_pSol met, int iel)
Definition: quality_s.c:52
int colver3(MMG5_pMesh mesh, int *list)
Definition: colver_s.c:367
int MMGS_bezierInt(MMG5_pBezier, double *, double *, double *, double *)
int paratmet(double c0[3], double n0[3], double m[6], double c1[3], double n1[3], double mt[6])
int chkmet(MMG5_pMesh, MMG5_pSol)
int boulet(MMG5_pMesh mesh, int start, int ip, int *list)
Definition: boulep_s.c:49
int MMGS_prilen(MMG5_pMesh mesh, MMG5_pSol met, int)
Definition: quality_s.c:281
double caleltsig_iso(MMG5_pMesh mesh, MMG5_pSol met, int iel)
Definition: quality_s.c:139
int MMGS_newElt(MMG5_pMesh mesh)
Definition: zaldy_s.c:71
int MMGS_simbulgept(MMG5_pMesh mesh, MMG5_pSol met, int k, int i, int ip)
Definition: split_s.c:158
int chkedg(MMG5_pMesh, int)
Definition: mmgs1.c:210
int(* MMGS_defsiz)(MMG5_pMesh mesh, MMG5_pSol met)
Definition: mmgsexterns.c:5
int chkcol(MMG5_pMesh mesh, MMG5_pSol met, int k, int8_t i, int *list, int8_t typchk)
Definition: colver_s.c:53
int MMGS_memOption(MMG5_pMesh mesh)
Definition: zaldy_s.c:183
int MMGS_set_metricAtPointsOnReqEdges(MMG5_pMesh, MMG5_pSol, int8_t)
Definition: isosiz_s.c:88
int(* MMGS_gradsiz)(MMG5_pMesh mesh, MMG5_pSol met)
Definition: mmgsexterns.c:7
int MMGS_gradsizreq_ani(MMG5_pMesh mesh, MMG5_pSol met)
int MMGS_Free_structures_var(va_list argptr)
Definition: variadic_s.c:334
int movridpt_iso(MMG5_pMesh mesh, MMG5_pSol met, int *list, int ilist)
Definition: movpt_s.c:593
int MMG5_split2_sim(MMG5_pMesh mesh, MMG5_pSol met, int k, int *vx)
Definition: split_s.c:353
int chkswp(MMG5_pMesh mesh, MMG5_pSol met, int k, int i, int8_t typchk)
Definition: swapar_s.c:39
int MMGS_split3_sim(MMG5_pMesh mesh, MMG5_pSol met, int k, int *vx)
Definition: split_s.c:502
int MMGS_intmet33_ani(MMG5_pMesh, MMG5_pSol, int, int8_t, int, double)
Definition: intmet_s.c:143
int delref(MMG5_pMesh)
Definition: gentools_s.c:39
static void MMGS_Set_commonFunc(void)
Definition: mmgs.h:226
Definition: mmgcommon.h:554
MMG mesh structure.
Definition: libmmgtypes.h:575
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:252
Definition: libmmgtypes.h:633
Definition: libmmgtypes.h:312