v0.14.0
Features

MoFEM (Mesh-oriented Finite Element Method) is a C++ library for managing complexities related to the finite element method (FEM). FEM is a widely used numerical approach for solving partial differential equations (PDEs) arising in various physical problems. MoFEM is developed to provide a finite element library incorporating modern approximation approaches and high-performance computing capabilities for engineers, students and academics.

MoFEM belongs to a class of open-source finite element libraries, which provides users with generic tools for solving PDEs and developers with frameworks for implementing bespoke finite elements. MoFEM is specifically designed to solve complex engineering problems, enabling seamless integration of meshes that comprise multiple element types and element shapes, which are typically encountered in industrial applications.

Unlocking advanced capabilities with a new paradigm for a finite element library design

MoFEM introduces a novel architecture of FEM software, designed to exploit advantages of emerging finite element technologies and to enable rapid implementation of numerical models for complex engineering problems involving multi-physics and multi-scale processes. Watch the video below to learn about the motivation behind the development of MoFEM, its capabilities, and its applications in research and industry.

Unique for MoFEM is that it was created for engineers to solve practical problems, which can not be easily (or not at all) solved by commercial codes. In particular, MoFEM development was driven by the needs of nuclear engineers at EDF Energy and Jacobs to model crack propagation in nuclear graphite bricks in real core environment, see Figure 1. MoFEM is currently the main numerical tool to predict cracks morphology in Advanced Gas-Cooled Reactors (AGR) in the UK. You can find out about other use cases on Applications of MoFEM in research and industry and Selected publications featuring results obtained using MoFEM pages.

Figure 1: Numerical simulation of brittle crack propagation.

MoFEM is a generic tool for solving systems of partial differential equations using the finite element method; however, the development of particular applications of MoFEM is separated from the development of the core library. Core MoFEM library serves to implement various research and commercial applications and is open, free and has MIT license, while the Users Modules are problem-focused applications of MoFEM. The key idea is that anyone can contribute to the core library to serve the whole community. However, the copyright and license of the users modules repository are accessible at the discretion of developers, permitting to adapt to the needs of the research projects, research groups or industrial partners. You can find more details on the MoFEM Architecture page.

Supported File Formats

MoFEM works with the following popular mesh preprocessors:

Moreover, using the MOAB library, MoFEM can read/write from/to the following file formats:

Format               Name     Read    Write   File name description
------------------  ------  -------- -------  ----------------
MOAB native (HDF5)  MOAB      yes      yes     h5m mhdf
Exodus II           EXODUS    yes      yes     exo exoII exo2 g gen
Climate NC          NC        yes      yes     nc
IDEAS Format        UNV       yes      no      unv
MCNP5 Format        MESHTAL   yes      no      meshtal
NASTRAN format      NAS       yes      no      nas bdf
Abaqus mesh format  ABAQUS    yes      no      abq
Kitware VTK         VTK       yes      yes     vtk
RPI SMS             SMS       yes      no      sms
Cubit               CUBIT     yes      no      cub
QSlim format        SMF       yes      yes     smf
SLAC                SLAC      no       yes     slac
GMV                 GMV       no       yes     gmv
Ansys               ANSYS     no       yes     ans
Gmsh                GMSH      yes      yes     msh gmsh
Stereo Lithography  STL       yes      yes     stl
TetGen mesh files   TETGEN    yes      no      node ele face edge
Template input      TEMPLATE  yes      yes  

Higher-order finite element spaces

  • MoFEM supports wide range of FE 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
  • Problems with mixed elements shapes (tetrahedrons, prisms, quads, triangles, edges, etc.)

Flexible discretization

  • Mixed and coupled finite elements
  • Interface (e.g. cohesive) elements and shell elements
  • Automatic Differentiation by OverLoading in C++ (ADOL-C).

Range of mesh types and topological operations

MoFEM is implemented with the use of MOAB and delivers 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 and non-conforming mesh refinement
  • Spatial searching and ray tracing
  • Distributed meshes
  • Arbitrary order definition of mesh geometry
  • Readers and writers for many file formats
  • Meshing and re-meshing on the fly
  • 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 PETSc 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 PETS (linear, nonlinear, time-dependent, eigenvalue)
  • Physics-based precoditioners (e.g. block solvers, Schur complement, etc.)
  • Multi-grid solvers (e.g. algebraic, geometric, etc.)
  • Efficient tensor library (see FTensor library)
  • h/p mesh adaptivity