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

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.

commentnote:Known limitations

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 files

  • Avoid redundant work when preparing algebraic ghosting in parallel

  • Compatibility with more Abaqus-format mesh files

  • Support for Elem::opposite_side() on Prism elements

  • Fixes 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. Added MeshBase::interior_mesh() to track the interior mesh of a boundary mesh.

  • Fix unintentionally set parent() on 0D side elements of 1D interior elements. Removed deprecated proxy 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() and maxloc() of arbitrary data types overriding TIMPI::OpFunction<T>. Added tests using OpFunction<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 the Executioner block.

  • The OversampleOutput class, used to refine meshes before using them for output, has been renamed to SampledOutput and now supports the block restriction of the simulation mesh for sampling purposes. This enables block-restricted Exodus 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.