MOOSE Newsletter (March 2025)
MOOSE International Workshop 2025

Figure 1: Attendees of the MOOSE International Workshop 2025 in front of the INL Meeting Center.
The inaugural MOOSE International Workshop was held at the INL Meeting Center in Idaho Falls, Idaho on March 10-13, 2025, and the theme of this year's meeting was "Multiphysics for Energy & Environmental Applications". Technical tracks covered a wide range of applications and development in MOOSE, including MOOSE for Nuclear Energy, Fusion, Geosystems, Renewable Energy, MOOSE framework and framework development, and MOOSE physics modules. There were 169 registered attendees (see Figure 1), representing stakeholders across the MOOSE community:
70 attendees from five (5) United States (U.S.) National Laboratories
2 attendees from two (2) U.S. Government agencies (Nuclear Regulatory Commission and Department of Energy)
49 attendees from 23 U.S. universities
15 attendees from 7 U.S. industry partners
14 attendees from two (2) foreign government organizations (United Kingdom Atomic Energy Authority and the Commonwealth Scientific and Industrial Research Organisation, Australia)
4 attendees from two (2) foreign industry partners
15 attendees from seven (7) foreign universities
The event was a resounding success, allowing attendees to share research successes, learn new skills, and develop ideas for future MOOSE development.

Figure 2: The current MOOSE framework development team alongside Steve Bajorek from the U.S. Nuclear Regulatory Commission (middle row, second from left). Not pictured: Alex Lindsay.
On behalf of the MOOSE development team (Figure 2), a big "Thank You" to our community for their continued support of MOOSE and MOOSE-based simulation tools!
MOOSE Improvements
New SolutionInvalidity Summary Output
Introduced a new transient summary table to the SolutionInvalidity capability. Users now have access to the time history of the solution invalidity object at the end of the simulation if they use flagSolutionWarning
to mark invalid solutions. It also supports customization of the time interval by creating a sub-block in [Outputs]
and changing the "solution_invalidity_timestep_interval". Additionally, users can disable the summary table by adding solution_invalidity_history = false
in [Outputs]
.
Solution Invalid Warnings History:
-----------------------------------------------------------------------------------------
| Object | Time | Stepinterval Count | Total Count |
-----------------------------------------------------------------------------------------
| NonsafeMaterial : Solution invalid warning! | 0-1 | 0 | 0 |
| NonsafeMaterial : Solution invalid warning! | 1-2 | 48 | 48 |
| NonsafeMaterial : Solution invalid warning! | 2-3 | 48 | 96 |
-----------------------------------------------------------------------------------------
New Automatic Differentiation (AD) Curl Methods
Automatic differentiation capability has been extended to curl operations in the form of adCurlSln()
. In addition, coupling the curl of vector field variables can be called by using adCoupledCurl
and new base classes labeled KernelCurl
, ADKernelCurl
, and GenericKernelCurl
have been created to facilitate the templating of future curl based kernel objects. When an object inherits from GenericKernelCurl
, it gains access to the following new variables:
_curl_u
: Holds the solution curl at the current quadrature points_curl_test
: Curl of the test function_curl_phi
: Curl of the shape function
New ActionComponents interfaces
Three interfaces were added to be used on ActionComponents as need:
ComponentBoundaryConditionInterface to define boundary conditions on the components that get interpreted by the Physics
ComponentInitialConditionInterface to define initial conditions on the components that get interpreted by the Physics
ComponentMaterialPropertyInterface to define generic material properties directly on the components on which we plan to use them
Restart capability improvements
Simulations using p-refinement can now be restarted using a Checkpoint. MOOSE will also no longer attempt to repartition after loading a checkpoint file
Framework-level, user-facing API for loading and evaluating torchscript objects
The ability to load torch script models into MOOSE facilitates the use of UQ/ML using libtorch directly in simulations. We also want to ensure that these models are loadable on the fly at different execute_on options.
The TorchScriptUserObject stores the torchscript object.
A script is available for converting current test specification options to capabilities at scripts/convert_to_capabilities.py
. Run the script from the root of your repository, for example:
moose/scripts/convert_to_capabilites.py .
when MOOSE is located within the moose
directory of your application repository.
MOOSE Modules Changes
New Subchannel module
The formerly closed-source Subchannel application was recently merged into MOOSE as the Subchannel module (SCM). SCM is a subchannel physics module for performing reactor core, single-phase thermal-hydraulic subchannel simulations for bare pin, square lattice bundles or wire-wrapped/bare pin, triangular lattice bundles. It can model water-cooled or metal-cooled (lead, sodium, LBE) bundles.
The subchannel documentation may be found at this link.
Navier Stokes
For porous media flow, pressure drops from contraction/expansion of the flow area may now be specified on sidesets inside the flow domain. The pressure drops are computed by the BernoulliPressureVariable.
The SIMPLEC method was added to the SIMPLE executioner for the linear finite volume discretization of the Navier Stokes equations.
Heat transfer
Convective boundary conditions were added to support finite-element finite-volume coupling at an interface. For example, heat conduction in the solution may be solved using finite elements, while fluid dynamics may be solved using the finite volume discretizations available in the Navier Stokes module.
libMesh-level Changes
2025.03.06
Update
Quadrature API changes. A few virtual
QBase
methods have had changed signatures, and some methods have been deprecated in favor of newer versions, requiringElem
inputs rather than mereElemType
inputs, to enable support for elements like arbitrary polygons and polyhedra where a single class can take on different topologies at run time.FE
andFEInterface
API changes. Some methods have been deprecated in favor of newer versions, either inElem
or taking anElem
rather than anElemType
argument, also for runtime-topology compatibility.Add APIs to control
System
name prefixing from C++, not just from the command line. This will enable fixes for a MOOSE bug with independent preconditioning of multiple nonlinear systems, affecting the optimization module.Added an
integrate_slits
option toJumpErrorEstimator
-based estimatorsAdded an
OverlapCoupling
ghosting functor, useful for integrating on slit meshes or between manifolds of overlapping meshes.Bug fix:
DistributedMesh::add_point
now operates correctly when given a node id that was recently deleted from the mesh but has not yet been cleaned from the internal node container.Bug fix:
Prism6::build_side_ptr()
now setssubdomain_id()
; this fixes a failure in adaptive mesh refinement of Prism6 elements with subdomain-restricted variables.Bug fix: methods which elevated mesh element order no longer renumber nodes and elements while doing so. This fixes potential iterator invalidations in some use cases, and it's more efficient.
Bug fix: when copying nodes and elements from a source mesh into a target
DistributedMesh
that is too small to use all its processors, the target mesh was left in an invalid state. This fixes errors triggered by certain mesh stitching operations.Bug fix for range estimation bug in FParser optimizer
Minor FE code refactoring for more simplicity and readability
Minor optimization to some hash (and thus
unordered_map
) use casesCleaned up and commented code with high-precision floating-point constants
PETSc-level Changes
Bug Fixes and Minor Enhancements
Minor optimizations were made to the assembly class when using automatic differentiation (AD). An AD Diffusion case showed about 5% improvement in computation time.
The ComboMarker now supports block restriction of each component marker that is used in evaluating the refinement/coarsening decision.
MOOSE syntax can now be de-registered if application developers consider the syntax incompatible with their application.
The use of
MULTIAPP_FIXED_POINT_BEGIN
for a child application along with fixed point iterations was fixed to avoid excessive restoring of the simulation state.The element conversion generator will now consistently preserve sidesets of elements when increasing their order.
The
LinearInterpolation
utility will now properly catch input NaNs.make clobber
will no longer remove compiledcontribs
such aswasp
orexodiff
.FunctorAux will now error when relying on a postprocessor functor that is not executed before auxkernels.
MOOSE will now error when using both
Mesh/file=
and mesh generators. The previous behavior was intended to allow the former syntax to override mesh generators.ExtremeValueBase
-derived postprocessors can now compute the maximum of the absolute value of a variable.The XYDelaunayGenerator can now assign subdomain IDs to the elements it creates.
The BoundaryDeletionGenerator can now be set to only keep specified sidesets in the mesh rather than delete specified sidesets.
Schur complement selection and split-preconditioning setups were improved.
The
show_mesh_generators
option was added to the[Debug]
block to see mesh generation execution order as they execute.Unused parameters will now cause an error in the
--mesh-only
mode. This facilitates debugging meshing input files.The BatchMeshGeneratorAction was created to create multiple mesh generators with simple modifications of the input parameters between each generator created. Both cartesian product and component-wise selections of parameters were implemented.
Integrated boundary conditions may now be skipped when their variable is not defined along the boundary. This situation arises when the element subdomains are modified, but the boundary is not. This situation can be avoided either by disabling the boundary conditions using
Controls
or by making sure theMeshModifiers
also modify the boundary as they modify the mesh.
Conda Package Changes
The
moose-seacas
package has been updated to the2025-02-17
release. Release notes can be found at https://github.com/sandialabs/seacas/releases/tag/v2025-02-27.