mmg3d
anisosiz.c File Reference

Fonctions for anisotropic size map computation. More...

#include "mmgcommon.h"
Include dependency graph for anisosiz.c:

Functions

static double MMG5_surf (MMG5_pMesh mesh, double m[3][6], MMG5_pTria ptt)
 
double MMG5_surftri_ani (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria ptt)
 
double MMG5_surftri33_ani (MMG5_pMesh mesh, MMG5_pTria ptt, double ma[6], double mb[6], double mc[6])
 
void MMG5_defUninitSize (MMG5_pMesh mesh, MMG5_pSol met, int8_t ismet)
 
void MMG5_fillDefmetregSys (int k, MMG5_pPoint p0, int i0, MMG5_Bezier b, double r[3][3], double c[3], double *lispoi, double tAA[6], double tAb[3])
 
int MMG5_solveDefmetregSys (MMG5_pMesh mesh, double r[3][3], double c[3], double tAA[6], double tAb[3], double *m, double isqhmin, double isqhmax, double hausd)
 
int MMG5_solveDefmetrefSys (MMG5_pMesh mesh, MMG5_pPoint p0, int ipref[2], double r[3][3], double c[3], double tAA[6], double tAb[3], double *m, double isqhmin, double isqhmax, double hausd)
 
double MMG5_ridSizeInTangentDir (MMG5_pMesh mesh, MMG5_pPoint p0, int idp, int *iprid, double isqhmin, double isqhmax)
 
double MMG5_ridSizeInNormalDir (MMG5_pMesh mesh, int i0, double *bcu, MMG5_Bezier *b, double isqhmin, double isqhmax)
 
int MMG5_grad2metSurf (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt, int np1, int np2)
 
int MMG5_simred (MMG5_pMesh mesh, double *m, double *n, double dm[2], double dn[2], double vp[2][2])
 
void MMG5_gradEigenvreq (double *dm, double *dn, double difsiz, int8_t dir, int8_t *ier)
 
int MMG5_updatemetreq_ani (double *n, double dn[2], double vp[2][2])
 
int MMG5_grad2metSurfreq (MMG5_pMesh mesh, MMG5_pSol met, MMG5_pTria pt, int npmaster, int npslave)
 
int MMG5_compute_meanMetricAtMarkedPoints_ani (MMG5_pMesh mesh, MMG5_pSol met)
 
int MMG5_gradsiz_ani (MMG5_pMesh mesh, MMG5_pSol met, int *it)
 
int MMG5_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

Function Documentation

◆ MMG5_compute_meanMetricAtMarkedPoints_ani()

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

Compute the mean metric at mesh points with a non-nul s field. At the beginning, for a given point ip, $ met->m[met->size * ip] $ contains the sum of n metrics and the s field of ip contains the number of metrics summed in the point. Set the flag of the processed points to 3.

Here is the caller graph for this function:

◆ MMG5_defUninitSize()

void MMG5_defUninitSize ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int8_t  ismet 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
ismet1 if user provided metric.

Search for points with unintialized metric and define anisotropic size at this points.

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

◆ MMG5_fillDefmetregSys()

void MMG5_fillDefmetregSys ( int  k,
MMG5_pPoint  p0,
int  i0,
MMG5_Bezier  b,
double  r[3][3],
double  c[3],
double *  lispoi,
double  tAA[6],
double  tAb[3] 
)
Parameters
kindex of the tetrahedra from which we come.
p0pointer toward the point on which we want to def the metric.
i0pointer toward the local index of the point in tria.
bcontrol polygon of triangle.
rrotation matrix.
cphysical coordinates of the curve edge mid-point.
lispoilist of incident vertices to p0
tAAmatrix to fill
tAbsecond member

Fill matrice \sum tAA and second member \sum tAb with $ A=( X_{P_i}^2
Y_{P_i}^2 X_{P_i}Y_{P_i}) $ and $ b= Z_{P_i}$ with P_i the physical points at edge [i0;i1] extremities and middle. Compute the physical coor c of the curve edge's mid-point for a regular or reference point.

Here is the caller graph for this function:

◆ MMG5_grad2metSurf()

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

Enforces gradation of metric in one extremity of edge $f[ np1; np2]$f in tria pt with respect to the other, along the direction of the associated support curve first, then along the normal direction.

Warning
The gradation along the direction normal to the surface is made in an "isotropic way".
Remarks
ALGIANE: a mettre à plat : dans le cas d'une métrique très aniso avec la grande taille quasiment dans la direction de l'arête on se retrouve à modifier la grande taille uniquement (car proche de l'arête) sauf que cette modification n'a quasi pas d'influence sur le calcul de la longueur d'arête.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_grad2metSurfreq()

int MMG5_grad2metSurfreq ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG5_pTria  pt,
int  npmaster,
int  npslave 
)
Parameters
meshpointer toward the mesh.
metpointer toward the metric structure.
ptpointer toward the processed triangle.
npmasteredge extremity that cannot be modified
npslaveedge extremity to modify to respect the gradation.
Returns
0 if no gradation is needed, 1 otherwise.

Enforces gradation of metric of the extremity ±a npslave of edge $f[ npmaster; npslave]$f in tria pt with respect to the other, along the direction of the associated support curve first, then along the normal direction.

Warning
The gradation along the direction normal to the surface is made in an "isotropic way".
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MMG5_gradEigenvreq()

void MMG5_gradEigenvreq ( double *  dm,
double *  dn,
double  difsiz,
int8_t  dir,
int8_t *  ier 
)
Parameters
dmeigenvalues of the first matrix (not modified)
dneigenvalues of the second matrix (modified)
difsizmaximal size gap authorized by the gradation.
dirdirection in which the sizes are graded.
ier2 if dn has been updated, 0 otherwise.

Gradation of size dn = 1/sqrt(eigenv of the tensor) for required points in the idir direction.

Here is the caller graph for this function:

◆ MMG5_gradsiz_ani()

int MMG5_gradsiz_ani ( MMG5_pMesh  mesh,
MMG5_pSol  met,
int *  it 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
itnumber of performed iteration (to fill)
Returns
nup, the number of points updated.

Standard gradation procedure.

Mark the edges belonging to a required entity

Here is the call graph for this function:

◆ MMG5_gradsizreq_ani()

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

Enforces mesh gradation (on required entities) by truncating metric field.

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

Here is the call graph for this function:

◆ MMG5_ridSizeInNormalDir()

double MMG5_ridSizeInNormalDir ( MMG5_pMesh  mesh,
int  i0,
double *  bcu,
MMG5_Bezier b,
double  isqhmin,
double  isqhmax 
)
Parameters
meshpointer toward the mesh structure.
i0local index in the face of the point on which we want to compute the metric
bcupointer toward the barycentric coordinates of vector u in the looked face.
bbezier control polygon for the looked face.
isqhminminimum edge size.
isqhmaxmaximum edge size.
Returns
the computed ridge size in first or second normal direction (depending of i0).

Compute the specific size of a ridge in the direction of the normal of the looked face.

Here is the caller graph for this function:

◆ MMG5_ridSizeInTangentDir()

double MMG5_ridSizeInTangentDir ( MMG5_pMesh  mesh,
MMG5_pPoint  p0,
int  idp,
int *  iprid,
double  isqhmin,
double  isqhmax 
)
Parameters
meshpointer toward the mesh structure.
p0pointer toward the point at which we define the metric.
idpglobal index of the point at which we define the metric.
ipridpointer toward the two extremities of the ridge.
isqhminminimum edge size.
isqhmaxmaximum edge size.
Returns
the computed ridge size in the tangent direction.

Compute the specific size of a ridge in the direction of the tangent of the ridge.

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

◆ MMG5_simred()

int MMG5_simred ( MMG5_pMesh  mesh,
double *  m,
double *  n,
double  dm[2],
double  dn[2],
double  vp[2][2] 
)
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:

◆ MMG5_solveDefmetrefSys()

int MMG5_solveDefmetrefSys ( MMG5_pMesh  mesh,
MMG5_pPoint  p0,
int  ipref[2],
double  r[3][3],
double  c[3],
double  tAA[6],
double  tAb[3],
double *  m,
double  isqhmin,
double  isqhmax,
double  hausd 
)
Parameters
meshpointer toward the mesh structure.
p0pointer toward the point on which we want to define the metric.
ipreftable containing the indices of the edge extremities.
rpointer toward the rotation matrix.
cphysical coordinates of the curve edge mid-point.
tAAmatrix of the system to solve.
tAbsecond member.
mpointer toward the metric.
isqhmaxmaximum size for edge.
isqhminminimum size for edge.
hausdhausdorff value at point.
Returns
1 if success, 0 if fail.

Solve tAA * tmp_m = tAb and fill m with tmp_m (after rotation) for a ref point.

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

◆ MMG5_solveDefmetregSys()

int MMG5_solveDefmetregSys ( MMG5_pMesh  mesh,
double  r[3][3],
double  c[3],
double  tAA[6],
double  tAb[3],
double *  m,
double  isqhmin,
double  isqhmax,
double  hausd 
)
Parameters
meshpointer toward the mesh structure.
rpointer toward the rotation matrix.
cphysical coordinates of the curve edge mid-point.
tAAmatrix of the system to solve.
tAbsecond member.
mpointer toward the metric.
isqhmaxmaximum size for edge.
isqhminminimum size for edge.
hausdhausdorff value at point.
Returns
1 if success, 0 if fail.

Solve tAA * tmp_m = tAb and fill m with tmp_m (after rotation) for a regular point.

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

◆ MMG5_surf()

static double MMG5_surf ( MMG5_pMesh  mesh,
double  m[3][6],
MMG5_pTria  ptt 
)
inlinestatic
Parameters
meshpointer toward the mesh structure.
mpointer toward the metric at triangle vertices.
pttpointer toward the triangle structure.
Returns
The double of the triangle area.

Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric m.

Here is the caller graph for this function:

◆ MMG5_surftri33_ani()

double MMG5_surftri33_ani ( MMG5_pMesh  mesh,
MMG5_pTria  ptt,
double  ma[6],
double  mb[6],
double  mc[6] 
)
Parameters
meshpointer toward the mesh structure.
pttpointer toward the triangle structure.
mametric at triangle vertex.
mbmetric at triangle vertex.
mcmetric at triangle vertex.
Returns
The double of the triangle area.

Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric met (for classic storage of ridges metrics).

Here is the caller graph for this function:

◆ MMG5_surftri_ani()

double MMG5_surftri_ani ( MMG5_pMesh  mesh,
MMG5_pSol  met,
MMG5_pTria  ptt 
)
Parameters
meshpointer toward the mesh structure.
metpointer toward the metric structure.
pttpointer toward the triangle structure.
Returns
The double of the triangle area.

Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric met (for special storage of ridges metrics).

Here is the call graph for this function:

◆ MMG5_updatemetreq_ani()

int MMG5_updatemetreq_ani ( double *  n,
double  dn[2],
double  vp[2][2] 
)
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)P^-1, P = (vp[0], vp[1]) stored in columns

Here is the caller graph for this function: