Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
libmmgtypes.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
27#include <stdint.h>
28#include <stdarg.h>
29#include <stddef.h>
30
31#include "mmg/common/mmgcmakedefines.h"
32#include "mmg/common/mmgversion.h"
33
34#ifndef _LIBMMGTYPES_H
35#define _LIBMMGTYPES_H
36
43#define MMG5_SUCCESS 0
51#define MMG5_LOWFAILURE 1
59#define MMG5_STRONGFAILURE 2
60
65#define MG_ISO 10
66
71#define MG_PLUS 2
76#define MG_MINUS 3
77
87#define MMG5_ARG_start 1
96#define MMG5_ARG_ppMesh 2
106#define MMG5_ARG_ppLs 3
116#define MMG5_ARG_ppMet 4
126#define MMG5_ARG_ppDisp 5
136#define MMG5_ARG_ppSols 6
145#define MMG5_ARG_pMesh 7
154#define MMG5_ARG_pMet 8
163#define MMG5_ARG_pDisp 9
173#define MMG5_ARG_end 10
174
181#define MMG5_NSOLS_MAX 100
182
189#define MMG5_FILENAME_LEN_MAX 255
190
197#define MMG5_MMAT_NoSplit 0
198
205#define MMG5_MMAT_Split 1
206
217
228};
229
247
257typedef struct {
258 double hmin;
259 double hmax;
260 double hausd;
261 MMG5_int ref;
262 int8_t elt;
264
270typedef struct {
271 double c[3];
272 double n[3];
275#ifdef USE_POINTMAP
276 MMG5_int src;
277#endif
278 MMG5_int ref;
279 MMG5_int xp;
280 MMG5_int tmp;
282 MMG5_int flag;
283 MMG5_int s;
284 int16_t tag;
286 int8_t tagdel;
287} MMG5_Point;
289
294typedef struct {
295 double n1[3],n2[3];
297 int8_t nnor; /* By default 0; 1 if no normal available (internal NOM point) */
300
305typedef struct {
306 MMG5_int a,b;
307 MMG5_int ref;
308 MMG5_int base;
310 int16_t tag;
311} MMG5_Edge;
313
332typedef struct {
333 double qual; /*Quality of the triangle*/
334 MMG5_int v[3];
335 MMG5_int ref;
336 MMG5_int base;
337 MMG5_int cc;
339 MMG5_int edg[3];
341 MMG5_int flag;
342 int16_t tag[3];
344 } MMG5_Tria;
346
347
366typedef struct {
367 MMG5_int v[4];
368 MMG5_int ref;
369 MMG5_int base;
370 MMG5_int edg[4];
372 int16_t tag[4];
374} MMG5_Quad;
376
377
401typedef struct {
402 double qual;
403 MMG5_int v[4];
404 MMG5_int ref;
405 MMG5_int base;
406 MMG5_int mark;
407 MMG5_int xt;
409 MMG5_int flag;
410 int16_t tag;
411} MMG5_Tetra;
413
418typedef struct {
419 MMG5_int ref[4];
421 MMG5_int edg[6];
423 int16_t ftag[4];
425 int16_t tag[6];
427 int8_t ori;
432
462typedef struct {
463 MMG5_int v[6];
464 MMG5_int ref;
465 MMG5_int base;
466 MMG5_int flag;
467 MMG5_int xpr;
469 int8_t tag;
470} MMG5_Prism;
472
477typedef struct {
478 MMG5_int ref[5];
480 MMG5_int edg[9];
484 int16_t ftag[5];
486 int16_t tag[9];
490
495typedef struct {
496 int8_t dospl;
497 MMG5_int ref,rin,rex;
498} MMG5_Mat;
500
505typedef struct {
506 MMG5_int offset;
507 MMG5_int size;
508 int *lookup;
511
516typedef struct {
518 double dhd,hmin,hmax,hsiz,hgrad,hgradreq,hausd;
519 double min[3],max[3],delta,ls,rmc;
520 MMG5_int *br;
521 MMG5_int isoref;
522 MMG5_int nsd;
523 int mem,npar,npari;
524 int nbr,nbri;
525 int opnbdy;
526 int renum;
528 int nmati,nmat;
529 int imprim;
530 int8_t nreg;
531 int8_t xreg;
532 int8_t ddebug;
533 int8_t badkal;
534 int8_t iso;
535 int8_t isosurf;
536 int8_t setfem;
539 int8_t fem;
540 int8_t lag;
541 int8_t parTyp;
544 int8_t sethmin;
545 int8_t sethmax;
546 uint8_t ani, optim, optimLES, noinsert, noswap, nomove, nosurf, nosizreq;
547 uint8_t metRidTyp;
556} MMG5_Info;
557
562typedef struct {
563 MMG5_int a;
564 MMG5_int b;
565 MMG5_int ref;
566 MMG5_int nxt;
567 int16_t tag;
568} MMG5_hgeom;
569
574typedef struct {
576 MMG5_int siz,max,nxt;
577} MMG5_HGeom;
578
579
584typedef struct {
585 MMG5_int a,b,nxt;
586 MMG5_int k;
587 MMG5_int s;
588} MMG5_hedge;
589
595typedef struct {
596 MMG5_int siz,max,nxt;
598} MMG5_Hash;
599
605typedef struct {
606 size_t memMax;
607 size_t memCur;
608 double gap;
609 int ver;
610 int dim;
611 int type;
612 MMG5_int npi,nti,nai,nei,np,na,nt,ne,npmax,namax,ntmax,nemax,xpmax,xtmax;
613 MMG5_int nquad,nprism;
614 int nsols;
615 MMG5_int nc1;
616 MMG5_int base;
618 MMG5_int mark;
620 MMG5_int xp,xt,xpr;
621 MMG5_int npnil;
622 MMG5_int nenil;
623 MMG5_int nanil;
624 MMG5_int *adja;
628 MMG5_int *adjt;
632 MMG5_int *adjapr;
636 MMG5_int *adjq;
640 int *ipar;
652 char *namein;
653 char *nameout;
655} MMG5_Mesh;
657
662typedef struct {
663 int ver; /* Version of the solution file */
664 int dim; /* Dimension of the solution file*/
665 MMG5_int np; /* Number of points of the solution */
666 MMG5_int npmax; /* Maximum number of points */
667 MMG5_int npi; /* Temporary number of points (internal use only) */
668 int size; /* Number of solutions per entity */
669 int type; /* Type of the solution (scalar, vectorial of tensorial) */
670 int entities; /* Type of the solution (scalar, vectorial of tensorial) */
671 double *m;
672 double umin,umax;
673 char *namein;
674 char *nameout;
675} MMG5_Sol;
677
678#endif
MMG5_Par * MMG5_pPar
Definition: libmmgtypes.h:263
MMG5_Tria * MMG5_pTria
Definition: libmmgtypes.h:345
MMG5_Edge * MMG5_pEdge
Definition: libmmgtypes.h:312
MMG5_Quad * MMG5_pQuad
Definition: libmmgtypes.h:375
MMG5_type
Type of solutions.
Definition: libmmgtypes.h:211
@ MMG5_Vector
Definition: libmmgtypes.h:214
@ MMG5_Tensor
Definition: libmmgtypes.h:215
@ MMG5_Scalar
Definition: libmmgtypes.h:213
@ MMG5_Notype
Definition: libmmgtypes.h:212
MMG5_xPrism * MMG5_pxPrism
Definition: libmmgtypes.h:489
MMG5_Format
Type of supported file format.
Definition: libmmgtypes.h:234
@ MMG5_FMT_MeditBinary
Definition: libmmgtypes.h:236
@ MMG5_FMT_Tetgen
Definition: libmmgtypes.h:244
@ MMG5_FMT_VtkVtk
Definition: libmmgtypes.h:243
@ MMG5_FMT_GmshBinary
Definition: libmmgtypes.h:238
@ MMG5_FMT_VtkPvtp
Definition: libmmgtypes.h:239
@ MMG5_FMT_Unknown
Definition: libmmgtypes.h:245
@ MMG5_FMT_GmshASCII
Definition: libmmgtypes.h:237
@ MMG5_FMT_MeditASCII
Definition: libmmgtypes.h:235
@ MMG5_FMT_VtkVtp
Definition: libmmgtypes.h:242
@ MMG5_FMT_VtkPvtu
Definition: libmmgtypes.h:240
@ MMG5_FMT_VtkVtu
Definition: libmmgtypes.h:241
MMG5_Sol * MMG5_pSol
Definition: libmmgtypes.h:676
MMG5_InvMat * MMG5_pInvMat
Definition: libmmgtypes.h:510
MMG5_Point * MMG5_pPoint
Definition: libmmgtypes.h:288
MMG5_Mat * MMG5_pMat
Definition: libmmgtypes.h:499
MMG5_Mesh * MMG5_pMesh
Definition: libmmgtypes.h:656
MMG5_xTetra * MMG5_pxTetra
Definition: libmmgtypes.h:431
MMG5_Tetra * MMG5_pTetra
Definition: libmmgtypes.h:412
MMG5_entities
Type of mesh entities.
Definition: libmmgtypes.h:222
@ MMG5_Noentity
Definition: libmmgtypes.h:223
@ MMG5_Vertex
Definition: libmmgtypes.h:224
@ MMG5_Tetrahedron
Definition: libmmgtypes.h:227
@ MMG5_Edg
Definition: libmmgtypes.h:225
@ MMG5_Triangle
Definition: libmmgtypes.h:226
MMG5_Prism * MMG5_pPrism
Definition: libmmgtypes.h:471
MMG5_xPoint * MMG5_pxPoint
Definition: libmmgtypes.h:299
Structure to store edges of a MMG mesh.
Definition: libmmgtypes.h:305
MMG5_int base
Definition: libmmgtypes.h:308
MMG5_int ref
Definition: libmmgtypes.h:307
int16_t tag
Definition: libmmgtypes.h:310
MMG5_int a
Definition: libmmgtypes.h:306
Hash table to store geometric edges.
Definition: libmmgtypes.h:574
MMG5_int max
Definition: libmmgtypes.h:576
MMG5_hgeom * geom
Definition: libmmgtypes.h:575
Identic as MMG5_HGeom but use MMG5_hedge to store edges instead of MMG5_hgeom (memory economy).
Definition: libmmgtypes.h:595
MMG5_int max
Definition: libmmgtypes.h:596
MMG5_hedge * item
Definition: libmmgtypes.h:597
Store input parameters of the run.
Definition: libmmgtypes.h:516
int8_t iso
Definition: libmmgtypes.h:534
int8_t parTyp
Definition: libmmgtypes.h:541
int8_t ddebug
Definition: libmmgtypes.h:532
double delta
Definition: libmmgtypes.h:519
int8_t isosurf
Definition: libmmgtypes.h:535
int8_t sethmin
Definition: libmmgtypes.h:544
MMG5_int * br
Definition: libmmgtypes.h:520
uint8_t ani
Definition: libmmgtypes.h:546
int8_t setfem
Definition: libmmgtypes.h:536
MMG5_pMat mat
Definition: libmmgtypes.h:554
int8_t badkal
Definition: libmmgtypes.h:533
MMG5_int isoref
Definition: libmmgtypes.h:521
uint8_t metRidTyp
Definition: libmmgtypes.h:547
int PROctree
Definition: libmmgtypes.h:527
int8_t lag
Definition: libmmgtypes.h:540
MMG5_int nsd
Definition: libmmgtypes.h:522
MMG5_InvMat invmat
Definition: libmmgtypes.h:555
int8_t sethmax
Definition: libmmgtypes.h:545
MMG5_pPar par
Definition: libmmgtypes.h:517
double dhd
Definition: libmmgtypes.h:518
int8_t xreg
Definition: libmmgtypes.h:531
int8_t nreg
Definition: libmmgtypes.h:530
int8_t fem
Definition: libmmgtypes.h:539
To store lookup table for references in the mesh (useful in LS mode)
Definition: libmmgtypes.h:505
MMG5_int offset
Definition: libmmgtypes.h:506
MMG5_int size
Definition: libmmgtypes.h:507
int * lookup
Definition: libmmgtypes.h:508
To store user-defined references in the mesh (useful in LS mode)
Definition: libmmgtypes.h:495
MMG5_int ref
Definition: libmmgtypes.h:497
int8_t dospl
Definition: libmmgtypes.h:496
MMG mesh structure.
Definition: libmmgtypes.h:605
size_t memCur
Definition: libmmgtypes.h:607
MMG5_pQuad quadra
Definition: libmmgtypes.h:648
MMG5_int nc1
Definition: libmmgtypes.h:615
MMG5_Info info
Definition: libmmgtypes.h:651
MMG5_int * adjapr
Definition: libmmgtypes.h:632
MMG5_pPoint point
Definition: libmmgtypes.h:641
char * nameout
Definition: libmmgtypes.h:653
int * ipar
Definition: libmmgtypes.h:640
MMG5_int mark
Definition: libmmgtypes.h:618
MMG5_int * adja
Definition: libmmgtypes.h:624
MMG5_pPrism prism
Definition: libmmgtypes.h:645
size_t memMax
Definition: libmmgtypes.h:606
MMG5_pxPoint xpoint
Definition: libmmgtypes.h:642
MMG5_int nenil
Definition: libmmgtypes.h:622
MMG5_HGeom htab
Definition: libmmgtypes.h:650
MMG5_int * adjq
Definition: libmmgtypes.h:636
MMG5_int xp
Definition: libmmgtypes.h:620
double gap
Definition: libmmgtypes.h:608
MMG5_int base
Definition: libmmgtypes.h:616
MMG5_pTetra tetra
Definition: libmmgtypes.h:643
MMG5_pxPrism xprism
Definition: libmmgtypes.h:646
MMG5_pTria tria
Definition: libmmgtypes.h:647
MMG5_pEdge edge
Definition: libmmgtypes.h:649
MMG5_int nanil
Definition: libmmgtypes.h:623
MMG5_pxTetra xtetra
Definition: libmmgtypes.h:644
MMG5_int nprism
Definition: libmmgtypes.h:613
MMG5_int na
Definition: libmmgtypes.h:612
MMG5_int npnil
Definition: libmmgtypes.h:621
char * namein
Definition: libmmgtypes.h:652
MMG5_int * adjt
Definition: libmmgtypes.h:628
double hmin
Definition: libmmgtypes.h:258
double hmax
Definition: libmmgtypes.h:259
double hausd
Definition: libmmgtypes.h:260
MMG5_int ref
Definition: libmmgtypes.h:261
int8_t elt
Definition: libmmgtypes.h:262
Structure to store points of a MMG mesh.
Definition: libmmgtypes.h:270
int16_t tag
Definition: libmmgtypes.h:284
int8_t tagdel
Definition: libmmgtypes.h:286
MMG5_int tmp
Definition: libmmgtypes.h:280
MMG5_int xp
Definition: libmmgtypes.h:279
MMG5_int s
Definition: libmmgtypes.h:283
MMG5_int ref
Definition: libmmgtypes.h:278
MMG5_int flag
Definition: libmmgtypes.h:282
int8_t tag
Definition: libmmgtypes.h:469
MMG5_int ref
Definition: libmmgtypes.h:464
MMG5_int flag
Definition: libmmgtypes.h:466
MMG5_int base
Definition: libmmgtypes.h:465
MMG5_int xpr
Definition: libmmgtypes.h:467
MMG5_int ref
Definition: libmmgtypes.h:368
MMG5_int base
Definition: libmmgtypes.h:369
MMG5_int npi
Definition: libmmgtypes.h:667
int entities
Definition: libmmgtypes.h:670
char * nameout
Definition: libmmgtypes.h:674
MMG5_int npmax
Definition: libmmgtypes.h:666
char * namein
Definition: libmmgtypes.h:673
double * m
Definition: libmmgtypes.h:671
double umax
Definition: libmmgtypes.h:672
MMG5_int np
Definition: libmmgtypes.h:665
MMG5_int base
Definition: libmmgtypes.h:405
MMG5_int xt
Definition: libmmgtypes.h:407
MMG5_int flag
Definition: libmmgtypes.h:409
MMG5_int ref
Definition: libmmgtypes.h:404
MMG5_int mark
Definition: libmmgtypes.h:406
double qual
Definition: libmmgtypes.h:402
int16_t tag
Definition: libmmgtypes.h:410
double qual
Definition: libmmgtypes.h:333
MMG5_int ref
Definition: libmmgtypes.h:335
MMG5_int flag
Definition: libmmgtypes.h:341
MMG5_int base
Definition: libmmgtypes.h:336
MMG5_int cc
Definition: libmmgtypes.h:337
Used to hash edges (memory economy compared to MMG5_hgeom).
Definition: libmmgtypes.h:584
MMG5_int s
Definition: libmmgtypes.h:587
MMG5_int a
Definition: libmmgtypes.h:585
MMG5_int k
Definition: libmmgtypes.h:586
Cell of the hash table of geom edges.
Definition: libmmgtypes.h:562
MMG5_int ref
Definition: libmmgtypes.h:565
int16_t tag
Definition: libmmgtypes.h:567
MMG5_int b
Definition: libmmgtypes.h:564
MMG5_int nxt
Definition: libmmgtypes.h:566
MMG5_int a
Definition: libmmgtypes.h:563
Structure to store surface points of a MMG mesh.
Definition: libmmgtypes.h:294
int8_t nnor
Definition: libmmgtypes.h:297
Structure to store the surface prism of a MMG mesh.
Definition: libmmgtypes.h:477
Structure to store the surface tetrahedra of a MMG mesh.
Definition: libmmgtypes.h:418
int8_t ori
Definition: libmmgtypes.h:427