MoFEM (Mesh Oriented Finite Element Method) [33] it is C++ library supporting the solution of finite elements problems. Is developed to provide free and open, inclusive, participation community finite element code for engineers, students and academics.

MoFEM is a finite element analysis code tailored for the solution of multi-physics problems with arbitrary levels of approximation, different levels of mesh refinement and optimised for high-performance computing. It is designed to be able to manage complexities related to a heterogeneous order of approximations for L2,H1,H-div and H-curl spaces, see [1] and [24].

MoFEM manages complexity related to finite element approximation and bookkeeping related do degrees of freedom and finite elements. It is part of bigger software ecosystem, composed of the Boost MultiIndex containers, MOAB (Mesh Oriented Database) [42] and PETSc (Portable, Extensible Toolkit for Scientific Computation) [8]. MoFEM is developed in C++ and it is open-source software under the GNU Lesser General Public License (see Legal stuff) Stuff.

MoFEM can read and write a number of mesh file formats using functionality provided by MoAB. The current version of MoFEM has full support for CUBIT/TRELIS, TetGEN, Salome/Code_Aster (MED format) for pre-processing and ParaView for post-processing.


Building a scientific simulation environment for finite element methods is a complicated task. The greatest part of finite element code development is often expended in dealing with technical problems related to software implementation, rather than resolving the underlying physics that the code is intended to tackle.

The demand for accurate solution of increasingly complicated real-world problems means that the underlying data structures also become increasingly complicated. This is particularly evident with multi-physics, hp-adaptivity, and/or evolving geometries (e.g. crack propagation). Established commercial software is often limited in this respect, or can be relatively slow to adopt new technologies. This is the problem that MoFEM attempts to work around, recognising that it is increasingly necessary for engineers, scientists and mathematicians to carry out calculations using several mesh refinements, different approximation orders, multiple degrees of freedom and/or different scales.


Higher-order finite element spaces

  • MoFEM supports wide range of spaces, L2, H1, H-div and H-curl
  • Numerical trace (interfacial) spaces, on faces and edges
  • Integration on skeleton, (enabling easy implementation of Discontinuous Galerkin or Nitsche method)

Flexible discretization

  • Mixed and coupled finite elements
  • Interface (e.g. cohesive) elements and shell elements
  • Automatic Differentiation by OverLoading in C++ (ADOL-C). Applied to automatic calculation of consistent tangent matrix for any smooth plastic surface and non-associated plastic flow potential.

Range of mesh types and topological operations

MoFEM is implemented with the use of MoAB and deliver the great flexibility of managing meshes. We can manage range elements types, e.g. prisms, triangles, quads, bricks and more.

  • Unique and extremely flexible BitRef Levels (see Explaining mesh BitRefLevel)
  • Conforming mesh refinement and through MoAB non-conforming mesh refinement.
  • Spatial searching and ray tracing (MOAB)
  • Distributed meshes (MOAB)
  • Arbitrary order definition of mesh geometry
  • Readers and writers for many file formats (MOAB)
  • Meshing and re-meshing on the flay
  • Ability to capture evolving topologies, e.g. implicit crack propagation analysis
  • Mesh smoothing and Arbitrary Lagrangian Eulerian Formulation

Parallel and scalable

MoFEM supports MPI-based parallelism throughout the library, and can readily be used as a scalable unstructured finite element problem generator. Algebra is building on top of PETSc and geometry description on top of MoAB, both implementations are tailored for massive parallel calculations.

  • Number of solvers available from PETSc
  • Multi-grid solvers
  • Efficient tensor library (see FTensor library)
  • h/p- mesh adaptivity