mmg3d
|
Fonctions for anisotropic size map computation. More...
#include "mmgcommon.h"
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) |
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) |
Fonctions for anisotropic size map computation.
int MMG5_compute_meanMetricAtMarkedPoints_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
Compute the mean metric at mesh points with a non-nul s field. At the beginning, for a given point 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.
void MMG5_defUninitSize | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
Search for points with unintialized metric and define anisotropic size at this points.
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] | ||
) |
k | index of the tetrahedra from which we come. |
p0 | pointer toward the point on which we want to def the metric. |
i0 | pointer toward the local index of the point in tria. |
b | control polygon of triangle. |
r | rotation matrix. |
c | physical coordinates of the curve edge mid-point. |
lispoi | list of incident vertices to p0 |
tAA | matrix to fill |
tAb | second member |
Fill matrice \sum tAA and second member \sum tAb with and
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.
int MMG5_grad2metSurf | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int | np1, | ||
int | np2 | ||
) |
mesh | pointer toward the mesh. |
met | pointer toward the metric structure. |
pt | pointer toward a triangle. |
np1 | global index of the first extremity of the edge. |
np2 | global index of the second extremity of the edge. |
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.
int MMG5_grad2metSurfreq | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | pt, | ||
int | npmaster, | ||
int | npslave | ||
) |
mesh | pointer toward the mesh. |
met | pointer toward the metric structure. |
pt | pointer toward the processed triangle. |
npmaster | edge extremity that cannot be modified |
npslave | edge extremity to modify to respect the gradation. |
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.
void MMG5_gradEigenvreq | ( | double * | dm, |
double * | dn, | ||
double | difsiz, | ||
int8_t | dir, | ||
int8_t * | ier | ||
) |
dm | eigenvalues of the first matrix (not modified) |
dn | eigenvalues of the second matrix (modified) |
difsiz | maximal size gap authorized by the gradation. |
dir | direction in which the sizes are graded. |
ier | 2 if dn has been updated, 0 otherwise. |
Gradation of size dn = 1/sqrt(eigenv of the tensor) for required points in the idir direction.
int MMG5_gradsiz_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
int * | it | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
it | number of performed iteration (to fill) |
Standard gradation procedure.
Mark the edges belonging to a required entity
int MMG5_gradsizreq_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
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)
double MMG5_ridSizeInNormalDir | ( | MMG5_pMesh | mesh, |
int | i0, | ||
double * | bcu, | ||
MMG5_Bezier * | b, | ||
double | isqhmin, | ||
double | isqhmax | ||
) |
mesh | pointer toward the mesh structure. |
i0 | local index in the face of the point on which we want to compute the metric |
bcu | pointer toward the barycentric coordinates of vector u in the looked face. |
b | bezier control polygon for the looked face. |
isqhmin | minimum edge size. |
isqhmax | maximum edge size. |
Compute the specific size of a ridge in the direction of the normal of the looked face.
double MMG5_ridSizeInTangentDir | ( | MMG5_pMesh | mesh, |
MMG5_pPoint | p0, | ||
int | idp, | ||
int * | iprid, | ||
double | isqhmin, | ||
double | isqhmax | ||
) |
mesh | pointer toward the mesh structure. |
p0 | pointer toward the point at which we define the metric. |
idp | global index of the point at which we define the metric. |
iprid | pointer toward the two extremities of the ridge. |
isqhmin | minimum edge size. |
isqhmax | maximum edge size. |
Compute the specific size of a ridge in the direction of the tangent of the ridge.
int MMG5_simred | ( | MMG5_pMesh | mesh, |
double * | m, | ||
double * | n, | ||
double | dm[2], | ||
double | dn[2], | ||
double | vp[2][2] | ||
) |
mesh | pointer toward the mesh |
m | first matrix |
n | second matrix |
dm | eigenvalues of m in the coreduction basis (to fill) |
dn | eigenvalues of n in the coreduction basis (to fill) |
vp | coreduction basis (to fill) |
Perform simultaneous reduction of matrices m and n.
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 | ||
) |
mesh | pointer toward the mesh structure. |
p0 | pointer toward the point on which we want to define the metric. |
ipref | table containing the indices of the edge extremities. |
r | pointer toward the rotation matrix. |
c | physical coordinates of the curve edge mid-point. |
tAA | matrix of the system to solve. |
tAb | second member. |
m | pointer toward the metric. |
isqhmax | maximum size for edge. |
isqhmin | minimum size for edge. |
hausd | hausdorff value at point. |
Solve tAA * tmp_m = tAb and fill m with tmp_m (after rotation) for a ref point.
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 | ||
) |
mesh | pointer toward the mesh structure. |
r | pointer toward the rotation matrix. |
c | physical coordinates of the curve edge mid-point. |
tAA | matrix of the system to solve. |
tAb | second member. |
m | pointer toward the metric. |
isqhmax | maximum size for edge. |
isqhmin | minimum size for edge. |
hausd | hausdorff value at point. |
Solve tAA * tmp_m = tAb and fill m with tmp_m (after rotation) for a regular point.
|
inlinestatic |
mesh | pointer toward the mesh structure. |
m | pointer toward the metric at triangle vertices. |
ptt | pointer toward the triangle structure. |
Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric m.
double MMG5_surftri33_ani | ( | MMG5_pMesh | mesh, |
MMG5_pTria | ptt, | ||
double | ma[6], | ||
double | mb[6], | ||
double | mc[6] | ||
) |
mesh | pointer toward the mesh structure. |
ptt | pointer toward the triangle structure. |
ma | metric at triangle vertex. |
mb | metric at triangle vertex. |
mc | metric at triangle vertex. |
Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric met (for classic storage of ridges metrics).
double MMG5_surftri_ani | ( | MMG5_pMesh | mesh, |
MMG5_pSol | met, | ||
MMG5_pTria | ptt | ||
) |
mesh | pointer toward the mesh structure. |
met | pointer toward the metric structure. |
ptt | pointer toward the triangle structure. |
Compute the double of the area of the surface triangle ptt with respect to the anisotropic metric met (for special storage of ridges metrics).
int MMG5_updatemetreq_ani | ( | double * | n, |
double | dn[2], | ||
double | vp[2][2] | ||
) |
n | matrix to update |
dn | eigenvalues of n in the coreduction basis |
vp | coreduction basis |
Update of the metric n = tP^-1 diag(dn0,dn1)P^-1, P = (vp[0], vp[1]) stored in columns