mmg3d
anisosiz_3d.c File Reference

Fonctions for anisotropic size map computation. More...

Include dependency graph for anisosiz_3d.c:

Functions

int MMG3D_chk4ridVertices (MMG5_pMesh mesh, MMG5_pTetra pt)
 
int MMG5_moymet (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt, double *m1)
 
static int MMG5_defmetsin (MMG5_pMesh mesh, MMG5_pSol met, int kel, int iface, int ip)
 
static int MMG5_defmetrid (MMG5_pMesh mesh, MMG5_pSol met, int kel, int iface, int ip)
 
static int MMG5_defmetref (MMG5_pMesh mesh, MMG5_pSol met, int kel, int iface, int ip)
 
static int MMG5_defmetreg (MMG5_pMesh mesh, MMG5_pSol met, int kel, int iface, int ip)
 
static int MMG5_defmetvol (MMG5_pMesh mesh, MMG5_pSol met)
 
static int MMG3D_intextmet (MMG5_pMesh mesh, MMG5_pSol met, int np, double me[6])
 
int MMG3D_defsiz_ani (MMG5_pMesh mesh, MMG5_pSol met)
 
static int MMG5_grad2metVol (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt, int np1, int np2)
 
static int MMG3D_simred (MMG5_pMesh mesh, double *m, double *n, double dm[3], double dn[3], double vp[3][3])
 
int MMG3D_updatemetreq_ani (double *n, double dn[3], double vp[3][3])
 
static int MMG5_grad2metVolreq (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTetra pt, int npmaster, int npslave)
 
int MMG3D_gradsiz_ani (MMG5_pMesh mesh, MMG5_pSol met)
 
int MMG3D_gradsizreq_ani (MMG5_pMesh mesh, MMG5_pSol met)
 

Detailed Description

Fonctions for anisotropic size map computation.

Author
Charles Dapogny (UPMC)
Cécile Dobrzynski (Bx INP/Inria/UBordeaux)
Pascal Frey (UPMC)
Algiane Froehly (Inria/UBordeaux)
Version
5
Todo:
doxygen documentation.

Function Documentation

◆ MMG3D_chk4ridVertices()

int MMG3D_chk4ridVertices ( MMG5_pMesh  mesh,
MMG5_pTetra  pt 
)

◆ MMG3D_defsiz_ani()

int MMG3D_defsiz_ani ( MMG5_pMesh  mesh,
MMG5_pSol  met 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric stucture.
Returns
0 if fail, 1 otherwise.

Define size at points by intersecting the surfacic metric and the physical metric.

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

Here is the call graph for this function:

◆ MMG3D_gradsiz_ani()

int MMG3D_gradsiz_ani ( MMG5_pMesh  mesh,
MMG5_pSol  met 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
Returns
1

Enforces mesh gradation by truncating metric field.

Mark the edges belonging to a required entity

Here is the call graph for this function:

◆ MMG3D_gradsizreq_ani()

int MMG3D_gradsizreq_ani ( MMG5_pMesh  mesh,
MMG5_pSol  met 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
Returns
0 if fail, 1 otherwise.

Enforce mesh gradation by truncating size map.

Mark the edges belonging to a required entity (already done if the classic gradation is enabled)

Here is the call graph for this function:

◆ MMG3D_intextmet()

static int MMG3D_intextmet ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int  np,
double  me[6] 
)
inlinestatic
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
npglobal index of vertex in which we intersect the metrics.
mephysical metric at point np.
Returns
0 if fail, 1 otherwise.

Intersect the surface metric held in np (supported in tangent plane of np) with 3*3 physical metric in me. For ridge points, this function fill the $ p_0->m[3]$ and $ p_0->m[4]$ fields that contains respectively the specific sizes in the $n_1$ and $n_2$ directions.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_simred()

static int MMG3D_simred ( MMG5_pMesh  mesh,
double *  m,
double *  n,
double  dm[3],
double  dn[3],
double  vp[3][3] 
)
inlinestatic
Parameters
meshpointer toward the mesh
mfirst matrix
nsecond matrix
dmeigenvalues of m in the coreduction basis (to fill)
dneigenvalues of n in the coreduction basis (to fill)
vpcoreduction basis (to fill)
Returns
0 if fail 1 otherwise.

Perform simultaneous reduction of matrices m and n.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG3D_updatemetreq_ani()

int MMG3D_updatemetreq_ani ( double *  n,
double  dn[3],
double  vp[3][3] 
)
Parameters
nmatrix to update
dneigenvalues of n in the coreduction basis
vpcoreduction basis
Returns
0 if fail, 1 otherwise

Update of the metric n = tP^-1 diag(dn0,dn1,dn2)P^-1, P = (vp[0],vp[1],vp[2]) stored in columns

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_defmetref()

static int MMG5_defmetref ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int  kel,
int  iface,
int  ip 
)
static
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
kelindex of the triangle in which we work.
ifaceface of the tetra on which we work.
ipindex of the point on which we want to compute the metric (in tetra kel).
Returns
1 if success, 0 otherwise.

Define metric map at a REF vertex of the mesh, associated to the geometric approx of the surface.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_defmetreg()

static int MMG5_defmetreg ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int  kel,
int  iface,
int  ip 
)
static
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
kelindex of the triangle in which we work.
ifaceworking face.
ipindex of the point on which we want to compute the metric in (tetra kel).
Returns
1 if success, 0 otherwise.

Define metric map at a REGULAR vertex of the mesh, associated to the geometric approx of the surface.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_defmetrid()

static int MMG5_defmetrid ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int  kel,
int  iface,
int  ip 
)
static
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
kelindex of the tetra in which we work.
ifaceface of the tetra on which we work.
ipindex of the point on which we want to compute the metric (in tetra kel).
Returns
1 if success, 0 otherwise.

Compute metric tensor associated to a ridge point : convention is a bit weird here : p->m[0] is the specific size in direction t, p->m[1] is the specific size in direction $ u_1 = n_1^t$ p->m[2] is the specific size in direction $ u_2 = n_2^t$, and at each time, metric tensor has to be recomputed, depending on the side.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_defmetsin()

static int MMG5_defmetsin ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int  kel,
int  iface,
int  ip 
)
static
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
kelindex of the tetra in which we work.
ifaceface of the tetra on which we work.
ipindex of the point on which we want to compute the metric (in tetra kel).
Returns
1 if success, 0 otherwise.

Define metric map at a SINGULARITY of the geometry, associated to the geometric approx of the surface. metric $=\alpha*Id$, $\alpha =$ size.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_defmetvol()

static int MMG5_defmetvol ( MMG5_pMesh  mesh,
MMG5_pSol  met 
)
inlinestatic
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
Returns
1 if success, 0 otherwise.

Define metric map at a non-boundary vertex of the mesh. Allocate the metric if needed. Truncate the metric at the hmin/hmax values.

  1. no metric is provided: Set isotropic hmax size at the vertex

First step: search for local parameters

Second step: set metric

  1. A metric is provided: truncate it by hmax/hmin

First step: search for local parameters

Second step: set metric

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_grad2metVol()

static int MMG5_grad2metVol ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG5_pTetra  pt,
int  np1,
int  np2 
)
inlinestatic
Parameters
meshpointer toward the mesh.
metpointer toward the metric structure.
ptpointer toward a tetra.
np1global index of the first edge extremity.
np2global index of the second edge extremity.
Returns
-1 if no gradation is needed, else index of graded point.

Enforces gradation of metric in one extremity of edge ia in tetra pt with respect to the other.

Here is the call graph for this function:

◆ MMG5_grad2metVolreq()

static int MMG5_grad2metVolreq ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG5_pTetra  pt,
int  npmaster,
int  npslave 
)
inlinestatic
Parameters
meshpointer toward the mesh.
metpointer toward the metric structure.
ptpointer toward a tetra.
npmasteredge extremity that cannot be modified
npslaveedge extremity to modify to respect the gradation.
Returns
1 if the graddation succeed, 0 otherwise

Enforces gradation of metric from required entity toward other using the simultaneous reduction technique (note that as the gradation is propagated, we can be on an edge without a required extremity).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_moymet()

int MMG5_moymet ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG5_pTetra  pt,
double *  m1 
)
inline
Parameters
meshpointer toward the mesh structure.
metpointer toward the sol structure.
ptpointer toward a tetra.
m1computed metric.
Returns
the number of vertices used for the mean computation, 0 if fail.

Compute mean metric over the internal tetra pt. Do not take into account the metric values at ridges points (because we don't know how to build it).