Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
mesh:meshadaptation [2017/07/18 09:36]
fgillet created
mesh:meshadaptation [2018/03/06 16:08] (current)
fgillet [Mesh Adaptation (2D)]
Line 1: Line 1:
-====== Mesh Adaptation ====== +====== Mesh Adaptation (2D) ====== 
-This page describes how to use the tools dedicated to mesh adaptation using the Mmg remeshing library (http://www.mmgtools.org/). +This page describes how to use the tools dedicated to mesh adaptation using the Mmg remeshing library (http://www.mmgtools.org/).
  
-Using the remeshing solver require to install Mmg and provide the direction to the header files and library using the CMake arguments  "-DMMG_INCLUDE_DIR=/path/to/MmgInstall/include" and "-DMMG_LIBRARY=/path/to/MmgInstall/lib/libmmg.a"+**<del>Currently the solvers are compatible with version 5.2.6 (https://github.com/MmgTools/mmg/releases)</del> 
 +**  
 + 
 +**Since elmerice rev. f6873f2(6/03/2018) compatibility is with MMG 5.3.10 (https://github.com/MmgTools/mmg/releases)**  
 + 
 +Using the remeshing solver require to install Mmg and provide the direction to the header files and library using the CMake arguments  "MMG_INCLUDE_DIR" and "MMG_LIBRARY": 
 + 
 +<code> 
 +cmake 
 +   -DMMG_INCLUDE_DIR=/path/to/MmgInstallDir/include 
 +   -DMMG_LIBRARY=/path/to/MmgInstallDir/lib/libmmg.a  
 +  
 +</code> 
 +Make sure that Mmg has been compiled using the ''-fPIC'' flag in order to be able to be linked to Elmer. You can achieve that for instance by providing a cache-file to the cmake building process of Mmg 
 +<code> 
 +SET(CMAKE_C_FLAGS "-fPIC" CACHE STRING ""
 +SET(CMAKE_CXX_FLAGS "-fPIC" CACHE STRING ""
 +SET(CMAKE_Fortran_FLAGS "-fPIC" CACHE STRING ""
 +</code>
  
 Examples can be found under the test directories "MMG2D_Aniso1", "MMG2D_Aniso2" and "MMG2D_Iso". Examples can be found under the test directories "MMG2D_Aniso1", "MMG2D_Aniso2" and "MMG2D_Iso".
-These tests can be executed using Ctest -L mmg+These tests have the label //elmerice-fast// and can be executed alone using  
 +<code> 
 +ctest -L mmg 
 +</code> 
 + 
 +==== Anisotropic metric definition ==== 
 + 
 +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 <m>lambda_i</m> and eigenvector  matrix //**R**// of the hessian matrix of //v//, //**H**// (i.e. small elements are required where the curvature is the highest): 
 + 
 +<m> 
 +M=R.Lambda.R^{-1} 
 +</m>  
 +with 
 +<m> 
 +Lambda=(matrix{2}{2}{lambda_1 0  0 lambda_2}) 
 +</m> 
 +and 
 +<m> 
 +\lambda_i=min ( max ( {{c|\lambda_i|}/{epsilon_v}},{{1}/{l^2_{max}}} ), {{1}/{l^2_min}} ),    (1) 
 +</m> 
 + 
 +where 
 +  * <m>c</m> is a geometric constant equal to 2/9  in 2D 
 +  * <m>l_min</m> (resp. <m>l_max</m>) is a prescribed minimal (resp. maximal) edge size 
 +  * <m>epsilon_v</m>  is the prescribed maximum error 
 + 
 +Computing second derivatives in linear elements in not straightforward. Following Buscaglia and Dari (1997), this is done in two steps: 
 +  * First, we compute the nodal gradient <m>g_i={{\partial v}/{\partial x_i}}</m> using the [[solvers:2Dnodalgradient|Compute2DNodalGradient Solver]] 
 +  * Second, we compute the hessian matrix //**H**// by solving the diffusive equation <m>H_ij-k ∇(H_ij) = 1/2 (dq_i/dx_j+dq_j/dx_i)</m>, where <m>k</m> is a diffusivity proportionnal to the local element size. The metric //**M**// is then computed from Eq. (1). This is done using the [[solvers:MMG2D_MetricAniso|MMG2D_MetricAniso Solver]]. 
 + 
 +==== Metric intersection ==== 
 + 
 +Sometimes it can be desirable to use several variables to compute the metric, if we want, for example, to capture with the same mesh different physical phenomena represented by different variables. 
 + 
 +The intersection <m>M_{1∩2}=M_1 ∩ M_2</m> of two metrics //**M_1**// and //**M_2**// is given by  (Alauzet et al., 2007): 
 + 
 +<m>M_{1∩2}=^{T}P^{-1} (matrix{2}{2}{{max(mu^1_{1},mu^2_{1})} 0  0 {max(mu^1_{2},mu^2_{2})}})P^{-1}</m> 
 + 
 +with <m>P</m> the matrix where the columns are the normalised eigenvectors <m>(e_i)_{i=1,2}</m>, of <m>N=M^{-1}_{1}M_2</m> and <m>μ^j_{i}=^{T}e_{i}M_{j}e_i</m>
 + 
 +Nodal values of <m>M_{1∩2}</m> are computed using the [[solvers:MMG2D_MetricIntersect|MMG2D_MetricIntersect Solver]]. 
 + 
 +==== Mesh adaptation ==== 
 + 
 +The mesh adaptation step is performed using the Mmg 2D library.  
 + 
 +The [[solvers:MMG2DSolver|MMG2DSolver Solver]] pass the mesh topology and required (isotropic or anisotropc) metric to the library then create the new mesh structure from the adapted mesh returned by the library. 
 + 
 + 
 +==== Transient mesh adaptation ==== 
 + 
 +During a transient simulation the progression of a physical phenomena, //e.g.// the location of the grounding line, in the computational domain is usually not known in advance. \\ 
 +If the mesh has been adapted using informations available at time //t//, the mesh may not be optimal anymore at time //t+n.dt//. Keeping a mesh sufficiently refined in areas where the physical phenomena progress requires to adapt the mesh frequently, introducing additionnal interpolation errors when  solutions are transfered to the adapted meshes. \\ 
 +The metric intersection formula given above allows to compute a metric map that contain informations at different time-steps. Iteratively solving the transient problem allows to adapt and refine the mesh in all regions where the phenomena progress. 
 + 
 +The algorithm described in Alauzet //et al.// (J. Comp. Phys., 2007) has been implemented using a bash script that allows to iterate .sif files for the physical transient simulation and the mesh adaptation. Details are given {{ :problems:mmg2d_transient.pdf |here}}
  
 +==== Examples ====
 +  * An example for isotropic mesh adaptation can be found under 
 +    * [ELMER_TRUNK]/elmerice/Tests/MMG2D_Iso \\
 +  * Examples for anisotropic mesh adaptation where the mesh size is adapted using 1 or 2 variables (i.e. combining metric informations) can be found under :
 +    * [ELMER_TRUNK]/elmerice/Tests/MMG2D_Aniso1 
 +    * [ELMER_TRUNK]/elmerice/Tests/MMG2D_Aniso2
 +  * An example for transient mesh adaptation can be found under 
 +    * [ELMER_TRUNK]/elmerice/Tests/MMG2D_Transient \\
  
mesh/meshadaptation.1500370577.txt.gz · Last modified: 2017/07/18 09:36 by fgillet
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0