MOOSE Newsletter (June 2025)
MOOSE Improvements
New user-oriented tutorial featuring the National Reactor Innovation Center DOME Test Bed
A user-oriented tutorial was released on the MOOSE website. It features a simplified nuclear engineering study of the DOME shield, used in the National Reactor Innovation Center to test micro-reactors. It does not involve or teach coding new objects, only using techniques in MOOSE tools to create simulations with existing, pre-developed capabilities.
It can be taught using the pre-compiled MOOSE combined binary, reducing setup time to a minimum.
NEML2 Migration into the framework
The New Engineering Materials Library 2 (NEML2) integration was moved from the solid mechanics module to the framework. This capability has grown in scope beyond fluid mechanics, offering GPU-based capabilities for materials, kernels, and other parts of a regular simulation. This is one of the three pathways explored in MOOSE for leveraging GPUs for simulations. Updated installation instructions can be found here.
Interior Penalty Hybridized Discontinuous Galerkin (HDG) Method
MOOSE previously supported the Local HDG (L-HDG) method. It now also supports interior penalty HDG (IP-HDG). More information about the HDG kernel system can be found in HDG Kernels. There is IP-HDG support for advection, diffusion, and the incompressible Navier-Stokes equations. The same pull request that introduced IP-HDG significantly refactored the L-HDG capability. Instead of splitting primal and facet variables across auxiliary and nonlinear systems respectively with the former being updated during a "post-check", all variables are now put into the nonlinear system. This enables typical use of Newton line-search algorithms whereas previously only line_search = none
was supported. Statically condensing the global system down to the facet degrees of freedom is now achieved using a static condensation preconditioner. This preconditioner may also be used for non-HDG discretizations. As an example, it can be used to condense out internal degrees of freedom in greater than first order H1 discretizations.
MFEM Backend improvements
Introduction documentation was added for the MFEM backend. It can be found at this link. Subdomain support was improved for MFEM-based kernels, and subdomains can now be specified by name in MOOSE input files using the MFEM backend.
New Positions objects
The NodePositions was added to gather the positions of nodes in either the mesh or subdomains of the mesh into a Positions object. Note that these objects can then be used to create MultiApps or set up reduction operations, MeshDivisions, and so on.
The ParsedDownSelectionPositions was added to downselect positions from another Positions
object using a parsed expression and/or combinations of criteria. We expect this provides sufficient flexibility to avoid having to code new Positions
objects for most applications.
Physics and ActionComponents workflow
A helper class was created for placing and rotating ActionComponents, the ComponentMeshTransformHelper
.
Physics can now use dedicated APIs to skip the creation of a variable, an initial condition, or a time derivative when another Physics
or other user syntax has already created them. This simplifies combining Physics
.
To further improve compatibility between Physics
and legacy or new syntax, tasks such as 'adding kernels' or 'adding boundary conditions' can now be skipped using the dont_create_<xyz>
parameters shared by all PhysicsBase
-derived classes. This partial setup can then be replaced by the other syntax.
Field Transfers changes
The search_value_conflicts
is now turned off by default for MultiAppGeneralFieldTransfer
-derived classes. This diagnostic was scaling as the square of the size of the simulation and should only be used for debugging. Turning it off by default is more in line with current development practices.
The error_on_miss
diagnostic is now turned on by default for MultiAppGeneralFieldTransfer
-derived classes. This diagnostic comes at no-cost and prevents missing values for target regions that are not mapped properly to source regions. The solution to these errors is usually to increase the size of the source region bounding boxes.
UserObjects
, including postprocessors and vector-postprocessors, can now be executed in the parent application right before the transfers
, on the TRANSFER
execution flag. This permits the provision of the most up-to-date values by these user objects. In the child applications, the TIMESTEP_END
default execution flag should suffice to obtain updated values to be transferred.
Performance testing using the Continuous Integration suite
The test harness and continuous integration (CI) suite can now store simulation metrics, such as the computation time, and automatically add to the relevant database on shared high performance computing (HPC) clusters. This lets us track the computing cost over time, notably to report on speedups and prevent accidental slowdowns.
MOOSE Modules Changes
Navier Stokes module
A two phase mixture model using the drift flux approximation was added in the linear finite volume discretization of the Navier Stokes equations. This model is accessible using the Navier Stokes Two Phase Mixture using a Linear Finite Volume discretization / WCNSLinearFVTwoPhaseMixturePhysics.
Please note that buoyancy terms are not currently reconstructed, hence accuracy may be limited in buoyant regimes near boundaries. Additionally, non-orthogonal meshes should not be used with the linear finite volume implementation of the mixture model at this time.
libMesh-level Changes
2025.06.26
Update
Complete overhaul of
VariationalMeshSmoother
code. This gives support for more finite element types and converges to more optimal meshes.Enabled FE caching as appropriate for variable types with a dependency on edge/face orientation. Added command-line
--disable-caching
option to help with debugging.Refactoring of
StaticCondensation
code, improved support for static condensation with adaptive mesh refinement.Added
matrixsolve
app for testing linear solver behavior with mesh filesAvoid redundant work when preparing algebraic ghosting in parallel
Compatibility with more Abaqus-format mesh files
Support for
Elem::opposite_side()
onPrism
elementsFixes for
BoundaryInfo::sync()
with certain combinations of serial and distributed mesh status. Enabled serialization and/or redistribution of distributed boundary meshes with separate interior meshes. AddedMeshBase::interior_mesh()
to track the interior mesh of a boundary mesh.Fix unintentionally set
parent()
on 0D side elements of 1D interior elements. Removed deprecatedproxy
option from side and edge element construction.Refactoring to use new
Elem::inherit_data_from()
helper. This likely fixes potential issues on certain IGA and p-refined meshes.More exhaustive testing for
BoundaryInfo::sync()
methods, including multiple combinations of mesh type, distribution status, and dimensionality.Clarifications in Doxygen documentation
Minor code simplification/refactoring
Update TIMPI submodule
Enabled
minloc()
andmaxloc()
of arbitrary data types overridingTIMPI::OpFunction<T>
. Added tests usingOpFunction<std::pair>
.Added missing cstdint include, fixing builds with some compilers.
Bug Fixes, Minor Changes, and Minor Enhancements
The PatternedCartesianMeshGenerator can now accept a user-parameter for the boundary to use for stitching meshed elements of the pattern.
The StitchedMeshGenerator now properly combines subdomains with the same name when merging two meshes. It also offers a boolean parameter to prevent this new default behavior.
The Convergence system can now be used with linear systems, used with
solve_type = LINEAR
in theExecutioner
block.The
OversampleOutput
class, used to refine meshes before using them for output, has been renamed toSampledOutput
and now supports the block restriction of the simulation mesh for sampling purposes. This enables block-restrictedExodus
output.Application parameters should no longer be copied when creating the application, a const-reference should be used instead.
The Console output header should be output to
Exodus
files.The XYMeshLineCutter now preserves mesh sidesets properly when cutting along a sideset.
The console output header for MFEM-based simulations now outputs most of the information usually found for libMesh simulations.
The MeshDisplacedInterface was added to user objects to let them act when the mesh has been displaced. If the mesh is not displaced, this new interface's callback is not triggered.
The FormattedTable class was greatly optimized and has achieved over 10x speedup on simulations that had maximal table output with little simulation cost.
The FunctorKernel class was added to compute the contribution to the residual and the Jacobian in a nonlinear system using the evaluation of an
ADReal
-valued functor on every quadrature point.Support for a temperature-dependent heat transfer coefficient for ambient convection, calculated using the Churchill-Ch correlation, was added to the thermal hydraulics module.
Second-order nodal variable support was added to SolutionUserObject.
The ParsedPostprocessor was expanded to support the use of "pp_symbols" and "pp_names" parameters helping with unsupported characters in parsed expressions.
The test harness can now be specify the memory requirement per GPU of a test. This facilitates testing high-memory simulations with the appropriate memory request for the HPC simulation jobs.