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
.exoand.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.
Navier Stokes
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 uninitializedSystemobjectsOverrode
NodeElem::volume(), to return1more quickly and to explain that counter-intuitive behaviorFixed crash when cleaning up from error exceptions while using umpire via PETSc
Added more test coverage for various
MeshFunctionandVariablefeaturesMore 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
BoundaryInfoFixes 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.5Do not download fblaslapack
Download openblas
Download umpire at
v2025.12.0
moose-libmesh 2026.03.17_3463d95_0
Update libmesh
f8a1758...3463d95
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.5Do not download fblaslapack
Download openblas
Download umpire at
v2025.12.0
moose-libmesh:2026.03.17_3463d95_0
Update libmesh
f8a1758...3463d95
moose-dev:2026.03.19
Bump due to dependency updates (moose-petsc, moose-libmesh)
Fix
USE_CUDAflag when building pytorchDo not install openblas-devel
Add PETSc to
CMAKE_INCLUDE_PATHandCMAKE_LIBRARY_PATHto use openblas from PETScUpdate code-server to 4.109.5
Update mfem
b5af0e9...fa89c5e