Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
libmmgs_private.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 LIBMMGS_PRIVATE_H
25#define LIBMMGS_PRIVATE_H
26
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/* numerical accuracy */
34#define MMGS_ALPHAD 3.464101615137755 /* 6.0 / sqrt(3.0) */
35
36#define MMGS_LOPTL 1.4
37#define MMGS_LOPTS 0.71
38#define MMGS_LLONG 2.0
39#define MMGS_LSHRT 0.3
40
41#define MMGS_BADKAL 2.e-2
42#define MMGS_NULKAL 1.e-4
43
44#define MMGS_NPMAX 500000
45#define MMGS_NTMAX 1000000
46#define MMGS_XPMAX 500000
47
48
49#define MS_SIN(tag) ((tag & MG_CRN) || (tag & MG_REQ) || (tag & MG_NOM))
50
51
53#define MMGS_RETURN_AND_FREE(mesh,met,ls,val)do \
54 { \
55 if ( !MMGS_Free_all(MMG5_ARG_start, \
56 MMG5_ARG_ppMesh,&mesh,MMG5_ARG_ppMet,&met, \
57 MMG5_ARG_ppLs,&ls, \
58 MMG5_ARG_end) ) { \
59 return MMG5_LOWFAILURE; \
60 } \
61 return val; \
62 }while(0)
63
66#define MMGS_POINT_REALLOC(mesh,sol,ip,wantedGap,law,o,tag ) do \
67 { \
68 MMG5_int klink; \
69 assert ( mesh && mesh->point ); \
70 MMG5_TAB_RECALLOC(mesh,mesh->point,mesh->npmax,wantedGap,MMG5_Point, \
71 "larger point table",law); \
72 \
73 mesh->npnil = mesh->np+1; \
74 for (klink=mesh->npnil; klink<mesh->npmax-1; klink++) \
75 mesh->point[klink].tmp = klink+1; \
76 \
77 /* solution */ \
78 if ( sol->m ) { \
79 MMG5_ADD_MEM(mesh,(sol->size*(mesh->npmax-sol->npmax))*sizeof(double), \
80 "larger solution",law); \
81 MMG5_SAFE_REALLOC(sol->m,sol->size*(sol->npmax+1), \
82 sol->size*(mesh->npmax+1),double, \
83 "larger solution",law); \
84 } \
85 sol->npmax = mesh->npmax; \
86 \
87 /* We try again to add the point */ \
88 ip = MMGS_newPt(mesh,o,tag); \
89 if ( !ip ) {law;} \
90 }while(0)
91
94#define MMGS_TRIA_REALLOC( mesh,jel,wantedGap,law ) do \
95 { \
96 MMG5_int klink,oldSiz; \
97 \
98 oldSiz = mesh->ntmax; \
99 \
100 MMG5_CHK_INT32_OVERFLOW(wantedGap,oldSiz,3,5,law); \
101 \
102 MMG5_TAB_RECALLOC(mesh,mesh->tria,mesh->ntmax,wantedGap,MMG5_Tria, \
103 "larger tria table",law); \
104 \
105 mesh->nenil = mesh->nt+1; \
106 for (klink=mesh->nenil; klink<mesh->ntmax-1; klink++) \
107 mesh->tria[klink].v[2] = klink+1; \
108 \
109 if ( mesh->adja ) { \
110 /* adja table */ \
111 MMG5_ADD_MEM(mesh,3*(mesh->ntmax-oldSiz)*sizeof(MMG5_int), \
112 "larger adja table",law); \
113 MMG5_SAFE_RECALLOC(mesh->adja,3*oldSiz+5,3*mesh->ntmax+5,MMG5_int \
114 ,"larger adja table",law); \
115 } \
116 \
117 /* We try again to add the point */ \
118 jel = MMGS_newElt(mesh); \
119 if ( !jel ) {law;} \
120 }while(0)
121
122/* prototypes */
123int MMGS_Init_mesh_var( va_list argptr );
124int MMGS_Free_all_var( va_list argptr );
125int MMGS_Free_structures_var( va_list argptr );
126int MMGS_Free_names_var( va_list argptr );
127
138int MMG5_mmgs1(MMG5_pMesh ,MMG5_pSol,MMG5_int* );
141int boulechknm(MMG5_pMesh mesh,MMG5_int start,int ip,MMG5_int *list);
142int bouletrid(MMG5_pMesh mesh,MMG5_int start,MMG5_int ip,int *il1,MMG5_int *l1,int *il2,MMG5_int *l2,MMG5_int *ip0,MMG5_int *ip1);
143MMG5_int MMGS_newPt(MMG5_pMesh mesh,double c[3],double n[3]);
144void MMGS_delPt(MMG5_pMesh mesh,MMG5_int ip);
145MMG5_int MMGS_newElt(MMG5_pMesh mesh);
146int MMGS_delElt(MMG5_pMesh mesh,MMG5_int iel);
147int chkedg(MMG5_pMesh ,MMG5_int );
149int MMGS_bezierInt(MMG5_pBezier ,double *,double *,double *,double *);
150int MMGS_simbulgept(MMG5_pMesh mesh,MMG5_pSol met, MMG5_int k,int i,MMG5_int ip);
151int MMGS_split1_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int i, MMG5_int *vx);
152int MMG5_split2_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int *vx);
153int MMGS_split3_sim(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int *vx);
154int MMGS_split1(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int i,MMG5_int *vx);
155int MMGS_split2(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int *vx);
156int MMGS_split3(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,MMG5_int *vx);
157int split1b(MMG5_pMesh mesh,MMG5_int k,int8_t i,MMG5_int ip);
158int chkcol(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t i,MMG5_int *list,int8_t typchk,
159 double (*MMGS_lenEdg)(MMG5_pMesh,MMG5_pSol,MMG5_int ,MMG5_int,int8_t),
160 double (*MMGS_caltri)(MMG5_pMesh,MMG5_pSol,MMG5_pTria));
161int colver(MMG5_pMesh mesh,MMG5_int *list,int ilist);
162int colver3(MMG5_pMesh mesh,MMG5_int*list);
163int colver2(MMG5_pMesh mesh,MMG5_int *ilist);
164int swapar(MMG5_pMesh mesh,MMG5_int k,int i);
165int chkswp(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int i,int8_t typchk,
166 double (*MMGS_lenEdg)(MMG5_pMesh,MMG5_pSol,MMG5_int ,MMG5_int,int8_t),
167 double (*MMGS_caltri)(MMG5_pMesh,MMG5_pSol,MMG5_pTria));
168int swpedg(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int *list,int ilist,int8_t typchk);
169int8_t typelt(MMG5_pPoint p[3],int8_t *ia);
170int litswp(MMG5_pMesh mesh,MMG5_int k,int8_t i,double kal);
171int litcol(MMG5_pMesh mesh,MMG5_int k,int8_t i,double kal);
172int MMG5_mmgsChkmsh(MMG5_pMesh,int,MMG5_int);
173int paratmet(double c0[3],double n0[3],double m[6],double c1[3],double n1[3],double mt[6]);
174int intregmet(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t i,double s,double mr[6]);
175int MMG5_intridmet(MMG5_pMesh,MMG5_pSol,MMG5_int,MMG5_int,double,double*,double*);
176int setref(MMG5_pMesh,MMG5_int,MMG5_int,int);
177int delref(MMG5_pMesh);
179int chknor(MMG5_pMesh);
180size_t MMG5_memSize(void);
183
184#ifdef USE_SCOTCH
186#endif
187
188/* tools */
189void MMGS_keep_only1Subdomain ( MMG5_pMesh mesh,MMG5_int nsd );
190
191/* useful functions to debug */
192MMG5_int MMGS_indElt(MMG5_pMesh mesh,MMG5_int kel);
193MMG5_int MMGS_indPt(MMG5_pMesh mesh,MMG5_int kp);
194
195/* function pointers */
196
197/* iso/aniso computations */
198double caleltsig_ani(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int iel);
199double caleltsig_iso(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int iel);
206int intmet_iso(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t i,MMG5_int ip,double s);
207int intmet_ani(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t i,MMG5_int ip,double s);
208int MMGS_intmet33_ani(MMG5_pMesh,MMG5_pSol,MMG5_int,int8_t,MMG5_int,double);
209int MMGS_paramDisp(MMG5_pMesh,MMG5_int,int8_t,MMG5_int,MMG5_int,double,double[3]);
211 double llold,double lam0,double lam1,double lam2,
212 double nn1[3],double nn2[3],double to[3]);
213
214int movridpt_iso(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int *list,int ilist);
215int movintpt_iso(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int *list,int ilist);
216int movridpt_ani(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int *list,int ilist);
217int movintpt_ani(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int *list,int ilist);
218int MMGS_surfballRotation(MMG5_pMesh,MMG5_pPoint,MMG5_int*,int,double r[3][3],double*,double n[3]);
221
222#ifdef __cplusplus
223}
224#endif
225
226#endif
MMG5_pMesh * mesh
const int va_list argptr
int swpedg(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist, int8_t typchk)
MMG5_int MMGS_newPt(MMG5_pMesh mesh, double c[3], double n[3])
Definition: zaldy_s.c:39
int MMGS_assignEdge(MMG5_pMesh mesh)
Definition: hash_s.c:113
int MMGS_bdryUpdate(MMG5_pMesh mesh)
Definition: hash_s.c:169
int MMG5_intridmet(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, double, double *, double *)
int MMG5_split2_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
Definition: split_s.c:383
int MMGS_analys_for_norver(MMG5_pMesh mesh)
Definition: analys_s.c:1042
int MMGS_intmet33_ani(MMG5_pMesh, MMG5_pSol, MMG5_int, int8_t, MMG5_int, double)
Definition: intmet_s.c:144
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:555
size_t MMG5_memSize(void)
Definition: tools.c:852
int movridpt_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
Definition: movpt_s.c:595
int MMG5_mmgsBezierCP(MMG5_pMesh, MMG5_Tria *, MMG5_pBezier, int8_t ori)
Definition: bezier_s.c:54
int MMGS_Init_mesh_var(va_list argptr)
Definition: variadic_s.c:149
double caleltsig_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel)
Definition: quality_s.c:54
int MMGS_split1(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int *vx)
Definition: split_s.c:109
int setref(MMG5_pMesh, MMG5_int, MMG5_int, int)
Definition: gentools_s.c:64
int chkswp(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, int8_t typchk, double(*MMGS_lenEdg)(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, int8_t), double(*MMGS_caltri)(MMG5_pMesh, MMG5_pSol, MMG5_pTria))
Definition: swapar_s.c:58
int MMGS_split3_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
Definition: split_s.c:532
int MMGS_gradsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz_s.c:835
int MMG5_mmgsChkmsh(MMG5_pMesh, int, MMG5_int)
Definition: chkmsh_s.c:48
int MMGS_regver(MMG5_pMesh mesh)
Definition: analys_s.c:817
int colver(MMG5_pMesh mesh, MMG5_int *list, int ilist)
Definition: colver_s.c:280
int curvpo(MMG5_pMesh, MMG5_pSol)
int8_t typelt(MMG5_pPoint p[3], int8_t *ia)
Definition: quality_s.c:515
int MMGS_mmgs2(MMG5_pMesh, MMG5_pSol, MMG5_pSol)
Definition: mmgs2.c:241
int MMGS_outqua(MMG5_pMesh, MMG5_pSol)
Definition: quality_s.c:457
int MMGS_hashTria(MMG5_pMesh)
Definition: hash_s.c:77
MMG5_int MMGS_indPt(MMG5_pMesh mesh, MMG5_int kp)
Definition: gentools_s.c:139
int MMGS_analys(MMG5_pMesh mesh)
Definition: analys_s.c:1094
int MMGS_delElt(MMG5_pMesh mesh, MMG5_int iel)
Definition: zaldy_s.c:93
int MMGS_zaldy(MMG5_pMesh mesh)
Definition: zaldy_s.c:263
int swapar(MMG5_pMesh mesh, MMG5_int k, int i)
Definition: swapar_s.c:318
int MMGS_setMeshSize_alloc(MMG5_pMesh mesh)
Definition: zaldy_s.c:223
int MMGS_inqua(MMG5_pMesh, MMG5_pSol)
Definition: quality_s.c:389
int chkedg(MMG5_pMesh, MMG5_int)
Definition: mmgs1.c:214
int chknor(MMG5_pMesh)
Definition: chkmsh_s.c:242
int movintpt_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
Definition: movpt_s.c:52
void MMGS_delPt(MMG5_pMesh mesh, MMG5_int ip)
Definition: zaldy_s.c:58
int MMGS_surfballRotation(MMG5_pMesh, MMG5_pPoint, MMG5_int *, int, double r[3][3], double *, double n[3])
Definition: anisosiz_s.c:529
int colver3(MMG5_pMesh mesh, MMG5_int *list)
Definition: colver_s.c:370
int MMGS_split3(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
Definition: split_s.c:620
int MMGS_defsiz_iso(MMG5_pMesh mesh, MMG5_pSol met)
Definition: isosiz_s.c:142
int MMGS_Free_all_var(va_list argptr)
Definition: variadic_s.c:225
int MMGS_defsiz_ani(MMG5_pMesh mesh, MMG5_pSol met)
Definition: anisosiz_s.c:735
int boulechknm(MMG5_pMesh mesh, MMG5_int start, int ip, MMG5_int *list)
Definition: boulep_s.c:51
int MMG5_mmgsRenumbering(int, MMG5_pMesh, MMG5_pSol, MMG5_pSol, MMG5_int *)
Definition: librnbg_s.c:80
int MMGS_simbulgept(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int ip)
Definition: split_s.c:162
int MMG5_mmgs1(MMG5_pMesh, MMG5_pSol, MMG5_int *)
Definition: mmgs1.c:1462
int intmet_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
Definition: intmet_s.c:104
double caleltsig_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int iel)
Definition: quality_s.c:141
int MMGS_Free_names_var(va_list argptr)
Definition: variadic_s.c:426
int MMGS_doSol_iso(MMG5_pMesh, MMG5_pSol)
int MMGS_split1_sim(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int i, MMG5_int *vx)
Definition: split_s.c:52
int intmet_iso(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int ip, double s)
Definition: intmet_s.c:77
int MMGS_paramDisp(MMG5_pMesh, MMG5_int, int8_t, MMG5_int, MMG5_int, double, double[3])
Definition: movpt_s.c:375
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)
void MMGS_keep_only1Subdomain(MMG5_pMesh mesh, MMG5_int nsd)
Definition: gentools_s.c:161
int litcol(MMG5_pMesh mesh, MMG5_int k, int8_t i, double kal)
Definition: colver_s.c:473
int MMGS_split2(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, MMG5_int *vx)
Definition: split_s.c:459
int MMGS_prilen(MMG5_pMesh mesh, MMG5_pSol met, int)
Definition: quality_s.c:283
int MMGS_setadj(MMG5_pMesh mesh)
Definition: analys_s.c:47
MMG5_int MMGS_indElt(MMG5_pMesh mesh, MMG5_int kel)
Definition: gentools_s.c:123
int MMGS_memOption(MMG5_pMesh mesh)
Definition: zaldy_s.c:205
int MMGS_set_metricAtPointsOnReqEdges(MMG5_pMesh, MMG5_pSol, int8_t)
Definition: isosiz_s.c:90
int intregmet(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, double s, double mr[6])
Definition: intmet_s.c:57
int MMGS_doSol_ani(MMG5_pMesh, MMG5_pSol)
int MMGS_gradsizreq_ani(MMG5_pMesh mesh, MMG5_pSol met)
MMG5_int MMGS_newElt(MMG5_pMesh mesh)
Definition: zaldy_s.c:71
int colver2(MMG5_pMesh mesh, MMG5_int *ilist)
Definition: colver_s.c:433
int MMGS_Free_structures_var(va_list argptr)
Definition: variadic_s.c:324
int chkcol(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int k, int8_t i, MMG5_int *list, int8_t typchk, double(*MMGS_lenEdg)(MMG5_pMesh, MMG5_pSol, MMG5_int, MMG5_int, int8_t), double(*MMGS_caltri)(MMG5_pMesh, MMG5_pSol, MMG5_pTria))
Definition: colver_s.c:59
int bouletrid(MMG5_pMesh mesh, MMG5_int start, MMG5_int ip, int *il1, MMG5_int *l1, int *il2, MMG5_int *l2, MMG5_int *ip0, MMG5_int *ip1)
Definition: boulep_s.c:201
int movintpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
Definition: anisomovpt_s.c:49
int litswp(MMG5_pMesh mesh, MMG5_int k, int8_t i, double kal)
int movridpt_ani(MMG5_pMesh mesh, MMG5_pSol met, MMG5_int *list, int ilist)
Definition: anisomovpt_s.c:252
int split1b(MMG5_pMesh mesh, MMG5_int k, int8_t i, MMG5_int ip)
Definition: split_s.c:283
int delref(MMG5_pMesh)
Definition: gentools_s.c:39
MMG mesh structure.
Definition: libmmgtypes.h:605
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:270