MOOSE Newsletter (June 2026)

MOOSE Improvements

Functional Mock-up Unit interface

MOOSE now supports the creation of Functional Mock-up Units using the pythonfmu package, distributed with the conda packages (within moose-dev for local development and moose for non-developer users). This package is not available on macOS at this time.

The MOOSE FMU interface leverages web server control capability to communicate with MOOSE simulation. It requires a running MOOSE simulation to communicate with the python-based FMU. The simulations are orchestrated from python, and the control can be used to couple a MOOSE FMU to other FMUs.

Citing MOOSE

The --citations [optional output file] option has been added to moose-based application executables. This command line option should output the list of papers that should be cited when using the application for a simulation. The list of papers should be tied to the techniques and objects used in the simulation. Note that the list of papers is mostly incomplete at this time, and community contributions to attribute objects to their relevant papers are welcome.

Configurable MFEM nonlinear solver objects

A large MFEM backend update made nonlinear solver strategies first-class configurable solver objects through the new plural Solvers block. Previously, MFEM nonlinear solves used a Newton solver constructed by the executioner; users could tune its nonlinear tolerances, but could not select among nonlinear solver implementations. The update added MFEMNewtonNonlinearSolver, which wraps MFEM's native Newton solver and uses an externally configured MFEM linear solver for Jacobian solves, and MFEMPetscNonlinearSolver, which wraps MFEM's PETSc SNES-based nonlinear solver and accepts PETSc options through the MOOSE input file.

The solver wiring was generalized so MFEM inputs can configure nonlinear and linear solvers together under the Solvers syntax, while continuing to reference preconditioners through the existing Preconditioner block. The update also reorganized and expanded regression coverage for nonlinear diffusion, transient nonlinear heat transfer, and transient nonlinear heat conduction cases, including tests with nonzero right-hand sides and nonlinear boundary integrators. (idaholab/moose#32596)

Matrix Free AMS with MFEM

Currently the range of matrix free preconditioners for partially assembled MFEM problems available from MOOSE is limited, with many current examples using a Jacobi preconditioner. For curl-curl problems, this is a poor choice, and results in poor performance relative to HypreAMS-based preconditioning methods that require the full operator for the curl-curl problem assembled.

Fortunately, MFEM provides a MatrixFreeAMS for this purpose. This wrapper extends the range of performant preconditioners for partially assembled (or matrix free) MFEM problems to include typical electromagnetics use-cases.

Mesh generation

Automated and simple boundary layer capabilites were added to the Delaunay triangulation mesh generators such as the XYDelaunayGenerator. Alternatively, the triangle boundary layers can be created on their own using the XYTriangleBoundaryLayerGenerator. The boundary layers themselves are created using a Delaunay triangulation of the layer, defined by the original boundary nodes and their offset at a certain width.

Convexity diagnostics and repair were added for C0Polygon elements in the MeshDiagnosticsGenerator and the MeshRepairGenerator. While non-convex polygons are supported by libMesh, once extruded into a C0Polyhedron polygonal prism 3D element, convexity is required for a valid C0Polyhedron element.

MooseDocs

Pages can now be optionally included using the !include? tag. This notably enables building the documentation without optional dependencies, while using these dependencies when available.

Miscellaneous

  • Functor materials now output the offending subdomain name as well as the subdomain ID when being evaluated outside their block restriction.

  • The problem verbosity setting is no longer overriden by the executioner verbosity setting. This allows independent tuning of simulation verbosity.

  • MFEM device-to-device MPI communications, bypassing the host, has been enabled for a selection of preconditioners.

  • Reference residual output is now color coded to favor relative convergence with green output.

  • CSV output now supports scientific notations in the CSV file.

  • The node-to-element map now uses hash-table storage, no longer maintains a separate active semilocal map, and is rebuilt more carefully after mesh changes.

  • The error on missing a sideset in the mesh for a specific boundary parameter has been completely reworked to helpfully examine the current sideset and nodesets available in the mesh and provide conversion advice only when pertinent.

  • The test harness run_tests script now accepts an --app-name command line argument to change the name of the application, which is useful to let the script find the executable.

  • Numerous object getters, from Distributions to Samplers, now check in devel and dbg mode whether the task related to adding these objects to the problem has passed. If not, then the user gets a clear error mentioning the task ordering issue.

  • The BoundaryIntegralValueConstraint was created for imposing an average value of a finite element variable over a boundary.

  • Several dynamic pointer cast operations were replaced by static casts from the main object warehouse, a class called TheWarehouse, which greatly improved performance for small threaded simulations.

  • A dynamic cast operation in material property logic was replaced by a static cast, providing a minor speedup in simulations with stateful material properties.

MOOSE Bug Fixes

  • FullSolveMultiApp no longer seeks to recover in recovered simulations, they are instead re-run entirely. This behavior is more in line with expectations.

  • Similarly, the multiapps nested within FullSolveMultiApp no longer try to recover their simulations.

  • The residual debug output will now check the variable block restrictions to avoid a seg fault on user input error.

  • Execution on FINAL within multiapps nested in fixed point iterations is now correctly executed on the last fixed point iteration, rather than on the first.

  • The user will now get a clear unsupported error when they attempt to create 1D mortar constraints

MOOSE Modules Changes

Contact module

Parameter groups were added to the Contact Action. Parameter groups facilitate finding parameters in the drop down parameter lists in the online documentation of actions and objects.

Subchannel module

The channels and pins mesh generator classes were combined to simplify the input and reduce the opportunities for mistakes from differences between subchannel and pin meshes. The transfer classes should still be separated for transfers of fields living block-restricted on subchannels and block-restricted on pins.

Sodium fluid properties in subchannel now rely on the SolutionInvalidityInterface for their out-of-bounds behavior. When evaluated out of their temperature validity range, the solution should be considered invalid.

Several corrections were performed in the friction and cross-flow closures, minorly impacting results.

Stochastic tools module

The Maxwellian (or Maxwell-Boltzmann) distribution was added to the module as a specialization of the normal distribution. This is intended to support electromagnetics modeling applications.

Fluid properties module

The TemperaturePressureFunctionFluidProperties fluid properties can now support incompressible fluids. For these, the isochoric and isobaric heat capacities are simply returned as equal, rather than computing a relation involving the compressibility.

Reactor module

CSG generation was enabled in the CoreMeshGenerator and its sub-generators. This enables the output of an equivalent definition of the geometry meshed by the Reactor module to CSG. This geometry may be used in other analysis codes which prefer this format over unstructured meshes.

libMesh-level Changes

2026.06.05_ab36c00 Update

  • Improved threaded code

    • Added MeshBase::element_stored_range() and MeshBase::active_local_element_stored_range(), which return on-the-fly-assembled cached ranges of elements suitable for threaded mesh modification or evaluation code, respectively

    • Multithreading is now employed, when multiple threads are available at runtime, in dozens of library element loops which were previously only either serial or MPI-parallel

    • Added Threads::active_threads, tracking how many threads are currently in use in a multithreaded code path

    • Expanded assertions in non-thread-safe PerfLog stack code, to catch accidental use (in devel and dbg builds) within codepaths multithreaded via direct OpenMP APIs, not just via the libMesh::Threads thread interface.

  • Fixed Elem::side_vertex_average_normal() on p-refined meshes, and added unit test coverage

  • Fixed missing boundary name in verbose mesh stitching console output

  • Fixed MeshFunction::discontinuous_value() in "out-of-mesh mode"

  • Fixed MeshGeneration::build_sphere() in distributed-mesh cases

  • Improved configuration options: users can now properly request C++ standard versions newer than C++17, and do not get unwanted GNU extensions.

  • Added support for polygonal and polyhedral elements to MeshTools::Modification::all_tri(), along with unit test coverage

  • Added MeshTools::Modification::all_rbb(), to create optimal Rational-Bezier-Bernstein remappings (including isogeometric mappings, for special cases like circles and aligned cylinders) of previously-Lagrange-mapped meshes, along with unit test coverage

  • Made SparseMatrix::init_without_preallocation() and SparseMatrix::finish_initialization() public, for PetscMatrix users who want to use hash-table-based matrix assembly for matrices which are non-square or which for other reasons do not match the DofMap indexing

  • Added circumcenter(p0, p1, p2) method, along with unit test coverage

  • Updated qhull support to use the newest version, via a git submodule

  • Made MeshTools::n_connected_components() much faster

  • Made ReferenceCounter always print detailed information whenever a leaked ReferenceCountedObject is detected

  • Fixes for warnings when certain versions of clang++ are used with higher C++ standard versions specified

  • Fixes for configuration with Intel 2026 compilers

  • Fix VariationalMeshSmoother logic that determines nodal constraints

  • Make Threads:: pthreads backend respect grainsize and make grainsize runtime-configurable

PETSc-level Changes

PETSc has been updated from version 3.25.1 to 3.25.2. A summary comparison of the changes within this update can be found on the PETSc GitLab.

Conda Package Updates

moose-petsc 3.25.2 [mpich,openmpi]_0

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Update petsc v3.25.1..v3.25.2

  • Remove specific --download-umpire-commit in petsc configure

  • Patch scalapack-targets.cmake on Mac

moose-libmesh-vtk 9.6.2 [mpich,openmpi]_0

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Update VTK from 9.6.1 to 9.6.2

moose-libmesh 2026.06.05_ab36c00 [mpich,openmpi]_0

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Update libmesh aeab0b9..ab36c00

  • Use updated moose-petsc dependency moose-petsc 3.25.2 [mpich,openmpi]_0

  • Use updated moose-libmesh-vtk dependency moose-libmesh-vtk 9.6.2 [mpich,openmpi]_0

moose-wasp 2026.05.24_2cdbeb7 build_0

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Update wasp 09054a2..2cdbeb7

moose-pyhit 2026.06.07

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Use updated moose-wasp dependency moose-wasp 2026.05.24_2cdbeb7 build_0

moose-build 2026.06.07

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Fix issue with activation script on zsh

moose-tools 2026.06.07

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Update black from 26.1.0 to 26.5.1

  • Update clang-format to 22.1.5

  • Update ruff to 0.15.15

  • Remove clang-tools

moose-dev 2026.06.07 [mpich,openmpi]

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Use updated moose-petsc dependency moose-petsc 3.25.2 [mpich,openmpi]_0

  • Use updated moose-libmesh dependency moose-libmesh 2026.06.05_ab36c00 [mpich,openmpi]_0

  • Use updated moose-build dependency moose-build 2026.06.07

  • Use updated moose-tools dependency moose-tools 2026.06.07

moose-build 2026.06.16

  • Rebuild

moose-wasp 2026.06.15_d8777a8

moose-tools 2026.06.16

  • Re-add clang-tools, needed for git clang-format

  • Downgrade clang-format from 22.1.5 to 19.1.7 (required due to version pinning with clang-tools and clang)

moose-dev 2026.06.16 [mpich,openmpi]

  • Rebuild due to updated pins in conda/conda_build_config.yaml

  • Use updated moose-tools dependency moose-tools 2026.06.07

Apptainer Package Updates

moose-mpi:2026.06.07

  • Fix setting of the custom prompt in the MOOSE bashrc

  • Update base containers

  • Update CUDA in moose-mpi-cuda from 12.9.1 to 13.2.1 (removes support for INL Sawtooth V100 GPUs)

  • Update clang in moose-mpi-clang from to 20.1.8 to 21.1.8

  • Update Intel oneapi in moose-mpi-intel from 2025.3.3 to 2026.0.0

moose-petsc:3.25.2_0

  • Update petsc v3.25.1..v3.25.2

  • Remove specific --download-umpire-commit in petsc configure

moose-libmesh:2026.06.05_ab36c00_0

moose-dev:2026.06.07

  • Update conduit 4ae5a69..6471d81

  • Update MFEM e52948f...b7ac196

  • Link MFEM with STRUMPACK (as there's never enough linear algebra)

  • Update wasp 09054a2..2cdbeb7

  • Update code-server to 4.122.0

  • Add framework/contrib/pytorch submodule and use for building pytorch

  • Update pytorch to 2.12.0

  • Don't build pytorch with cuda arch 7.0 due to cuda bump (removes support for INL Sawtooth V100 GPUs)

  • Simplify pytorch build, skipping build of unneeded features

  • Use uv for python (replaces conda) with ./requirements.txt that mirrors conda moose-tools for python environment

  • Update python to 3.14.5

  • Update black from 26.1.0 to 26.5.1

  • Update clang-format to 22.1.5

  • Update ruff to 0.15.15

  • Add option to install pyfmi and pythonfmu, which is currently enabled in moose-dev-mpich

moose-dev:2026.06.16

  • Downgrade clang-format from 22.1.5 to 19.1.7 (required due to version pinning with conda clang-tools and clang)

  • Update python from 3.14.5 to 3.14.6

  • Update code-server from 4.122.0 to 4.123.0

  • Add fastcov to python for parallel lcov/gcov generation

  • Update NEML2 9b8d8b9..95801ac

  • Update wasp 2cdbeb7..d8777a8