Computational Backends

A modeler can choose among several MOOSE computational backends depending on the problem being solved and the hardware being targeted. Some use MOOSE object systems with libMesh data structures, some provide device-portable implementations of selected MOOSE object systems, and some use a different finite element backend.

This page gives a high-level map of those choices and points to the detailed documentation for each backend.

Framework view

The traditional MOOSE/libMesh path uses MOOSE objects, libMesh data structures, and PETSc solvers. Other capabilities provide alternatives for parts of that path:


MOOSE application and input file
|
+-- MOOSE/libMesh path
|   +-- FE/FV variables, Kernels, BCs, Materials, UserObjects
|   +-- libMesh mesh and finite element data structures
|   +-- PETSc nonlinear and linear solvers
|
+-- Kokkos-MOOSE
|   +-- Kokkos implementations of selected MOOSE object systems
|   +-- libMesh finite element backend, MeshBase-derived mesh, and DofMap
|   +-- GPU-portable assembly and execution for supported objects
|   +-- Compatible with MOOSE/libMesh systems with a few exceptions
|
+-- MFEM-MOOSE
|   +-- MFEMProblem, MFEMMesh, MFEM variables, kernels, BCs, and solvers
|   +-- MFEM finite element spaces and assembly levels
|   +-- Optional GPU and libCEED execution paths through MFEM

Choosing a path

PathWhat it changesUse it whenStarting points
MOOSE/libMeshMOOSE finite element and finite volume object systems using libMesh data structuresYou want the broadest object coverage, module compatibility, examples, and application-development supportApplication development tutorial, framework examples
Kokkos-MOOSEDevice-portable implementations of selected MOOSE object systems using the libMesh finite element backendYou want supported kernels, boundary conditions, and materials to run through Kokkos while retaining MOOSE meshes, postprocessing, and output workflowsGetting started with Kokkos-MOOSE, Kokkos installation
MFEM-MOOSEMFEM-backed problem, mesh, variable, finite element space, kernel, solver, and output objectsYou want to formulate the application using MFEM features such as high-order spaces, H(div)/H(curl) spaces, or partial assemblyGetting started with MFEM-MOOSE, MFEM installation

MOOSE/libMesh path

Most MOOSE applications use MOOSE/libMesh objects. In this mode, application developers create objects derived from MOOSE object families, such as Kernel, ADKernel, IntegratedBC, Material, UserObject, AuxKernel, and related systems.

For guidance on using the MOOSE/libMesh backend, see the application development tutorial and the framework examples.

Kokkos-MOOSE

Kokkos-MOOSE ports selected MOOSE object systems to GPU-portable execution. It continues to use libMesh MeshBase and DofMap data structures. A developer typically chooses Kokkos-MOOSE by using Kokkos-specific object families, such as Moose::Kokkos::Kernel, Moose::Kokkos::IntegratedBC, Moose::Kokkos::Material, or the corresponding Kokkos syntax pages.

Kokkos-MOOSE is not a separate finite element backend in the same sense as MFEM-MOOSE. It is a device-portable implementation path for supported MOOSE systems, built around Kokkos data structures, memory-space rules, and parallel dispatch. It relies on libMesh as the finite element backend. Many Kokkos-MOOSE system objects are compatible with host MOOSE/libMesh objects, but exceptions exist; for example, host MOOSE nodal boundary conditions cannot be used in the same input as Kokkos-MOOSE residual objects.

For details, see Getting Started with Kokkos-MOOSE.

MFEM-MOOSE

MFEM-MOOSE uses MFEM as its finite element backend. Inputs use MFEM-specific problem, mesh, finite element space, variable, kernel, boundary condition, solver, executioner, and output objects. This path is useful for capabilities that are natural in MFEM, including high-order finite elements, H(div) and H(curl) spaces, partial assembly, and low-order-refined solvers. When MFEM-MOOSE is built with libCEED support, MFEM can provide matrix-free operator application through libCEED.

For details, see Getting started with MFEM-MOOSE.