MOOSE Newsletter (March 2026)

MOOSE Improvements

Single-source enum declarations for MooseEnum

MOOSE now provides a CreateMooseEnumClass macro for cases where a C++ enum class and a corresponding MooseEnum or MultiMooseEnum option list need to stay synchronized. The macro declares the enum and generates a matching get...Options() helper, so the valid string options no longer need to be repeated manually in a separate location.

This removes a common source of maintenance errors where one enum value list could be updated without updating the associated parameter options. The new pattern is now used in several framework and module classes, including contact formulations, material constant_on modes, and parsed material extra symbols.

For example, code that previously required both an enum class declaration and a separate string such as "ERROR WARNING IGNORE" can now be written once as:


CreateMooseEnumClass(PointNotFoundBehavior, ERROR, WARNING, IGNORE);

and used with:


MooseEnum(getPointNotFoundBehaviorOptions(), "IGNORE")

C++ 20 build

MOOSE can now be built with the -std=c++20 flag. The minimum compilers for MOOSE will soon be raised to gcc 10.x / 11.x to be able to use Kokkos-5 and the latest versions of PETSc. If you would be affected negatively by this change, please get in touch with the MOOSE team (for example on GitHub Discussions) ASAP.

Surface meshing utilities and generators

Several mesh generators were added to MOOSE to be able to modify and build off of surface meshes. The intent is to provide basic support for loading simple .STL surface meshes and creating a tetrahedral mesh of the volume enclosed. These additions include:

  • The SurfaceSubdomainsFromAllNormalsGenerator was added to "paint"/loop over the surface mesh and assign subdomains to the surface elements based on their normals. Various options and heuristics were added to handle difficulties encountered in sample surface meshes.

  • The OrientSurfaceMeshGenerator was added to flip surface elements to have a consistent normal orientation.

  • The SurfaceSubdomainsDelaunayRemesher was added to re-mesh with triangle elements subdomains of surface elements. The meshes generated are conformal on the boundaries between subdomains.

The SubdomainsFromPartitionerGenerator was added in the same effort to be able to test out various options for assigning subdomains on the surface mesh before re-triangulating it.

Constructive Solid Geometry (CSG) support improvements

The CSG support was increased to:

  • handle transformations of cells, universes, lattices and surfaces. Transformation supported include rotations, translations and scaling.

  • provide 'delete' and 'swap' operations for changing the content of cells.

Sampler vectorpostprocessor sorting

The SamplerBase class used by sampler vectorpostprocessors has been expanded to accept a sampled variable as the sort_by quantity. This lets the user specify an arbitrary sampling order for the sampled rows, as long as it can be expressed in an auxiliary variable.

Layered user objects improvements

The bounds of the subdivisions of layers in the LayeredBase-derived can now be specified individually rather than with a blanket uniform-per-layer parameter. This aligns with the flexibility offered by the mesh extruder generators, where the layers can be specified individually.

1D spline utilities

A B-Spline class and an associated SplineUtils class were added to MOOSE to be able to represent and sample a uniform clamped B-spline. These splines offer the advantage that they can pass through a determined start and end point with an imposed starting and ending direction, avoiding slope "breaks" at the connection with other 1D line meshes. A BSplineMeshGenerator should be added to MOOSE very soon for such 1D line meshes.

Miscellaneous string output improvements

moose::stringify was extended to support std::tuple of arbitrary sizes. The delimiter specified is used for the tuple, but not for any container contained within the tuple.

std::unordered_map and std::map will now be output with mooseUtils::prettyCppType without the additional C++ type information such as the std::allocator. This improves the readability of messages referring to map types.

CSVDiff testing enhancement

The CSVDiff testing utility now outputs differences for every time step, similarly to how the Exodiff tests report differences between the current result and the gold file.

Memory and CPU limits during testing

Memory and CPU consumption are now checked during the operation of the test suite. If a test uses more than 110% of a CPU, it must request additional slots. The memory limit depends on the module, but generally we recommend trying to limit to 500 MB of RAM per test. These limits can be set on a per-test basis if needed using the min_slots tests parameter to request more resources.

Numerous tests in MOOSE and the modules were lightened to abide by this resource tracking, with no impact on SQA or code coverage.

Eigenvalue simulation support for simulation performance postprocessing

Several postprocessors, notably to output the residual or the number of solver iterations, can now report these metrics with the Eigenvalue executioner.

Block deletion generator usability improvement

The BlockDeletionGenerator can now accept a 'keep' operation so that only the list of blocks that should not be deleted can be specified. This is shorter to specify if most of the blocks in a mesh should be deleted.

MFEM Backend improvements

  • Adaptive mesh refinement functionality is now available for static problems. Though both h- and p-refinement implementations are available, the user cannot perform hp-refinement or compound multiple iterations of p-refinement. This is due to challenges related to deciding whether to use h- or p-refinement and in renewing error estimates after a p-refinement iteration. (idaholab/moose#30943)

  • Material coefficients are now boundary restrictable too. This is to allow boundary integrators to use coefficients defined on the boundary itself. (idaholab/moose#32541)

  • A couple of bugs were fixed: when converting names to attribute ids, we no longer assume their number matches, and when creating a cut transition submesh, we no longer add an attribute set to the parent mesh corresponding to the exterior boundary of the newly-created submesh. (idaholab/moose#32541)

MOOSE Bug Fixes

  • FVReaction can now be used INSFVScalarFieldVariable without issues. It was previously missing a call to require quadrature point calculations, which are turned off in finite volume by default.

  • Nodal constraints now correctly tally their contributions to additional tagged vectors and matrices rather than discarding them.

  • The exodus file mesh extensions supported are now .exo and .e, removing support for .exd

MOOSE Modules Changes

Removal of Richards module

The Richards module, an alternative module for porous media flow, was removed from MOOSE. The functionalities in the porous flow module cover what was offered in this older module.

Heat Transfer

The LinearFVFunctorRadiativeBC was added to the heat transfer module to handle cases where both radiative and diffusive fluxes are applied on a boundary condition, with the radiative flux being computed from radiative exchange with a constant-temperature, infinite medium.

The P1 model for participating medium radiation was added to the linear finite volume (LinearFV) discretization of the Navier Stokes equations. It can be iterated with the conjugate heat transfer already available in the SIMPLE class of executioners.

XFEM

The 3D mesh cutter, used to form cracks in XFEM, now automatically tracks the crack front nodes.

Solid Mechanics

The ConstantsFromElasticityTensor material was added to extract elastic material property constants, such as the Young modulus, from the elasticity tensor property.

libMesh-level Changes

2026.03.17_3463d95 Update

  • Added FEType::p_refinement - this will allow MOOSE to independently enable or disable p refinement of variables even if they (otherwise) share the same finite element family and base polynomial order.

  • Added checks of hull integrity to Netgen interface, used by XYZDelaunay mesh generation in MOOSE

  • Fixed System::get_info() on uninitialized System objects

  • Overrode NodeElem::volume(), to return 1 more quickly and to explain that counter-intuitive behavior

  • Fixed crash when cleaning up from error exceptions while using umpire via PETSc

  • Added more test coverage for various MeshFunction and Variable features

  • More integrity checks on input triangulations before proceeding to NetGen or TetGen for tetrahedralization

  • Update SNES divergence reasons for compatibility with PETSc 3.12/3.25

  • Support for subvector methods in EigenSparseVector

  • Fixes for warnings from C++20 compilers

  • Fix to remove the corresponding name when removing a node boundary id from BoundaryInfo

  • Fixes for static condensation interactions with adaptivity and restarts

PETSc-level Changes

The PETSc submodule has been updated from version 3.24.4 to 3.24.5. Find the GitLab-generated set of changes here: v3.24.4...v3.24.5

Conda Package Updates

moose-mpi 2026.03.19

  • Update compilers

  • Update openmpi to 5.0.10

moose-petsc 3.24.5_0

  • Update PETSc v3.24.4...v3.24.5

  • Do not download fblaslapack

  • Download openblas

  • Download umpire at v2025.12.0

moose-libmesh 2026.03.17_3463d95_0

moose-wasp 2025.09.19_02960f1_5

  • Update compilers to be consistent with moose-mpi

moose-seacas 2025.10.14_2

  • Update compilers to be consistent with moose-mpi

moose-dev 2026.03.19

  • Bump due to dependency updates (moose-mpi, moose-petsc, moose-libmesh, moose-wasp)

Apptainer Package Updates

moose-mpi:2026.03.19

  • Update rocky base images

  • Update openmpi to 5.0.10

  • Remove extraneous gcc 13 install in clang 20 container

moose-petsc:3.24.5_0

  • Update PETSc v3.24.4...v3.24.5

  • Do not download fblaslapack

  • Download openblas

  • Download umpire at v2025.12.0

moose-libmesh:2026.03.17_3463d95_0

moose-dev:2026.03.19

  • Bump due to dependency updates (moose-petsc, moose-libmesh)

  • Fix USE_CUDA flag when building pytorch

  • Do not install openblas-devel

  • Add PETSc to CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH to use openblas from PETSc

  • Update code-server to 4.109.5

  • Update mfem b5af0e9...fa89c5e