mmg2d
|
#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 "libmmg2d.h"
#include "libmmgcommon.h"
Go to the source code of this file.
Data Structures | |
struct | squeue |
struct | Bucket |
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_LONMAX 1024 |
#define | MMG2D_BADKAL 0.2 |
#define | MMG2D_NULKAL 1.e-6 |
#define | MMG2D_ANGCORN -1.e-6 |
#define | MMG2D_SHORTMAX 0x7fff |
#define | MMG2D_LPARMAX 200 |
#define | MMG2D_VOLFRAC 1.e-5 |
#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) |
Typedefs | |
typedef struct squeue | Queue |
typedef Queue * | pQueue |
typedef Bucket * | pBucket |
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 More... | |
static const int | MMG2D_iare [3][2] = {{1,2},{2,0},{0,1}} |
static const int | MMG2D_iopp [3][2] = {{1,2},{0,2},{0,1}} |
static const unsigned int | MMG2D_idir [5] = {0,1,2,0,1} |
static const unsigned int | MMG2D_inxt [5] = {1,2,0,1,2} |
double(* | MMG2D_lencurv )(MMG5_pMesh, MMG5_pSol, int, int) |
double(* | MMG2D_caltri )(MMG5_pMesh, MMG5_pSol, MMG5_pTria) |
int(* | MMG2D_optlen )(MMG5_pMesh, MMG5_pSol, double, int) |
int(* | MMG2D_intmet )(MMG5_pMesh, MMG5_pSol, int, int8_t, int, double) |
int(* | MMG2D_gradsiz )(MMG5_pMesh, MMG5_pSol) |
int(* | MMG2D_gradsizreq )(MMG5_pMesh, MMG5_pSol) |
int(* | MMG2D_defsiz )(MMG5_pMesh, MMG5_pSol) |
#define M_LAMBDA 0.34 |
#define M_MAX | ( | a, | |
b | |||
) | (((a) > (b)) ? (a) : (b)) |
#define M_MIN | ( | a, | |
b | |||
) | (((a) < (b)) ? (a) : (b)) |
#define M_MU 0.33 |
#define MMG2D_ALPHA 0.28867513459 |
#define MMG2D_ALPHAD 3.464101615137755 /* 6.0 / sqrt(3.0) */ |
#define MMG2D_ANGCORN -1.e-6 |
#define MMG2D_BADKAL 0.2 |
#define MMG2D_EPSA 1.e-12 |
#define MMG2D_EPSD 1.e-10 |
#define MMG2D_LLONG 2.0 |
#define MMG2D_LONMAX 1024 |
#define MMG2D_LOPTL 1.4 |
#define MMG2D_LOPTS 0.71 |
#define MMG2D_LPARMAX 200 |
#define MMG2D_LSHRT 0.3 |
#define MMG2D_NEDMAX 100000 |
#define MMG2D_NEMAX 100000 |
#define MMG2D_NPMAX 50000 |
#define MMG2D_NULKAL 1.e-6 |
Reallocation of point table and sol table and creation of point ip with coordinates o and tag tag
#define MMG2D_PRECI 1. |
#define MMG2D_RETURN_AND_FREE | ( | mesh, | |
met, | |||
ls, | |||
disp, | |||
val | |||
) |
Free allocated pointers of mesh and sol structure and return value val
#define MMG2D_SHORTMAX 0x7fff |
#define MMG2D_SIZE 0.75 |
#define MMG2D_TRIA_REALLOC | ( | mesh, | |
jel, | |||
wantedGap, | |||
law | |||
) |
Reallocation of tria table and creation of tria jel
#define MMG2D_VOLFRAC 1.e-5 |
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 toward the mesh |
sol | pointer toward the metric |
Anisotropic gradation (h-gradation procedure). See: http://www.ljll.math.upmc.fr/frey/publications/ijnme4398.pdf Skip edges with a required extremity (treated in lissmetreq_ani).
int lissmet_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
double long_ani | ( | double * | ca, |
double * | cb, | ||
double * | ma, | ||
double * | mb | ||
) |
double long_iso | ( | double * | ca, |
double * | cb, | ||
double * | ma, | ||
double * | mb | ||
) |
int MMG2D_2dMeshCheck | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward 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.
int MMG2D_adpcol | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
int MMG2D_adpspl | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward 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
int MMG2D_adptri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
int MMG2D_anaelt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_analys | ( | MMG5_pMesh | mesh | ) |
preprocessing stage: mesh analysis
int MMG2D_anatri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int8_t | typchk | ||
) |
int MMG2D_assignEdge | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh |
Transfer some input edge data to the corresponding triangles fields
int MMG2D_baseBdry | ( | MMG5_pMesh | mesh | ) |
int MMG2D_bdryEdge | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward 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 toward the mesh structure. |
sol | pointer toward the sol structure. |
Check if all edges exist in the mesh and if not force them.
Now treat the missing edges
int MMG2D_bezierCurv | ( | MMG5_pMesh | mesh, |
int | k, | ||
int8_t | i, | ||
double | s, | ||
double * | o, | ||
double * | no | ||
) |
int MMG2D_bouleendp | ( | MMG5_pMesh | mesh, |
int | start, | ||
int8_t | ip, | ||
int * | ip1, | ||
int * | ip2 | ||
) |
mesh | pointer toward 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 and fill ip1 and ip2 with their indices.
int MMG2D_boulen | ( | MMG5_pMesh | mesh, |
int | start, | ||
int8_t | ip, | ||
int * | pleft, | ||
int * | pright, | ||
double * | nn | ||
) |
mesh | pointer toward 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.
int MMG2D_boulep | ( | MMG5_pMesh | mesh, |
int | ifirst, | ||
int | iploc, | ||
int * | list | ||
) |
int MMG2D_boulet | ( | MMG5_pMesh | mesh, |
int | start, | ||
int8_t | ip, | ||
int * | list | ||
) |
mesh | pointer toward the mesh structure. |
start | index of triangle to start. |
ip | index of point for wich we compute the ball. |
list | pointer toward the computed ball of ip. |
Find all triangles sharing ip,
double MMG2D_caltri_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pTria | pt | ||
) |
double MMG2D_caltri_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pTria | pt | ||
) |
int MMG2D_cavity | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | ip, | ||
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
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.
int MMG2D_chkcol | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i, | ||
int * | list, | ||
int8_t | typchk | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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)
int MMG2D_chkedg | ( | MMG5_pMesh | mesh, |
int | k | ||
) |
int MMG2D_chkmanimesh | ( | MMG5_pMesh | mesh | ) |
int MMG2D_chkmsh | ( | MMG5_pMesh | mesh | ) |
int MMG2D_chkor | ( | MMG5_pMesh | mesh | ) |
int MMG2D_chkspl | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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.
int MMG2D_chkswp | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i, | ||
int8_t | typchk | ||
) |
int MMG2D_colelt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_colver | ( | MMG5_pMesh | mesh, |
int | ilist, | ||
int * | list | ||
) |
int MMG2D_colver2 | ( | MMG5_pMesh | mesh, |
int * | list | ||
) |
int MMG2D_colver3 | ( | MMG5_pMesh | mesh, |
int * | list | ||
) |
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 | ||
) |
int MMG2D_cutEdgeTriangle | ( | MMG5_pMesh | mesh, |
int | k, | ||
int | ia, | ||
int | ib | ||
) |
int MMG2D_cuttri_ls | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the level-set |
met | pointer toward a metric (non-mandatory) |
Effective discretization of the 0 level set encoded in sol in the mesh
int MMG2D_defaultmet_2d | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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.
int MMG2D_defmetbdy_2d | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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.
int MMG2D_defsiz_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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
int MMG2D_defsiz_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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
int MMG2D_delElt | ( | MMG5_pMesh | mesh, |
int | iel | ||
) |
int MMG2D_delone | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | ip, | ||
int * | list, | ||
int | ilist | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward 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.
void MMG2D_delPt | ( | MMG5_pMesh | mesh, |
int | ip | ||
) |
int MMG2D_dichoto | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int * | vx | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
k | element index. |
vx | pointer toward table of edges to split. |
Find acceptable position for splitting.
|
inlinestatic |
sigid | signal number. |
Signal handling: specify error messages depending from catched signal.
int MMG2D_findTria | ( | MMG5_pMesh | mesh, |
int | ip | ||
) |
Return the index of one triangle containing ip
int MMG2D_findtrianglestate | ( | MMG5_pMesh | mesh, |
int | k, | ||
int | ip1, | ||
int | ip2, | ||
int | ip3, | ||
int | ip4, | ||
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 toward 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 toward 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 toward 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).
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 toward a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword) and a pointer toward 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).
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 toward a MMG5_pMesh structure (that will contain the mesh and identified by the MMG5_ARG_ppMesh keyword) and a pointer toward 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 toward 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).
int MMG2D_freeLocalPar | ( | MMG5_pMesh | mesh | ) |
int MMG2D_grad2met_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int | np1, | ||
int | np2 | ||
) |
mesh | pointer toward the mesh |
met | pointer toward the metric |
pt | pointer toward 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
int MMG2D_grad2metreq_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int | npmaster, | ||
int | npslave | ||
) |
mesh | pointer toward the mesh |
met | pointer toward the metric |
pt | pointer toward 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
int MMG2D_gradsiz_ani | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_gradsizreq_ani | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_hashQuad | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure. |
Create full table of adjacency for quadrangles (quad
Step 1: Fill adjacendies between quadrangles
Step 2: Fill adjacencies between quadrangles and triangles
int MMG2D_hashTria | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh |
Create adjacency relations between the triangles dein the mesh
int MMG2D_indElt | ( | MMG5_pMesh | mesh, |
int | kel | ||
) |
mesh | pointer toward the mesh structure. |
kel | index of the element in the unpacked mesh |
find the element index in packed numerotation
int MMG2D_indPt | ( | MMG5_pMesh | mesh, |
int | kp | ||
) |
mesh | pointer toward the mesh structure. |
kp | index of the point in the unpacked mesh |
find the point index in packed numerotation
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 toward 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 toward 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 toward 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).
void MMG2D_Init_parameters | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure. |
Initialization of the input parameters (stored in the Info structure).
SUBROUTINE MMG2D_INIT_PARAMETERS(mesh)
MMG5_DATA_PTR_T,INTENT(INOUT) :: mesh
END SUBROUTINE
int MMG2D_intmet_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i, | ||
int | ip, | ||
double | s | ||
) |
int MMG2D_intmet_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | k, | ||
int8_t | i, | ||
int | ip, | ||
double | s | ||
) |
int MMG2D_isInTriangle | ( | MMG5_pMesh | mesh, |
int | k, | ||
double | c[2] | ||
) |
Check whether c lies in triangle k; return k if so, 0 otherwise
int MMG2D_ismaniball | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | start, | ||
int8_t | istart | ||
) |
void MMG2D_keep_only1Subdomain | ( | MMG5_pMesh | mesh, |
int | nsd | ||
) |
mesh | pointer toward the mesh structure. |
nsd | index of subdomain to keep. |
Keep only subdomain of index nsd and remove other subdomains.
int MMG2D_kiudel | ( | pQueue | q, |
int | iel | ||
) |
void MMG2D_kiufree | ( | pQueue | q | ) |
pQueue MMG2D_kiuini | ( | MMG5_pMesh | mesh, |
int | nbel, | ||
double | declic, | ||
int | base | ||
) |
int MMG2D_kiupop | ( | pQueue | q | ) |
int MMG2D_kiuput | ( | pQueue | q, |
int | iel | ||
) |
double MMG2D_lencurv_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ip1, | ||
int | ip2 | ||
) |
double MMG2D_lencurv_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ip1, | ||
int | ip2 | ||
) |
Calculate length of a curve in the considered isotropic metric
int MMG2D_locateEdge | ( | MMG5_pMesh | mesh, |
int | ia, | ||
int | ib, | ||
int * | kdep, | ||
int * | list | ||
) |
mesh | pointer toward the mesh |
ia | index of first extremity of the edge |
ib | index of second extremity of the edge |
kdep | pointer toward the index of the first element intersecting the edge |
list | pointer toward 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
int MMG2D_memOption | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure |
memory repartition for the -m option
int MMG2D_mmg2d1 | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
int MMG2D_mmg2d1n | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
sol | pointer toward the sol structure. |
Mesh adaptation – new version of mmg2d1.c
int MMG2D_mmg2d2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh structure. |
sol | pointer toward the sol structure. |
Mesh triangulation.
int MMG2D_mmg2d6 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
int MMG2D_mmg2d9 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | disp, | ||
MMG5_pSol | met, | ||
int ** | invalidTrias | ||
) |
mesh | mesh structure |
disp | displacement structure |
met | metric structure |
invalidTriax | 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
int MMG2D_movedgpt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
int * | list, | ||
int8_t | improve | ||
) |
mesh | pointer toward the mesh |
met | pointer toward the metric structure. |
list | pointer toward 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
int MMG2D_movintpt | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
int * | list, | ||
int8_t | improve | ||
) |
mesh | pointer toward the mesh |
met | pointer toward the metric structure. |
list | pointer toward 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.
int MMG2D_movintpt_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | ilist, | ||
int * | list, | ||
int8_t | improve | ||
) |
int MMG2D_movtri | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | maxit, | ||
int8_t | improve | ||
) |
int MMG2D_newElt | ( | MMG5_pMesh | mesh | ) |
int MMG2D_newPt | ( | MMG5_pMesh | mesh, |
double | c[2], | ||
int16_t | tag | ||
) |
int MMG2D_norver | ( | MMG5_pMesh | mesh, |
int | ref | ||
) |
mesh | pointer toward 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
int MMG2D_outqua | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
Print histogram of mesh qualities.
int MMG2D_pack | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
sol | pointer toward a solution structure. |
met | pointer toward 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
int MMG2D_parsop | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh |
met | pointer toward the metric |
Read parameter file DEFAULT.mmg2d
int MMG2D_prilen | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
double MMG2D_quickcal | ( | MMG5_pMesh | mesh, |
MMG5_pTria | pt | ||
) |
mesh | pointer toward the mesh |
pt | pointer toward the tria |
Compute oriented area of tria pt
int MMG2D_regnor | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh |
Regularize normal vectors at boundary non singular edges with a Laplacian / antilaplacian smoothing
int MMG2D_resetRef | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh |
Reset MG_ISO vertex and edge references to 0.
int MMG2D_rmc | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the level-set |
Removal of small parasitic components (bubbles of material, etc) with volume less than mesh->info.rmc * volume of the mesh.
int MMG2D_savedisp_db | ( | MMG5_pMesh | mesh, |
MMG5_pSol | disp, | ||
char * | filename, | ||
int8_t | pack | ||
) |
int MMG2D_savemesh_db | ( | MMG5_pMesh | mesh, |
char * | filename, | ||
int8_t | pack | ||
) |
int MMG2D_savemet_db | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
char * | filename, | ||
int8_t | pack | ||
) |
int MMG2D_savenor_db | ( | MMG5_pMesh | mesh, |
char * | filename, | ||
int8_t | pack | ||
) |
int MMG2D_scaleMesh | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward a solution structure. |
sol | pointer toward a solution structure (level-set or displacement). |
Scale the mesh and the size informations between 0 and 1. Compute a default value for the hmin/hmax parameters if needed. Truncate the metric sizes between hmin/hmax
|
inlinestatic |
Set common pointer functions between mmgs and mmg2d to the matching mmg2d functions.
int MMG2D_set_metricAtPointsOnReqEdges | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int8_t | ismet | ||
) |
mesh | pointer toward the mesh |
met | pointer toward 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.
int MMG2D_setadj | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh |
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
int MMG2D_setMeshSize_alloc | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure. |
Allocation of the array fields of the mesh.
int MMG2D_setref_ls | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
int MMG2D_settagtriangles | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
int MMG2D_singul | ( | MMG5_pMesh | mesh, |
int | ref | ||
) |
mesh | pointer toward 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
int MMG2D_snapval | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol | ||
) |
mesh | pointer toward the mesh structure. |
sol | pointer toward the level-set |
Snap values of sol very close to 0 to 0 exactly (to avoid very small triangles in cutting)
void MMG2D_solTruncatureForOptim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the solution structure. |
Truncate the metric computed by the DoSol function by hmax and hmin values (if setted by the user). Set hmin and hmax if they are not setted.
int MMG2D_split1 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split 1 edge of triangle k
int MMG2D_split1_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of one edge in triangle k
int MMG2D_split1b | ( | MMG5_pMesh | mesh, |
int | k, | ||
int8_t | i, | ||
int | ip | ||
) |
\parma mesh pointer toward 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
int MMG2D_split2 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split 2 edges of triangle k
int MMG2D_split2_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of two edges in triangle k
int MMG2D_split3 | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Split the three edges of triangle k
int MMG2D_split3_sim | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | vx[3] | ||
) |
mesh | pointer toward the mesh |
sol | pointer toward the metric |
k | triangle index |
vx | list of new point indices for each edge |
Simulate the split of three edges in triangle k
int MMG2D_splitbar | ( | MMG5_pMesh | mesh, |
int | k, | ||
int | ip | ||
) |
mesh | pointer toward the mesh |
k | index of the tria to split |
ip | global index of the new point |
Insert the point ip inside the tria k
int MMG2D_sum_reqEdgeLengthsAtPoint | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int8_t | i | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward 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.
int MMG2D_swapar | ( | MMG5_pMesh | mesh, |
int | k, | ||
int8_t | i | ||
) |
int MMG2D_swapdelone | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int8_t | i, | ||
double | crit, | ||
int * | list | ||
) |
int MMG2D_swpmsh | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int | typchk | ||
) |
int MMG2D_unscaleMesh | ( | MMG5_pMesh | , |
MMG5_pSol | , | ||
MMG5_pSol | |||
) |
int MMG2D_velextLS | ( | MMG5_pMesh | , |
MMG5_pSol | |||
) |
double MMG2D_vfrac | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
int | k, | ||
int | pm | ||
) |
mesh | pointer toward the mesh structure |
sol | pointer toward the ls function |
k | index of the triangle |
Calculate the area of the positive (if pm == 1) or negative (if pm == -1) subdomain inside triangle k defined by the ls function in sol
|
inline |
mesh | pointer toward the mesh structure. |
ip0 | First vertex of the triangle |
ip1 | Second vertex of the triangle |
ip2 | Third vertex of the triangle |
Calculate the area of a triangle given by its vertices
int MMG2D_zaldy | ( | MMG5_pMesh | mesh | ) |
mesh | pointer toward the mesh structure |
allocate main structure
void MMG5_delEdge | ( | MMG5_pMesh | mesh, |
int | iel | ||
) |
int MMG5_getnElt | ( | MMG5_pMesh | mesh, |
int | n | ||
) |
int MMG5_interpmet22 | ( | MMG5_pMesh | mesh, |
double * | m, | ||
double * | n, | ||
double | s, | ||
double * | mr | ||
) |
size_t MMG5_memSize | ( | void | ) |
Compute the available memory size of the computer.
int MMG5_mmg2dChkmsh | ( | MMG5_pMesh | mesh, |
int | severe, | ||
int | base | ||
) |
mesh | pointer toward the mesh structure. |
severe | level of performed check |
base | unused argument. |
Check the mesh validity
int optlen_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
double | declic, | ||
int | base | ||
) |
int optlen_iso | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
double | declic, | ||
int | base | ||
) |
int optlen_iso_bar | ( | MMG5_pMesh | mesh, |
MMG5_pSol | sol, | ||
double | declic, | ||
int | base | ||
) |
|
extern |
|
extern |
|
extern |
|
extern |
|
static |
|
static |
|
static |
idir[i]: vertices of edge i for a quad
|
extern |
|
static |
|
static |
|
extern |
|
extern |