libMesh - A C++ Finite Element Library

The libMesh library is a C++ framework for the numerical simulation of partial differential equations on serial and parallel platforms. Development began in March 2002 with the intent of providing a friendly interface to a number of high-quality software packages that are currently available.

A major goal of the library is to provide support for adaptive mesh refinement (AMR) computations in parallel while allowing a research scientist to focus on the physics they are modeling. The library currently offers:

  • Partitioning Algorithms
    • Metis K-Way weighted graph partitioning.
    • Parmetis parallel graph partitioning.
    • Hilbert and Morton-ordered space filling curves.
  • Generic 1D Finite Elements
    • 2, 3, and 4 noded edges (Edge2, Edge3, Edge4).
  • Generic 2D Finite Elements
    • 3 and 6 noded triangles (Tri3, Tri6).
    • 4, 8, and 9 noded quadrilaterals (Quad4, Quad8, Quad9).
    • 4 and 6 noded infinite quadrilaterals (InfQuad4, InfQuad6).
  • Generic 3D Finite Elements
    • 4 and 10 noded tetrahedra (Tet4, Tet10).
    • 8, 20, and 27 noded hexahedra (Hex8, Hex20, Hex27).
    • 6, 15, and 18 noded prisms (Prism6, Prism15, Prism18).
    • 5, 13, and 14 noded pyramids (Pyramid5, Pyramid13, Pyramid14).
    • 8, 16, and 18 noded infinite hexahedra (InfHex8, InfHex16, InfHex18).
    • 6 and 12 noded infinite prisms (InfPrism6, InfPrism12).
  • Generic Finite Element Families
    • Lagrange
    • Hierarchic
    • C1 elements (Hermite, Clough-Tocher)
    • Discontinuous elements (Monomials, L2-Lagrange)
    • Vector-valued elements (Lagrange-Vec, Nedelec first type)
  • Dimension-independence
    • Operators are defined to allow the same code to run unmodified on 2D and 3D applications.
    • The code you debug and verify on small 2D problems can immediately be applied to large, parallel 3D applications.
  • Sparse Linear Algebra
    • PETSc and Trilinos interfaces provide a suite of iterative solvers and preconditioners for serial and parallel applications.
    • Complex values are supported with PETSc.
    • Eigen (optionally LASPACK) provides iterative solvers and preconditioners for serial applications.
    • The SparseMatrix, NumericVector, and LinearSolver allow for transparent switching between solver packages. Adding a new solver interface is as simple as deriving from these classes.
  • Mesh IO & Format Translation Utilities
    • Ideas Universal (UNV) format (.unv) with support for reading nodal data from 2414 datasets.
    • Sandia National Labs ExodusII format (.exd)
    • Amtec Engineering's Tecplot binary format (.plt)
    • Amtec Engineering's Tecplot ascii format (.dat)
    • Los Alamos National Labs GMV format (.gmv)
    • AVS Unstructured UCD format (.ucd)
    • Gmsh (http://geuz.org/gmsh) format (.msh)
    • Abaqus format (.inp)
    • VTK unstructured grid format (.vtk)
  • Mesh Creation & Modification Utilities
    • Refine or coarsen a mesh: prescribed, level-one-compatible, or uniform.
    • Build equispaced n-cubes out of Edge2, Tri3, Tri6, Quad4, Quad8, Quad9, Hex8, Hex20, Hex27.
    • Build circles/spheres out of Tri3, Tri6, Quad4, Quad8, Quad9, Hex8.
    • Add infinite elements to a volume-based mesh, handle symmetry planes.
    • Convert Quad4, Quad8, Quad9 to Tri3, Tri6.
    • Convert a mesh consisting of any of the fore-mentioned n-dimensional linear elements to their second-order counterparts.
    • Distort/translate/rotate/scale a mesh.
    • Determine bounding boxes/spheres.
    • Extract the mesh boundary for boundary condition handling or as a separate mesh.
  • Quadrature
    • Gauss-Legendre (1D and tensor product rules in 2D and 3D) tabulated up to 44th-order to high precision.
    • Best available rules for triangles and tetrahedra to very high order.
    • Best available monomial rules for quadrilaterals and hexahedra.
  • Optimization Solvers
    • Support for TAO- and nlopt-based constrained optimization solvers incorporating gradient and Hessian information.