MOOSE Newsletter (December 2025)

commentnote:INL Holiday Curtailment

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 derivatives

  • Fixed 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

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 FE object 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 using Elem::true_centroid() instead; code that requires a non-centroidal but quick-to-calculate internal point should be using Elem::vertex_average() instead. - Elem::which_node_am_i() is gone. Use Elem::local_side_node() instead. - The BoundaryInfo::build_*_list() overloads that fill vector arguments are gone. Use the overloads that return vectors instead, or use the multimap getters. - CondensedEigenSystem no longer supports direct access to raw condensed_matrix_A and condensed_matrix_B pointers; use e.g. get_condensed_matrix_A() instead. - The MeshFunction::init() overload taking a tree build type is gone. Use the other init() overload instead. - The poorly named EquationSystems::get_solution() is gone. Use EquationSystems::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 old libmesh/mesh_inserter_iterator.h header is gone. Rely on Node and Elem unpacking specializations to insert communicated objects into a target UnstructuredMesh. - The libmesh_make_unique macro is gone. Use std::make_unique directly. - The old libmesh/auto_ptr.h header and macro is gone. Use std::unique_ptr. - Utility::iota() and Utility::is_sorted() are gone. Use std::iota() and std::is_sorted() - DynaIO::clear_spline_nodes() is gone. Use MeshTools::clear_spline_nodes() instead. - DifferentiableSystem::swap_physics() is gone. Use push_physics() and pop_physics() instead. - DifferentiableSystem::init_qoi() is gone. Override DifferentiableQoI::init_qoi_count() in DifferentiableQoI subclasses instead. - RBParameterized::get_parameter_names() and an RBEvaluation::eval_output_dual_norm() overload have been removed. Use get_parameters_map() or the remaining eval_output_dual_norm() overload. - Drop deprecated MeshBase::insert_node() API. Use add_node() instead - Drop deprecated Parallel::Utils::is_sorted(). Use std::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. Use MeshRefinement::enforce_mismatch_limit_prior_to_refinement()

  • libMesh now throws DegenerateMap exceptions when encountering singularities while evaluating geometric element mappings or factoring dense matrices, not LogicError exceptions, which are reserved for errors in logic. Code catching these exceptions should use the new type, or for compatibility with old libMesh can catch std::exception & e and examine e.what() to determine the exception details.

  • MetaPhysicL code can now run on accelerator/GPU devices, using Kokkos

  • VariationalSmoother now supports meshes with tetrahedral elements.

  • VariationalSmoother now 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.

  • LaplaceMeshSmoother now has API signatures to match VariationalSmoother.

  • Elem::size_vertex_average_normal() now supports Edge3 (and in theory Edge4) elements

  • Added ExodusII_IO::set_unique_ids_from_maps() to set unique_id() rather than id() from Exodus file numbering. This can be useful for efficiency when loading very sparse numberings into a ReplicatedMesh.

  • Added libmesh_assert_valid_point_locator() method to verify PointLocator consistency when debugging with potentially-changed meshes

  • Update 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() public

  • Warn 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 LinearInterpolation class can now support automatic differentiation when performing integration of the interpolation over a finite range.

  • The Intel XPU compute device is now selectable when using libTorch.

  • A custom syntax can now be registered to add the partitioner outside of the Mesh block.

  • 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.

  • ProjectionAux now supports mixing of element dimensions when performing projections from discontinuous finite element fields into node-based degrees of freedom, through specification of elem_to_node_projection_weighting = identity. If attempting to perform such a projection with mixed element dimensions using the default volume weighting, then an error will be emitted

Conda Package Changes