Warning: Undefined array key 1 in /home/np29546/public_html/elmerice/wiki/inc/auth.php on line 78
Warning: Cannot modify header information - headers already sent by (output started at /home/np29546/public_html/elmerice/wiki/inc/auth.php:78) in /home/np29546/public_html/elmerice/wiki/inc/auth.php on line 431
Warning: Cannot modify header information - headers already sent by (output started at /home/np29546/public_html/elmerice/wiki/inc/auth.php:78) in /home/np29546/public_html/elmerice/wiki/inc/Action/Export.php on line 104
Warning: Cannot modify header information - headers already sent by (output started at /home/np29546/public_html/elmerice/wiki/inc/auth.php:78) in /home/np29546/public_html/elmerice/wiki/inc/Action/Export.php on line 104
Warning: Cannot modify header information - headers already sent by (output started at /home/np29546/public_html/elmerice/wiki/inc/auth.php:78) in /home/np29546/public_html/elmerice/wiki/inc/Action/Export.php on line 104
===== =====
==== General Information ====
* **Solver Fortran File:** ''MMG2D_MetricAniso.F90''
* **Solver Name:** ''ElmerIce_MeshAdapt2D(MMG2D_MetricAniso)''
* **Required Output Variable(s):**
* (1) ''Metric'' (dofs = 3)
* (2) ''hessian'' (dofs = 3)
* **Required Input Variable(s):**
* (1) ''Nodal gradient'' (dofs = 2)
* **Optional Output Variable(s):** None
* **Optional Input Variable(s):** None
==== General Description ====
This solver is used for the mesh adaptation ([[mesh:meshadaptation|Mesh Adaptation]]) to compute the anisotropic metric **M**.
The metric //**M**// , used to define the element size, derives from a geometric error estimate based on an upper bound for the interpolation error of a continuous field to piecewise linear elements (Frey and Alauzet, 2005).
For a variable //v//, //**M**// depends on the eigenvalues lambda_i and eigenvector matrix //**R**// of the hessian matrix of //v//, //**H**// (i.e. small elements are required where the curvature is the highest):
M=R.Lambda.R^{-1}
with
Lambda=(matrix{2}{2}{lambda_1 0 0 lambda_2})
and
\lambda_i=min ( max ( {{c|\lambda_i|}/{epsilon_v}},{{1}/{l^2_{max}}} ), {{1}/{l^2_min}} ), (1)
where
* c is a geometric constant equal to 2/9 in 2D
* l_min (resp. l_max) is a prescribed minimal (resp. maximal) edge size
* epsilon_v is the prescribed maximum error
First this solver compute the hessian matrix //**H**//; As computing second derivatives in linear elements in not straightforward this is done by solving the diffusive equation H_ij+ K ∇(H_ij) = 1/2 (dq_i/dx_j+dq_j/dx_i), where K=k A is a diffusivity proportionnal to the local element size (A) and g_i={{\partial v}/{\partial x_i}} are the nodal gradients of the variable //v// (This can be computed using using the [[solvers:2Dnodalgradient|Compute2DNodalGradient Solver]]).
Finally, the metric //**M**// is then computed from Eq. (1)
==== SIF contents ====
Solver 5
Equation = "Metric2"
Variable = -nooutput dumy
Procedure = "ElmerIce_MeshAdapt2D" "MMG2D_MetricAniso"
Metric Variable Name = String "M2"
Hessian Variable Name = String "ddx2"
Gradient Name = String "Gradient2"
Diffusivity = Real 0.5 !! the diffusivity k; the total diffusivity is kA
Linear System Solver = Direct
Linear System Direct Method = umfpack
Exported Variable 1 = -dofs 3 "M2"
Exported Variable 2 = -dofs 3 "ddx2"
End
Body Force 1
!! Parameters in Eq. 1
M2 Hmin = Real 1.0e-3
M2 Hmax = Real 1.0
M2 err = Real 0.0033
End
==== Example ====
Examples for anisotropic mesh adaptation can be found under ''[ELMER_TRUNK]/elmerice/Tests/MMG2D_Aniso1'' and ''[ELMER_TRUNK]/elmerice/Tests/MMG2D_Aniso2'', where the mesh size is adapted using 1 or 2 variables (i.e. combining metric informations), respectively.