3d metrics tools: mshmetand
3d meshing tools: mmg3d and freeyams
J. Morice 1, C. Drobrzynski 2 and P. Frey1
1 Universite Pierre et Marie Curie and 2 University of Bordeaux I.
supported by ANR FF2A3
freefem++ day 1& 2 sept 2010
– p.1/15
Outline
RemarkImportant input parameter of mmg3d and freeyams is a metric
Definition of a metric
Function to compute a metric :mshmet (P. Frey)
3d Meshing tools :mmg3d (C. Drobrzynski and P. Frey)freeyams (P. Frey)
freefem++ day 1& 2 sept 2010
– p.2/15
mshmet
developped by P. Frey
Computation of metric based on function variations (Hessian)
function = solution, error of a solution
isotropic or anisotropic metric
load "mshmet" // need to load library mshmetfespace Vh(Th,P1);Vh u;real[int] M = mshmet(Th,u);
freefem++ day 1& 2 sept 2010
– p.3/15
mshmet:parameter
loptions= integer parameters : int[7]loptions(0): normalization level (default 0).loptions(1): 1 : isotropics mode (default)
0 : anistropics modeloptions(2): level set metric mode (default 0).loptions(3): debug mode(default 0).loptions(4): verbosity (default 10).loptions(5): number of regularization’s iteration of solutions given (default 0).loptions(6): use previous metric mode (default: 0.)
doptions= real parameters : real[4]doptions(0): hmin (default 0.01).doptions(1): hmax (default 1.0).doptions(2): tolerance parameters (default 0.01).doptions(2): relative width for Level Set (0 < w < 1) ( default 0.05).
metric= initial metric
freefem++ day 1& 2 sept 2010
– p.4/15
mmg3d
Execute mmg.pdf
freefem++ day 1& 2 sept 2010
– p.5/15
mmg3d : first examplemmg3d: precompiled library in freefem++ website (not yet licenced)Future: mmg3d downloaded automatically by freefem++
keywords: mmg3d
first example
load "msh3"load "mmg3d" //need to load the library mmg3d...mesh3 Th= . . .
// definition of an isotropic metric ≃ mesh size near verticesreal[int] isometric(Th.nv); {for( int ii=0; ii<Th.nv; ii++)isometric[ii]=0.17;}mesh3 Th3=mmg3d( Th, memory=100, metric=isometric);// memory : maximum memory size for the new mesh in Mbytes// metric : the metric given at mmg3d (real[int] )
freefem++ day 1& 2 sept 2010
– p.6/15
mmg3d: parameter
options= option parameters of mmg3d ( int[6] )options(0) optimization parameters : (default 1)
0 : mesh optimization.1 : adaptation with metric (deletion and insertion vertices) and optimization.-1: adaptation with metric (deletion and insertion vertices) without optimization.4 : split tetrahedrons (be careful modify the surface).9 : moving mesh with optimization.-9: moving mesh without optimization.
options(1) debug modeoptions(2) specify the size of bucket per dimension (default 64)options(3) swapping mode (no edge or face flipping.)options(4) no insert points modeoptions(5) verbosity level (default 3)
memory= set the maximum memory size of new mesh in Mbytes (default 100 Mo).
metric= this vector contains the metric given at mmg3d.
displacement= set the vector displacement at each vertices.
displVect= set the vector displacement at each vertices in a vector.
freefem++ day 1& 2 sept 2010
– p.7/15
mmg3d: moving example
load "msh3"load "medit"load "mmg3d"
mesh3 Th=readmesh3("fallingspheres.mesh");
real[int] vit(3); // displacement of the sphere = velocity*dtvit[0] = 0., vit[1] = 0., vit[2] = -0.3;func zero = 0.;func dep = vit[2];
fespace Vh(Th,P1);macro Grad(u) [dx(u),dy(u),dz(u)] //Vh uh,vh;
// PDE of displacemet in the z directionproblem Lap(uh,vh) = int3d(Th)(Grad(uh)’*Grad(vh))+ on(310,300,uh=dep) + on(311,uh=0.);
freefem++ day 1& 2 sept 2010
– p.8/15
mmg3d: moving exampleint[int] opt=[9,0,64,0,0,3]; // moving with optimizationfor(int it=0; it<29; it++){
cout«" ITERATION "«it«endl;Lap;Th=mmg3d(Th,options=opt,displacement=[zero,zero,uh]);savemesh(Th,"out-"+it+".mesh");
}
initial mesh final mesh
freefem++ day 1& 2 sept 2010
– p.9/15
overview freeyamsfreeyams developed by P. Frey
technical report http://www.ann.jussieu.fr/~frey/software.html
smoothing surface
freefem++ day 1& 2 sept 2010
– p.10/15
overview freeyamsdecimation of mesh : obtain hierarchical meshes
freefem++ day 1& 2 sept 2010
– p.11/15
overview freeyams
complex meshes
freefem++ day 1& 2 sept 2010
– p.12/15
freeyams : simple example
keyword: freeyams
simple example
load "msh3"load "medit"load "freeyams" // need to load freeyams library
mesh3 Th3 = . . . ; // Th3 volumic/surface mesh
mesh3 ThSurf = freeyams(Th); // ThSurf is a surface mesh
freefem++ day 1& 2 sept 2010
– p.13/15
freeyams : parameter
loptions= integer parameters (int[13])loptions(0): anisotropic mode.loptions(1): FE correction parameter ≃ mesh suitable for FE.loptions(3): maximum memory in Mbytes.loptions(6): create point on straight edge (no mapping) mode (default 0).loptions(7): validity check during smoothing mode (only with loptions(12)=9)loptions(10): ridge detection mode (default 0) (ridge definition doptions(10)).loptions(11): vertex smoothing mode (default 0).loptions(12): Optimization level parameter (default 0).
0 : mesh optimization (smoothing+swapping)1 : decimation+enrichment adaptated to a metric map.-1: decimation adaptated to a metric map.2 : decimation+enrichment with a Hausdorff-like method-2: decimation with a Hausdorff-like method4 : split triangles recursively.9 : No-Shrinkage Vertex Smoothing (avoid important decrease of the volume)
freefem++ day 1& 2 sept 2010
– p.14/15
freeyams : parameter
doptions= real parameter : real[11].doptions(0): Tangent plane deviation (default 0.01).doptions(3): Set the gradation value (Mesh density control) (default 1.3).doptions(4): hmin (default size is automatically computed).doptions(5): hmax (default size is automatically computed).doptions(6): tolerance of the control of Chordal deviation (default -2.0).doptions(10): angular ridge detection (default 45 degree).
metric= metric at the different vertices on the initial mesh.
freefem++ day 1& 2 sept 2010
– p.15/15