MOOSE Newsletter (September 2025)
MOOSE Improvements
Preliminary Kokkos-MOOSE release
A new GPU backend, Kokkos, was added in MOOSE and is available for preliminary testing with NVIDIA GPUs. Kokkos-MOOSE provides programming and user interfaces that are designed to resemble the original MOOSE interfaces to make adaptation easier and reduce porting efforts. Kokkos-MOOSE currently supports the GPU version of Kernels, NodalKernels, BCs, and Materials and will be continuously extended to incorporate more MOOSE capabilities and support more GPU vendors. See this page to get started with Kokkos-MOOSE.
TestHarness --only-tests-that-require
option
The capability
parameter for test specifications allows for run-time checking of whether a test can or cannot run based on capabilities defined by the application executable. The --only-tests-that-require
command line option has been added to the TestHarness, which allows filtering of tests based on whether or not they depend on a capability.
For example, take a situation in which ./run_tests --only-tests-that-require cuda
is run along with the following test specification:
[Tests]
[needs_cuda]
...
capabilities = 'cuda'
[]
[doesnt_need_cuda]
...
capabilities = 'libtorch'
[]
[]
In this case, the test needs_cuda
will be run because it depends on the cuda
capability, while the doesnt_need_cuda
test will not run because it does not depend on the cuda
capability.
Optimizations
Face and neighbor face material properties are now only computed if the boundary conditions and interface kernels active on the relevant boundary have requested material properties, or if any active constraint has requested a material property. The logic for deciding whether to execute on internal sides for DG and HDG kernels was reworked to limit queries in the dedicated warehouses within each subdomain. The expected computational cost reduction for each simulation is highly dependent on the set of active features and the cost repartition. Use profiling to determine the computational cost repartition.
MOOSE Modules Changes
Solid mechanics
The ReactionForceAux was added to leverage the TaggingInterface to output the forces, as applied when computing the residual, at the desired nodes.
Contact
The PenetrationLocator was upgraded to be able to support finding elements that are proximal to but not connected to these nodes. This may occur on non-conforming surface meshes, such as Flex IGA meshes or 3D meshes with hanging nodes from adaptive refinement.
Objects based on the GeometricSearchInterface
still default to the old search_method=nearest_node_connected_sides
, which only finds paired points on sides connected to the nearest node to a queried point, but with the new search_method=all_proximate_sides
option, contact and gap objects can instead use the point locator octree to test all sides touching a point.
Fluid Structure Interaction
The Newmark-Beta time integration scheme can now be used in Arbitrary Lagrangian Eulerian (ALE) simulations. New interface kernels enforce continuity of flux and continuity of the solution via the penalty method across an interface with the solid velocity computed using the Newmark-Beta method.
Phase field
A set of kernels was added to solve the phase field equations coupled with the Navier-Stokes equations for advection. This is notably used for multiphase flow, as it involves the coupling of phase tracking algorithms with the Navier-Stokes equations. The advantage of using the phase field method for this coupling is that it does not require the explicit calculation of the interface.
libMesh-level Changes
2025.09.18
Update
Limited support for untangling of tangled meshes in
VariationalMeshSmoother
Support for smoothing meshes including pyramids with
VariationalMeshSmoother
Added
SparseMatrix::read_coreform_hdf5()
method for reading CSR sparse matrix data from an HDF5-based formatDefault to syncing C++ streams for more reliable console output in cases like threaded output
Made
libMesh::out
andlibMesh::err
thread-safe even when emitting non-ASCII (unicode, color codes) outputMade
prepare_for_use()
optional after mesh stitching. This will enable much faster parallel generation of complex meshes in certain MOOSE workflows.Added optional parameter to
build_side_list_from_node_list()
to allow only some nodesets to be converted rather than allAdded
Parameters::Value::type_info()
methodUpdated autotools to their latest versions. This fixes a linker bug that was preventing libMesh compilation with some newer software stacks.
Use
MatGetValue
instead ofMatGetRow
inPetscMatrix::operator()
, to improve compatibility and efficiencyPerfLog
performance logging of Netgen tetrahedralizationBug fixes for parallel
StaticCondensation
operationBug fix for certain use cases of
PetscVector
constructed directly from PETScVec
Bug fix for triangulation of boundaries with quadratic edges
Bug fix for an adaptive refinement failure case on distributed meshes
Fixed handling of linearly-dependent data in reduced basis EIM training
Fixed small
PetscViewer
memory leaks inprint_matlab()
methods
PETSc-level Changes
Bug Fixes, Minor Changes, and Minor Enhancements
PythonFMU has been added to the
moose-dev
container using GCC.Added an Intel LLVM compiler container option.
A GenericConstantStdVectorMaterial was added to use
std::vector<Real>
properties. It is modeled after the GenericConstantVectorMaterial. TheGenericConstantRealVectorValue
has been deprecated.Direct output of
std::vector<Real>
properties, using theoutputs=...
parameter, was addedThe SideSetsFromNodeSetsGenerator was extended to support converting only a selection of nodesets.
The ADScaledCoupledTimeDerivative was added to the framework to serve as the coupled time derivative kernel with an option for a scaling factor. At this time, only
ADReal
-valued material properties can be used as scaling factors.ConservativeAdvection can now use the gradient of a variable as the advecting velocity.
An AD-version of the ConservativeAdvectionBC was added
The ElementAdaptivityLevelAux was added to output the level of h- or p-refinement of each element.
Scalar variables can now be used as
ADReal
-valued functors. This greatly expands the number of objects that can accept scalar variables as inputs. The use of AD notably helps computing a numerically exact Jacobian.The FunctorKernel was expanded to simplify setting up the equation
u = <a functor>
in a single kernel.