Mmg
Simplicial remeshers (mesh adaptation, isovalue discretization, lagrangian movement)
|
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <math.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include <float.h>
#include "libmmgcommon_private.h"
Go to the source code of this file.
Macros | |
#define | M_MAX(a, b) (((a) > (b)) ? (a) : (b)) |
#define | M_MIN(a, b) (((a) < (b)) ? (a) : (b)) |
#define | M_LAMBDA 0.34 |
#define | M_MU 0.33 |
#define | MMG2D_EPSD 1.e-10 |
#define | MMG2D_EPSA 1.e-12 |
#define | MMG2D_PRECI 1. |
#define | MMG2D_SIZE 0.75 |
#define | MMG2D_ALPHA 0.28867513459 |
#define | MMG2D_ALPHAD 3.464101615137755 /* 6.0 / sqrt(3.0) */ |
#define | MMG2D_BADKAL 0.2 |
#define | MMG2D_NULKAL 1.e-6 |
#define | MMG2D_ANGCORN -1.e-6 |
#define | MMG2D_SHORTMAX 0x7fff |
#define | MMG2D_LLONG 2.0 |
#define | MMG2D_LSHRT 0.3 |
#define | MMG2D_LOPTL 1.4 |
#define | MMG2D_LOPTS 0.71 |
#define | MMG2D_NPMAX 50000 |
#define | MMG2D_NEDMAX 100000 |
#define | MMG2D_NEMAX 100000 |
#define | MMG2D_RETURN_AND_FREE(mesh, met, ls, disp, val) |
#define | MMG2D_POINT_REALLOC(mesh, sol, ip, wantedGap, law, o, tag) |
#define | MMG2D_TRIA_REALLOC(mesh, jel, wantedGap, law) |
Variables | |
static const uint8_t | MMG2D_idir_q [4][2] = { {0,1},{0,3},{1,2},{2,3} } |
idir[i]: vertices of edge i for a quad | |
static const int | MMG2D_iare [3][2] = {{1,2},{2,0},{0,1}} |
static const unsigned int | MMG2D_idir [5] = {0,1,2,0,1} |
#define M_LAMBDA 0.34 |
Definition at line 48 of file libmmg2d_private.h.
#define M_MAX | ( | a, | |
b | |||
) | (((a) > (b)) ? (a) : (b)) |
Definition at line 45 of file libmmg2d_private.h.
#define M_MIN | ( | a, | |
b | |||
) | (((a) < (b)) ? (a) : (b)) |
Definition at line 46 of file libmmg2d_private.h.
#define M_MU 0.33 |
Definition at line 49 of file libmmg2d_private.h.
#define MMG2D_ALPHA 0.28867513459 |
Definition at line 56 of file libmmg2d_private.h.
#define MMG2D_ALPHAD 3.464101615137755 /* 6.0 / sqrt(3.0) */ |
Definition at line 57 of file libmmg2d_private.h.
#define MMG2D_ANGCORN -1.e-6 |
Definition at line 60 of file libmmg2d_private.h.
#define MMG2D_BADKAL 0.2 |
Definition at line 58 of file libmmg2d_private.h.
#define MMG2D_EPSA 1.e-12 |
Definition at line 52 of file libmmg2d_private.h.
#define MMG2D_EPSD 1.e-10 |
Definition at line 51 of file libmmg2d_private.h.
#define MMG2D_LLONG 2.0 |
Definition at line 63 of file libmmg2d_private.h.
#define MMG2D_LOPTL 1.4 |
Definition at line 65 of file libmmg2d_private.h.
#define MMG2D_LOPTS 0.71 |
Definition at line 66 of file libmmg2d_private.h.
#define MMG2D_LSHRT 0.3 |
Definition at line 64 of file libmmg2d_private.h.
#define MMG2D_NEDMAX 100000 |
Definition at line 69 of file libmmg2d_private.h.
#define MMG2D_NEMAX 100000 |
Definition at line 70 of file libmmg2d_private.h.
#define MMG2D_NPMAX 50000 |
Definition at line 68 of file libmmg2d_private.h.
#define MMG2D_NULKAL 1.e-6 |
Definition at line 59 of file libmmg2d_private.h.
Reallocation of point table and sol table and creation of point ip with coordinates o and tag tag
Definition at line 117 of file libmmg2d_private.h.
#define MMG2D_PRECI 1. |
Definition at line 54 of file libmmg2d_private.h.
#define MMG2D_RETURN_AND_FREE | ( | mesh, | |
met, | |||
ls, | |||
disp, | |||
val | |||
) |
Free allocated pointers of mesh and sol structure and return value val
Definition at line 76 of file libmmg2d_private.h.
#define MMG2D_SHORTMAX 0x7fff |
Definition at line 61 of file libmmg2d_private.h.
#define MMG2D_SIZE 0.75 |
Definition at line 55 of file libmmg2d_private.h.
#define MMG2D_TRIA_REALLOC | ( | mesh, | |
jel, | |||
wantedGap, | |||
law | |||
) |
Reallocation of tria table and creation of tria jel
Definition at line 148 of file libmmg2d_private.h.
int interp_ani | ( | double * | , |
double * | , | ||
double * | , | ||
double | |||
) |
int interp_iso | ( | double * | , |
double * | , | ||
double * | , | ||
double | |||
) |
int lissmet_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
Anisotropic gradation (h-gradation procedure). See: [1]. The Hc-correction method is used (gradation with respect to H-shock measure). Skip edges with a required extremity (treated in lissmetreq_ani).
Definition at line 47 of file lissmet_2d.c.
int lissmet_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
double long_ani | ( | double * | ca, |
double * | cb, | ||
double * | ma, | ||
double * | mb | ||
) |
Definition at line 47 of file length_2d.c.
double long_iso | ( | double * | ca, |
double * | cb, | ||
double * | ma, | ||
double * | mb | ||
) |
Definition at line 27 of file length_2d.c.
int MMG2D_2dMeshCheck | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh structure. |
Check mesh data for a Msh mesh : mark the vertices as used if no triangles in the mesh (mesh generation) and check that all z-componants are 0.
Definition at line 679 of file inout_2d.c.
int MMG2D_adpcol | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
MMG5_int MMG2D_adpspl | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh structure. |
met | pointer to the metric structure. |
Analysis and splitting routine for edges in the final step of the algorithm; edges are only splitted on a one-by-one basis
Definition at line 640 of file mmg2d1.c.
int MMG2D_adptri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
MMG5_int MMG2D_anaelt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_analys | ( | MMG5_pMesh | mesh | ) |
preprocessing stage: mesh analysis
Definition at line 1014 of file analys_2d.c.
int MMG2D_anatri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int8_t | typchk | ||
) |
int MMG2D_assignEdge | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh |
Transfer some input edge data to the corresponding triangles fields
The cleaning of required tags inside triangles has been initially added by commit da4b099c. It probably followed the report of a bug arising when several library functions are successively called without cleaning the mesh structure but on december 2022 I am not able to reproduce this bug. Due to tags cleaning, input required edges are lost in ls discretization mode (see issue #171). The metRidtyp field (previsouly not used in 2D) is now used to mark if MMG2D_assignEdge function is called for the first time inside the library and if we have to clean triangle tags (in order to fix issue #171 without breaking again the initial fix).
Definition at line 334 of file hash_2d.c.
int MMG2D_baseBdry | ( | MMG5_pMesh | mesh | ) |
int MMG2D_bdryEdge | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh |
Create the edges in the mesh from the information stored in the triangles, or by identifying the different components of the mesh.
int MMG2D_bdryenforcement | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer to the mesh structure. |
sol | pointer to the sol structure. |
Check if all edges exist in the mesh and if not force them.
Now treat the missing edges
Definition at line 34 of file enforcement_2d.c.
int MMG2D_bezierCurv | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
int8_t | i, | ||
double | s, | ||
double * | o, | ||
double * | no | ||
) |
int MMG2D_bouleendp | ( | MMG5_pMesh | mesh, |
MMG5_int | start, | ||
int8_t | ip, | ||
MMG5_int * | ip1, | ||
MMG5_int * | ip2, | ||
MMG5_int * | list | ||
) |
mesh | pointer to the mesh structure. |
start | index of triangle to start. |
ip | index of point for wich we compute the ball. |
Find the two endpoints of the boundary curves joining ip, fill ip1 and ip2 with their indices and list neighbouring triangles
Definition at line 231 of file boulep_2d.c.
int MMG2D_boulen | ( | MMG5_pMesh | mesh, |
MMG5_int | start, | ||
int8_t | ip, | ||
MMG5_int * | pleft, | ||
MMG5_int * | pright, | ||
double * | nn | ||
) |
mesh | pointer to the mesh |
start | index of the first tria |
ip | local index of the point on which we work in tria start |
pleft | index of the left point of ip along the geom edge (local index of the point inside a triangle) |
pright | index of the right point of ip along the geom edge (local index of the point inside a triangle) |
nn | computed normal at ip |
Travel the ball of point ip in triangle start, which is assumed to lie either on the external or on an internal boundary of the mesh, and return the normal vector convention: the normal vector is oriented from the half ball it starts with towards its exterior return pright = 3*kk+ii, where kk = last triangle in the first travel, and ii = local index of ip in kk pleft = 3*kk+ii, where kk = last triangle in the second travel, and ii = local index of ip in kk.
Definition at line 115 of file boulep_2d.c.
int MMG2D_boulep | ( | MMG5_pMesh | mesh, |
MMG5_int | ifirst, | ||
int | iploc, | ||
MMG5_int * | list | ||
) |
int MMG2D_boulet | ( | MMG5_pMesh | , |
MMG5_int | , | ||
int8_t | , | ||
MMG5_int * | |||
) |
double MMG2D_caltri_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pTria | pt | ||
) |
double MMG2D_caltri_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt | ||
) |
pointer | to the mesh |
pointer | to the metric (for compatibility with aniso interface) |
pt | pointer to the tria |
Compute quality of the triangle pt when the supplied metric is isotropic; return 0 in the case that the triangle has inverted orientation.
Definition at line 107 of file quality_2d.c.
double MMG2D_caltri_iso_3pt | ( | double * | a, |
double * | b, | ||
double * | c | ||
) |
a | coordinates of first vertex of tria |
b | coordinates of second vertex of tria |
c | coordinates of third vertex of tria |
Compute quality of a triangle from the datum of its 3 vertices.
Definition at line 68 of file quality_2d.c.
int MMG2D_cavity | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | ip, | ||
MMG5_int * | list | ||
) |
Create the cavity point ip, starting from triangle list[0]; Return a negative value for ilist if one of the triangles of the cavity is required
Definition at line 149 of file delone_2d.c.
int MMG2D_cenrad_iso | ( | MMG5_pMesh | mesh, |
double * | ct, | ||
double * | c, | ||
double * | rad | ||
) |
mesh | Pointer toward the mesh structure. |
*ct | coordinates of vertices of the element. |
*c | center of circumscribing circle to the element. |
*rad | radius of circumscribing circle to the element. |
Compute radius and center of circumscribing circle to the element.
Definition at line 42 of file cenrad_2d.c.
int MMG2D_chkcol | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i, | ||
MMG5_int * | list, | ||
int8_t | typchk | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
k | triangle index |
i | local index of the edge that we want to test in the triangle k |
list | edge's shell (to fill) |
typchk | type eof check to perform. |
Check whether the validity and the geometry of the mesh are preserved when collapsing edge i (p1->p2)
Definition at line 42 of file colver_2d.c.
int MMG2D_chkedg | ( | MMG5_pMesh | mesh, |
MMG5_int | k | ||
) |
MMG5_int MMG2D_chkspl | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
k | triangle index |
i | local index of the edge to split |
Check whether splitting of edge i in tria k is possible and return the newly created point; possibly perform a dichotomy to find the latest valid position for the point.
Definition at line 51 of file split_2d.c.
int MMG2D_chkswp | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i, | ||
int8_t | typchk | ||
) |
Definition at line 128 of file swapar_2d.c.
MMG5_int MMG2D_colelt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_colver | ( | MMG5_pMesh | mesh, |
int | ilist, | ||
MMG5_int * | list | ||
) |
Definition at line 273 of file colver_2d.c.
int MMG2D_colver2 | ( | MMG5_pMesh | mesh, |
MMG5_int * | list | ||
) |
Definition at line 421 of file colver_2d.c.
int MMG2D_colver3 | ( | MMG5_pMesh | mesh, |
MMG5_int * | list | ||
) |
Definition at line 359 of file colver_2d.c.
int MMG2D_coorbary | ( | MMG5_pMesh | mesh, |
MMG5_pTria | pt, | ||
double | c[2], | ||
double * | det, | ||
double * | l1, | ||
double * | l2 | ||
) |
int MMG2D_cutEdge | ( | MMG5_pMesh | mesh, |
MMG5_pTria | pt, | ||
MMG5_pPoint | ppa, | ||
MMG5_pPoint | ppb | ||
) |
Definition at line 90 of file locate_2d.c.
int MMG2D_cutEdgeTriangle | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
MMG5_int | ia, | ||
MMG5_int | ib | ||
) |
Definition at line 129 of file locate_2d.c.
int MMG2D_cuttri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh |
sol | pointer to the level-set |
met | pointer to a metric (non-mandatory) |
Effective discretization of the 0 level set encoded in sol in the mesh. Only the boundary part of the domain is discretized if mesh->info.isosurf is 1.
Definition at line 48 of file mmg2d6.c.
int MMG2D_defaultmet_2d | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
k | elt index |
i | vertex index in triangle k |
Impose default metric (isotropic, with size hmax) at vertex i in triangle k (don't take into account the local parameters). Set the point flag to 1 to be able to truncate it with the local params later.
Definition at line 51 of file anisosiz_2d.c.
int MMG2D_defmetbdy_2d | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
k | index of the tria in which we work |
i | index of the point on which we want to compute the metric |
Calculate anisotropic metric tensor at (boundary) vertex i in triangle k on account of geometric approximation of the corresponding curve (taking into account the local parameters). Set the point flag to 2 to ignore it whem imposing the local parameters later.
Definition at line 86 of file anisosiz_2d.c.
int MMG2D_defsiz_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
Definition of an anisotropic metric tensor field based on the geometry of the domain; this tensor field is intersected by a user-defined tensor field
Step 1: Set metric at points belonging to a required edge: compute the metric as the mean of the length of the required eges passing through the point
For points with flag 1 (metrec computed by defaultmet_2d), truncation by the local parameters
Definition at line 363 of file anisosiz_2d.c.
int MMG2D_defsiz_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
New version for the definition of a size map; takes into account the curvature of the external and internal curves present in the mesh
1) Size at internal points
Step 1: Set metric at points belonging to a required edge: compute the metric as the mean of the length of the required eges passing through the point
Step 2: size at non required internal points
Step 3: Minimum size feature imposed by the boundary edges
If local parameters are provided: size truncation on the entire mesh
Definition at line 133 of file isosiz_2d.c.
int MMG2D_delElt | ( | MMG5_pMesh | mesh, |
MMG5_int | iel | ||
) |
int MMG2D_delone | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | ip, | ||
MMG5_int * | list, | ||
int | ilist | ||
) |
mesh | pointer to the mesh |
sol | pointer to the solution (metric) structure |
ip | index of point to insert |
list | Cavity of the point ip. |
ilist | number of trias in the cavity of ip. |
Insertion in point ip in the cavity described by list.
Definition at line 251 of file delone_2d.c.
void MMG2D_delPt | ( | MMG5_pMesh | mesh, |
MMG5_int | ip | ||
) |
int MMG2D_dichoto | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
MMG5_int * | vx | ||
) |
mesh | pointer to the mesh structure. |
met | pointer to the metric structure. |
k | element index. |
vx | pointer to table of edges to split. |
Find acceptable position for splitting.
Definition at line 360 of file mmg2d1.c.
int MMG2D_doSol_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer to the mesh structure |
sol | pointer to the sol structure |
Compute anisotropic unit size map using statistical concept of length distribution tensors (formula 5 of [2]).
Definition at line 175 of file solmap_2d.c.
int MMG2D_doSol_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer to the mesh structure |
sol | pointer to the sol structure |
Compute isotropic size map according to the mean of the length of the edges passing through a point.
Definition at line 97 of file solmap_2d.c.
|
inlinestatic |
sigid | signal number. |
Signal handling: specify error messages depending from catched signal.
Definition at line 94 of file libmmg2d_private.h.
MMG5_int MMG2D_findTria | ( | MMG5_pMesh | mesh, |
MMG5_int | ip | ||
) |
mesh | pointer to mesh |
ip | point index |
Return the index of one triangle containing k.
Definition at line 221 of file locate_2d.c.
MMG5_int MMG2D_findtrianglestate | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
MMG5_int | ip1, | ||
MMG5_int | ip2, | ||
MMG5_int | ip3, | ||
MMG5_int | ip4, | ||
MMG5_int | base | ||
) |
int MMG2D_Free_all_var | ( | va_list | argptr | ) |
argptr | list of the mmg structures that must be deallocated. Each structure must follow one of the MMG5_ARG preprocessor variable that allow to identify it. |
argptr contains at least a pointer to a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword)
To call the MMG2D_mmg2dlib function, you must also provide a pointer to a MMG5_pSol structure (that will contain the ouput metric (and the input one, if provided) and identified by the MMG5_ARG_ppMet keyword).
To call the MMG2D_mmg2dls function, you must also provide a pointer toward a MMG5_pSol structure (that will contain the level-set function and identified by the MMG5_ARG_ppLs keyword).
To call the MMG2D_mmg2dmov library, you must also provide a pointer to a MMG5_pSol structure storing the displacement (and identified by the MMG5_ARG_ppDisp keyword).
Internal function for deallocations before return (taking a va_list as argument).
Definition at line 259 of file variadic_2d.c.
int MMG2D_Free_names_var | ( | va_list | argptr | ) |
argptr | list of the mmg structures for whose we want to deallocate the name. Each structure must follow one of the MMG5_ARG* preprocessor variable that allow to identify it. argptr contains at least a pointer to a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword) and a pointer to a MMG5_pSol structure (that will contain the ouput metric (and the input one, if provided) and identified by the MMG5_ARG_ppMet keyword). |
Internal function for name deallocations before return (taking a va_list as argument).
Definition at line 483 of file variadic_2d.c.
int MMG2D_Free_structures_var | ( | va_list | argptr | ) |
argptr | list of the mmg structures that must be deallocated. Each structure must follow one of the MMG5_ARG* preprocessor variable that allow to identify it. argptr contains at least a pointer to a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword) and a pointer to a MMG5_pSol structure (that will contain the ouput metric (and the input one, if provided) and identified by the MMG5_ARG_ppMet keyword). |
To call the MMG2D_mmg2dls function, you must also provide a pointer toward a MMG5_pSol structure (that will contain the level-set function and identified by the MMG5_ARG_ppLs keyword).
To call the MMG2D_mmg2dmov library, you must also provide a pointer to a MMG5_pSol structure storing the displacement (and identified by the MMG5_ARG_ppDisp keyword).
Internal function for structures deallocations before return (taking a va_list as argument).
Definition at line 368 of file variadic_2d.c.
int MMG2D_freeLocalPar | ( | MMG5_pMesh | mesh | ) |
Definition at line 691 of file libmmg2d_tools.c.
MMG5_int MMG2D_grad2met_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
MMG5_int | np1, | ||
MMG5_int | np2 | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
pt | pointer to the processed triangle. |
np1 | first edge extremity (global index) |
np2 | second edge extremity (global index) |
Perform simultaneous reduction of metrics at ip1 points and ip2, and truncate characteristic sizes so that the difference between two corresponding sizes respect the maximal gradation.
Ref : https://www.rocq.inria.fr/gamma/Frederic.Alauzet/cours/cea2010_V2.pdf
Definition at line 537 of file anisosiz_2d.c.
int MMG2D_grad2metreq_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
MMG5_int | npmaster, | ||
MMG5_int | npslave | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
pt | pointer to the processed tria. |
npmaster | edge extremity that cannot be modified |
npslave | edge extremity to modify to respect the gradation. |
Perform simultaneous reduction of metrics at npmaster points and npslave, and modify the characteristic size of npslave so that the difference between the two sizes respect the maximal gradation
Ref : https://www.rocq.inria.fr/gamma/Frederic.Alauzet/cours/cea2010_V2.pdf
Definition at line 600 of file anisosiz_2d.c.
int MMG2D_gradsiz_ani | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_gradsizreq_ani | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_hashQuad | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh structure. |
Create full table of adjacency for quadrangles (quad \( <-> \) quad adjacencies and quad \( -> \) tri adjacencies): 1) if the edge \( i1 \) of quad \( k1 \) is adja to quad \( k2 \) through edge \( i2 \), \( adja[4*(k1-1)+1+i1] = 4*k2+i2 \). 2) if the edge \( i1 \) of quad \( k1 \) is adja to tria \( k2 \) through edge \( i2 \), \( adja[4*(k1-1)+1+i1] = -(3*k2+i2) \).
Step 1: Fill adjacendies between quadrangles
Step 2: Fill adjacencies between quadrangles and triangles
Definition at line 151 of file hash_2d.c.
int MMG2D_hashTria | ( | MMG5_pMesh | mesh | ) |
MMG5_int MMG2D_indElt | ( | MMG5_pMesh | mesh, |
MMG5_int | kel | ||
) |
mesh | pointer to the mesh structure. |
kel | index of the element in the unpacked mesh |
find the element index in packed numerotation
Definition at line 46 of file tools_2d.c.
MMG5_int MMG2D_indPt | ( | MMG5_pMesh | mesh, |
MMG5_int | kp | ||
) |
mesh | pointer to the mesh structure. |
kp | index of the point in the unpacked mesh |
find the point index in packed numerotation
Definition at line 70 of file tools_2d.c.
int MMG2D_Init_mesh_var | ( | va_list | argptr | ) |
argptr | list of the mmg structures that must be initialized. Each structure must follow one of the MMG5_ARG* preprocessor variable that allow to identify it. |
argptr contains at least a pointer to a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword)
To call the MMG2D_mmg2dlib function, you must also provide a pointer to a MMG5_pSol structure (that will contain the ouput metric (and the input one, if provided) and identified by the MMG5_ARG_ppMet keyword).
To call the MMG2D_mmg2dls function, you must also provide a pointer toward a MMG5_pSol structure (that will contain the level-set function and identified by the MMG5_ARG_ppLs keyword).
To call the MMG2D_mmg2dmov library, you must also provide a pointer to a MMG5_pSol structure storing the displacement (and identified by the MMG5_ARG_ppDisp keyword).
Internal function for structure allocations (taking a va_list argument).
Definition at line 176 of file variadic_2d.c.
int MMG2D_intmet_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i, | ||
MMG5_int | ip, | ||
double | s | ||
) |
Definition at line 209 of file intmet_2d.c.
int MMG2D_intmet_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | k, | ||
int8_t | i, | ||
MMG5_int | ip, | ||
double | s | ||
) |
MMG5_int MMG2D_isInTriangle | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
double | c[2] | ||
) |
Check whether c lies in triangle k; return k if so, 0 otherwise
Definition at line 69 of file locate_2d.c.
void MMG2D_keep_only1Subdomain | ( | MMG5_pMesh | mesh, |
int | nsd | ||
) |
mesh | pointer to the mesh structure. |
nsd | index of subdomain to keep. |
Keep only subdomain of index nsd and remove other subdomains.
Definition at line 92 of file tools_2d.c.
double MMG2D_lencurv_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | ip1, | ||
MMG5_int | ip2 | ||
) |
double MMG2D_lencurv_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_int | ip1, | ||
MMG5_int | ip2 | ||
) |
Calculate length of a curve in the considered isotropic metric
Definition at line 63 of file length_2d.c.
int MMG2D_locateEdge | ( | MMG5_pMesh | mesh, |
MMG5_int | ia, | ||
MMG5_int | ib, | ||
MMG5_int * | kdep, | ||
MMG5_int * | list | ||
) |
mesh | pointer to the mesh |
ia | index of first extremity of the edge |
ib | index of second extremity of the edge |
kdep | pointer to the index of the first element intersecting the edge |
list | pointer to the list of elts intersected by the edge |
Calculate the list of all the triangles intersected by edge (ia,ib), starting from kdep = one triangle in the ball of ia; list starts at index 0 (and ends at index lon-1). It stores 3*k + iare, where k is an intersected tria and iare is an intersected edge.
prod1, prod2 and prod3 allow to localize the edge regarding the tria:
ia-ib intersect 2 triangle edges => 2 products are <0, 1 is >0
Definition at line 329 of file locate_2d.c.
int MMG2D_memOption | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh structure |
memory repartition for the -m option
Definition at line 237 of file zaldy_2d.c.
int MMG2D_mmg2d1 | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_mmg2d1n | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
int MMG2D_mmg2d2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
int MMG2D_mmg2d6 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
int MMG2D_mmg2d9 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | disp, | ||
MMG5_pSol | met, | ||
MMG5_int ** | invalidTrias | ||
) |
mesh | mesh structure |
disp | displacement structure |
met | metric structure |
invalidTrias | array to store the list of invalid tria if we are unable to move |
Lagrangian node displacement and meshing. Code for options: info.lag >= 0 -> displacement, info.lag > 0 -> displacement+remeshing with swap and moves info.lag > 1 -> displacement+remeshing with split+collapse+swap+move
Definition at line 459 of file mmg2d9.c.
int MMG2D_movedgpt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
MMG5_int * | list, | ||
int8_t | improve | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric structure. |
list | pointer to the ball of the point. |
ilist | size of the ball. |
improve | force the new minimum element quality to be greater or equal than 0.9 of the old minimum element quality. |
Relocate boundary vertex whose ball is passed; routine works both in the isotropic and anisotropic case
Definition at line 53 of file movpt_2d.c.
int MMG2D_movintpt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
MMG5_int * | list, | ||
int8_t | improve | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric structure. |
list | pointer to the ball of the point. |
ilist | size of the ball. |
improve | force the new minimum element quality to be greater or equal than 0.9 of the old minimum element quality. |
Relocate internal vertex whose ball is passed.
Definition at line 213 of file movpt_2d.c.
int MMG2D_movintpt_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
MMG5_int * | list, | ||
int8_t | improve | ||
) |
MMG5_int MMG2D_movtri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | maxit, | ||
int8_t | improve | ||
) |
MMG5_int MMG2D_newElt | ( | MMG5_pMesh | mesh | ) |
MMG5_int MMG2D_newPt | ( | MMG5_pMesh | mesh, |
double | c[2], | ||
uint16_t | tag | ||
) |
int MMG2D_norver | ( | MMG5_pMesh | mesh, |
MMG5_int | ref | ||
) |
mesh | pointer to the mesh structure |
ref | reference of the boundary to analyze (analyze all the boundaries if MMG5_UNSET) |
Calculate normal vectors at vertices of the mesh.
Mark the points that we don't want to analyze
Definition at line 414 of file analys_2d.c.
int MMG2D_outqua | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh structure. |
met | pointer to the metric structure. |
Print histogram of mesh qualities.
Definition at line 183 of file quality_2d.c.
int MMG2D_pack | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
mesh | pointer to the mesh structure. |
sol | pointer to a solution structure. |
met | pointer to a solution structure. |
Pack the mesh and metric and create explicitly all the mesh structures (edges).
Recreate adjacencies if need be
Pack vertex indices
Count the number of edges in the mesh
Count edges stored in triangles
Count edges stored in quadrangles
Pack edges
Pack triangles
Pack quadrangles
Pack solutions (metric map, displacement, ...)
Pack vertices
Reset ppt->tmp field
Reset garbage collector
Definition at line 530 of file hash_2d.c.
int MMG2D_prilen | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
Definition at line 125 of file length_2d.c.
double MMG2D_quickcal | ( | MMG5_pMesh | mesh, |
MMG5_pTria | pt | ||
) |
mesh | pointer to the mesh |
pt | pointer to the tria |
Compute oriented area of tria pt
Definition at line 46 of file quality_2d.c.
int MMG2D_regnor | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh |
Regularize normal vectors at boundary non singular edges with a Laplacian / antilaplacian smoothing
Definition at line 519 of file analys_2d.c.
int MMG2D_regver | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh |
Regularize vertices coordinates at boundary non singular edges with a Laplacian / antilaplacian smoothing
Definition at line 853 of file analys_2d.c.
int MMG2D_savedisp_db | ( | MMG5_pMesh | mesh, |
MMG5_pSol | disp, | ||
char * | filename, | ||
int8_t | pack | ||
) |
Definition at line 1989 of file inout_2d.c.
int MMG2D_savemesh_db | ( | MMG5_pMesh | mesh, |
char * | filename, | ||
int8_t | pack | ||
) |
Definition at line 1781 of file inout_2d.c.
int MMG2D_savemet_db | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
char * | filename, | ||
int8_t | pack | ||
) |
Definition at line 1874 of file inout_2d.c.
int MMG2D_savenor_db | ( | MMG5_pMesh | mesh, |
char * | filename, | ||
int8_t | pack | ||
) |
Definition at line 1934 of file inout_2d.c.
int MMG2D_set_metricAtPointsOnReqEdges | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int8_t | ismet | ||
) |
mesh | pointer to the mesh |
met | pointer to the metric |
ismet | 1 if user provided metric |
Compute the metric at points on required edges as the mean of the lengths of the required eges to which belongs the point. The processeed points are marked with flag 3.
Definition at line 77 of file isosiz_2d.c.
int MMG2D_setadj | ( | MMG5_pMesh | mesh, |
int8_t | init_cc | ||
) |
mesh | pointer to the mesh |
init_cc | 1 if we need to reinitialized cc field of tria because setadj has already been called (isosurf mode) |
Set tags GEO, BDY and REF to triangles and points by traveling the mesh; count number of subdomains or connected components
Step 1: Tags setting from triangles analysis
Step 2: Mark the edges at interface between tria and quads as nosurf and required
Definition at line 50 of file analys_2d.c.
int MMG2D_setMeshSize_alloc | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh structure. |
Allocation of the array fields of the mesh.
Definition at line 256 of file zaldy_2d.c.
int MMG2D_settagtriangles | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
int MMG2D_singul | ( | MMG5_pMesh | mesh, |
MMG5_int | ref | ||
) |
mesh | pointer to the mesh structure |
ref | reference of the boundary to analyze (analyze all the boundaries if MMG5_UNSET) |
Identify singularities in the mesh.
Mark the points that we don't want to analyze
Singularity identification
Definition at line 280 of file analys_2d.c.
int MMG2D_split1 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split 1 edge of triangle k
Definition at line 390 of file split_2d.c.
int MMG2D_split1_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of one edge in triangle k
Definition at line 345 of file split_2d.c.
int MMG2D_split1b | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
int8_t | i, | ||
MMG5_int | ip | ||
) |
\parma mesh pointer to the mesh
k | index of the tria to split |
i | local index of the edge to split |
ip | global index of the new point |
Effective splitting of edge i in tria k: point ip is introduced and the adjacency structure in the mesh is preserved
Definition at line 244 of file split_2d.c.
int MMG2D_split2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split 2 edges of triangle k
Definition at line 505 of file split_2d.c.
int MMG2D_split2_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of two edges in triangle k
Definition at line 456 of file split_2d.c.
int MMG2D_split3 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split the three edges of triangle k
Definition at line 630 of file split_2d.c.
int MMG2D_split3_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
MMG5_int | vx[3] | ||
) |
mesh | pointer to the mesh |
sol | pointer to the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of three edges in triangle k
Definition at line 592 of file split_2d.c.
int MMG2D_splitbar | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
MMG5_int | ip | ||
) |
mesh | pointer to the mesh |
k | index of the tria to split |
ip | global index of the new point |
Insert the point ip inside the tria k
Definition at line 721 of file split_2d.c.
int MMG2D_sum_reqEdgeLengthsAtPoint | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int8_t | i | ||
) |
mesh | pointer to the mesh structure. |
met | pointer to the metric structure. |
pt | tetra to process. |
i | index of the edge of the tetra pt that we process. |
Compute the euclidean length of the edge i of the tria pt, add this length to the metric of the edge extremities and increment the count of times we have processed this extremities.
Definition at line 52 of file isosiz_2d.c.
int MMG2D_swapar | ( | MMG5_pMesh | mesh, |
MMG5_int | k, | ||
int8_t | i | ||
) |
int MMG2D_swapdelone | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_int | k, | ||
int8_t | i, | ||
double | crit, | ||
MMG5_int * | list | ||
) |
Definition at line 39 of file swapar_2d.c.
MMG5_int MMG2D_swpmsh | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_velextLS | ( | MMG5_pMesh | mesh, |
MMG5_pSol | disp | ||
) |
Extension of the displacement at the nodes of edges tagged MMG5_DISPREF
Definition at line 340 of file velextls_2d.c.
int MMG2D_zaldy | ( | MMG5_pMesh | mesh | ) |
mesh | pointer to the mesh structure |
allocate main structure
Definition at line 307 of file zaldy_2d.c.
void MMG5_delEdge | ( | MMG5_pMesh | mesh, |
MMG5_int | iel | ||
) |
int MMG5_interpmet22 | ( | MMG5_pMesh | mesh, |
double * | m, | ||
double * | n, | ||
double | s, | ||
double * | mr | ||
) |
Definition at line 54 of file intmet_2d.c.
size_t MMG5_memSize | ( | void | ) |
int MMG5_mmg2dChkmsh | ( | MMG5_pMesh | mesh, |
int | severe, | ||
MMG5_int | base | ||
) |
mesh | pointer to the mesh structure. |
severe | level of performed check |
base | 1 if we want to test opnbdy edge tags (consistent only after analysis) |
Check the mesh validity
Check adjacency relationships
Check consistency between tags of edges and vertices
Check consistency between edge tags and triangle refs
Check consistency between REF, GEO and BDY tags between edges and points
Checks on vertices
Definition at line 36 of file chkmsh_2d.c.
|
static |
Definition at line 112 of file libmmg2d_private.h.
|
static |
Definition at line 113 of file libmmg2d_private.h.
|
static |
idir[i]: vertices of edge i for a quad
Definition at line 73 of file libmmg2d_private.h.