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.