MOOSE Newsletter (December 2025)
INL was closed for its annual Curtailment of Operations period from December 25, 2025 through January 1, 2026. Accordingly, development of MOOSE and developer/user support was very light during this period. The MOOSE development team hopes that all of our collaborators, users, and colleagues around the world had a safe, joyous, and restful holiday season!
An index of all known MOOSE applications, whether open or closed source, currently developed or legacy, has been added to the MOOSE website. Please reach out on GitHub discussions if you would like your application featured.
MOOSE Improvements
MFEM Backend improvements
Changed time-dependent equation system class, TimeDependentEquationSystem, and the respective operator class,
TimeDependentEquationSystemProblemOperator, to set up problems described in terms of the state of the system at the next timestep, instead of time derivativesFixed a bug whereby contributions for some integrated BCs were being incorrectly accounted for in transient problems
Added MFEMMUMPS to provide an alternative to MFEMSuperLU for direct solves using LU decomposition
Removed a workaround in MFEMScalarFESpace and MFEMVectorFESpace for an MFEM bug related to the naming of finite element collections constructed with the default choice of basis
Added MFEMComplexAuxKernel plus a complex counterpart for each existing auxiliary kernel
Introduction of Experimental HP-refinement Capability
As documented on the Adaptivity page, we have introduced an experimental HP refinement capability. The current HP implementation works by performing a coarsening test on elements just flagged for h-refinement (using libMesh error indicators or the Indicator/Marker systems). The coarsening test coarsens in both h and p and notes whichever changes the solution more. If p shows a larger solution change (after doing some weighting based on how many degrees of freedom are added) and the solution is sufficiently smooth as determined by decay rates of Legendre coefficients, then we switch the element refinement choice from h to p. As noted in the documentation for the HPCoarsenTest class, more development is likely required to produce optimal hp meshes.
Finite volume initialization improvements
The computation of side normals was reworked to rely solely on the geometry of the elements rather than leveraging the finite element machinery for computing normals at side quadrature points. The initialization phase of finite volume simulations may now be up to 30% faster, the exact speedup will depend on the simulation.
Mesh smoothing capability
A new variational smoothing technique was added to smooth the mesh with a SmoothMeshGenerator. The variational smoothing algorithm is a Newton-based variational optimizer that minimizes a mixed distortion–dilation energy. It supports 1D/2D/3D meshes, preserves exterior boundaries by constraining nodes, can optionally preserve subdomain (block) boundaries, and can untangle some tangled meshes before smoothing.
Memory consumption tracking in test suite
The test summaries now include memory consumption for the tests. The consumption is shown twice, at the test completion and in the summary. When using parallel computing, the former is the total memory consumption, while the latter, at the bottom, is the memory consumption per processor.
Similarly, the memory consumption is now tracked and stored in a database for the application performance tracking.
MOOSE Modules Changes
Navier Stokes module
The computation of the strain tensor was improved in simulations in a RZ frame of reference. The polar coordinate term was previously missing in all finite volume implementations of the Navier Stokes equations. An approximate 1% change in results was observed in most RZ simulations when processing the improvement.
A Physics class for the single phase weakly compressible flow k-epsilon turbulence model using the linear finite volume discretization was added to the module. This shorthand syntax is intended to simplify the inputs and add significant checks on the parameters being passed to the objects.
Fluid Properties module
The TabulatedBicubicFluidProperties was extended to be able to load a tabulation file tabulated in (specific volume, specific internal energy) and compute the fluid properties with that variable set. The ability to compute some properties using a tabulation and some properties using a different fluid properties object was also greatly extended.
Solid mechanics
Mass damping was implemented for explicit solid mechanics.
Contact
Block restriction was implemented in the explicit contact action.
Thermal hydraulics
Component-based convergence was added to all flow channels and 2D heat structures. Using convergence objects, the convergence criteria can be tailored for each component, to avoid over- or under-solving the equations created for the flow in the channel. Similar efforts will provide these capabilities to other heat structures and junctions in the near future.
libMesh-level Changes
2025.11.25_c144a6e Update
A long-deprecated behavior has been removed: code initializing data using an
FEobject now must prerequest all data it will later access; it can no longer prerequest nothing and rely on libMesh to interpret that as a potential need for everything.A large number of long-deprecated APIs have been removed: - The
DofObject::set_unique_id()overload that returns a reference is gone; use the overload that takes an argument instead. -Elem::centroid()is gone. Code that requires an accurate approximation of ths should be usingElem::true_centroid()instead; code that requires a non-centroidal but quick-to-calculate internal point should be usingElem::vertex_average()instead. -Elem::which_node_am_i()is gone. UseElem::local_side_node()instead. - TheBoundaryInfo::build_*_list()overloads that fill vector arguments are gone. Use the overloads that return vectors instead, or use themultimapgetters. -CondensedEigenSystemno longer supports direct access to rawcondensed_matrix_Aandcondensed_matrix_Bpointers; use e.g.get_condensed_matrix_A()instead. - TheMeshFunction::init()overload taking a tree build type is gone. Use the otherinit()overload instead. - The poorly namedEquationSystems::get_solution()is gone. UseEquationSystems::build_elemental_solution_vector() for elemental data instead. - `System::read_legacy_data()is gone. Use libMesh .xda files that postdate 2007, and show your pre-2007 libMesh .xda files to Roy to amuse and delight him. - The oldlibmesh/mesh_inserter_iterator.hheader is gone. Rely onNodeandElemunpacking specializations to insert communicated objects into a targetUnstructuredMesh. - Thelibmesh_make_uniquemacro is gone. Usestd::make_uniquedirectly. - The oldlibmesh/auto_ptr.hheader and macro is gone. Usestd::unique_ptr. -Utility::iota()andUtility::is_sorted()are gone. Usestd::iota()andstd::is_sorted()-DynaIO::clear_spline_nodes()is gone. UseMeshTools::clear_spline_nodes()instead. -DifferentiableSystem::swap_physics()is gone. Usepush_physics()andpop_physics()instead. -DifferentiableSystem::init_qoi()is gone. OverrideDifferentiableQoI::init_qoi_count()inDifferentiableQoIsubclasses instead. -RBParameterized::get_parameter_names()and anRBEvaluation::eval_output_dual_norm()overload have been removed. Useget_parameters_map()or the remainingeval_output_dual_norm()overload. - Drop deprecatedMeshBase::insert_node()API. Useadd_node()instead - Drop deprecatedParallel::Utils::is_sorted(). Usestd::is_sorted()instead - Drop deprecated qoi code. Unlikely to affect MOOSE user code - Drop deprecated InfFE code. Unlikely to affect MOOSE user code - Drop deprecated MeshRefinement accessor APIs. UseMeshRefinement::enforce_mismatch_limit_prior_to_refinement()libMesh now throws
DegenerateMapexceptions when encountering singularities while evaluating geometric element mappings or factoring dense matrices, notLogicErrorexceptions, which are reserved for errors in logic. Code catching these exceptions should use the new type, or for compatibility with old libMesh can catchstd::exception & eand examinee.what()to determine the exception details.MetaPhysicL code can now run on accelerator/GPU devices, using Kokkos
VariationalSmoothernow supports meshes with tetrahedral elements.VariationalSmoothernow supports fine-grained user-controlled verbosity, and emits better error messages in cases where a smoother optimization solve fails.Added
SparseMatrix::print_coreform_hdf5, to create CSR-structured matrix data in HDF5 files in the Coreform format.LaplaceMeshSmoothernow has API signatures to matchVariationalSmoother.Elem::size_vertex_average_normal()now supportsEdge3(and in theoryEdge4) elementsAdded
ExodusII_IO::set_unique_ids_from_maps()to setunique_id()rather thanid()from Exodus file numbering. This can be useful for efficiency when loading very sparse numberings into aReplicatedMesh.Added
libmesh_assert_valid_point_locator()method to verifyPointLocatorconsistency when debugging with potentially-changed meshesUpdate citations
Add mesh flag allowing Node/Elem unique_id overlap
Remove bad pointer math fixing vertex average side normal for tet4
Update TypeVector math for MetaPhysicL 2.0
Make
solve_for_unconstrained_dofs()publicWarn when user attempts to use absolute step tolerance with PETSc
Bug fixes: - The VariationalSmoother is now calculating target elements properly; this gives better-smoothed results for meshes with triangle, prism, and pyramid elements. - libMesh no longer triggers deprecation warnings with PETSc 3.24 and newer versions - libMesh no longer triggers compiler warnings from NVidia HPC SDK compilers - Add ExodusII::set_max_name_length() to reduce truncation of long identifier strings in ExodusII files - Fix compatibility with AddressSanitizer flags - Fix mesh stitching with NodeElem surface - In exodus reader, if mesh is renumbered, don't load wrong solution vector data
PETSc-level Changes
3.24.2 Update
PETSc was updated to v3.24.2
Bug Fixes, Minor Changes, and Minor Enhancements
The
LinearInterpolationclass can now support automatic differentiation when performing integration of the interpolation over a finite range.The Intel
XPUcompute device is now selectable when usinglibTorch.A custom syntax can now be registered to add the partitioner outside of the
Meshblock.The range function is now output to the documentation for range-checked parameters. Range checks are performed automatically before the construction of the object.
When using uniform refinement of the layers in
Layered*objects, the last layer is now correctly used for the accumulation steps.ProjectionAuxnow supports mixing of element dimensions when performing projections from discontinuous finite element fields into node-based degrees of freedom, through specification ofelem_to_node_projection_weighting = identity. If attempting to perform such a projection with mixed element dimensions using the defaultvolumeweighting, then an error will be emitted