Skip to content

Add linear elastic solver

Dave Moxey requested to merge feature/mesh-deform into master

This MR adds a solver for the linear elasticity equations and the library and pre/post-processing infrastructure that is needed to support it. In particular, the primary application for the solver within Nektar++ is for mesh generation purposes, whereby the mesh is treated as a solid body and deformed at the boundary to align the curvilinear elements with a given surface.

To do this robustly, as the linear elastic equations are only valid for small deformations, the implementation presented here adopts a multi-step approach, solving the equations after each step. As such, routines are needed in MultiRegions and SpatialDomains to reset the geometry information and rebuild the matrix system at each step.

The following changes have been made to accommodate this:

  • Geometry objects now have a Reset method, which clears the geometry coefficients of itself and any derived edges/faces, rebuilding this from the vertex and curvature information. To facilitate this, most elements now have a SetUpXmap routine which regenerates the m_xmap object as curvature may have been added to the element.
  • Similarly, ExpList also has a Reset method which clears the matrix managers and causes matrices to be rebuild on the next call to HelmSolve or similar.
  • Added support for 1D curved segments in 2D space to MeshConvert and MeshGraph.
  • FieldConvert has three new modules:
    • a displacement processing module which calculates the displacement between an XML manifold and a 2D/3D domain's boundary region and outputs a file suitable for a boundary condition in the elasticity solver;
    • a deformation processing module which takes the displacement field generated by the elasticity solver and applies it to the mesh;
    • and an XML output module which can be used in conjunction with the previous module. Since this is likely to be useful elsewhere, most of the code for this has been added as a MeshGraph routine.
  • XmlToVtk has a new command line argument to output the distribution of scaled Jacobians of a given mesh for quality assessment purposes.
  • The elasticity code itself which includes the thermal terms discussed in publications.
  • Documentation for all of the above.

Merge request reports