MOOSE Newsletter (February 2025)
MOOSE Improvements
MooseVariableData Optimization
The MooseVariableData
class was optimized, leading to a 5-10% speedup on diffusion benchmarks. All simulations using regular non-vector finite element variables and not using automatic differentation should be faster, though the speedup may be limited for simulations for which the hot spot is not variable value calculations.
New sanity checking for explicit time integrators
When using an explicit time integrator, we will now check that there are kernels contributing to the mass matrix.
MOOSE Modules Changes
Navier Stokes module
Advection of passive scalars in porous media was added to the (nonlinear) finite volume discretization used for simulations used with a Newton-based solver.
The Physics
implementing the linear finite volume discretization of the Navier Stokes equation, specifically for SIMPLE/PIMPLE-based solvers, now supports transients.
In the linear finite volume discretization of the fluid heat transfer equation, the variable to solve for can now be either enthalpy or temperature. Using enthalpy is expected to facilitate the solution of multi-phase problems.
Thermal hydraulics module
WallTemperature1PhaseClosures-derived closures will now generate wall temperature materials for each individual heat transfer when they are used with multiple heat transfers between flow channels and structures.
Multiple (or no) closures can now be specified in a flow channel.
Fluid Properties module
The IdealRealGasMixtureFluidProperties was improved. It now supports the (p,T), (T,v) and (v,e) variable sets.
libMesh-level Changes
2025.02.25
Update
Bug fix:
normals
vectors at the sides of edge elements in 3D, which were previously hard-coded to return(-1,0,0)
and(1,0,0)
at points 0 and 1 respectively (the correct solution only for x-axis-aligned edges), are now correctly calculated for all edges in 2D/3D. Compatibility with this fix required a corresponding fix in one MOOSE application; developers of any applications not in MOOSE CI who use non-x-axis-aligned edge elements may wish to test their codes for result changes with this update.Bug fix: H(curl) and H(div) element calculations are now correct on 2D elements embedded in 3D space and not parallel to the xy plane.
Bug fix: Some TIMPI communications of "packed-range" data (data with variable-size data types), when given enough input data (typically ~4MB by default) to split between multiple buffers and given an output iterator that requires correct incrementation, were not correctly preserving that iterator from one buffer to the next. This has been fixed.
Fix for a multithreading error in applications where multiple threads are encountering elements with negative mapping Jacobians
Preconditioning option, to scale new raw degrees of freedom, when importing mesh constraint rows from a sparse matrix. This can greatly improve solver robustness on such constrained systems.
Support for the combination of subdomain-restricted variables with subdomain-spanning mesh constraints. This fixes errors from certain use cases of subdomain-restricted variables on IsoGeometric Analysis meshes.
Command line option
--mpi-thread-type
to manually choose between "single", "funneled", "serialized", and "multiple" MPI initialization threading options. Initialization still defaults to "funneled" (for maximum compatibility with older MPI implementations), but users of slate/strumpack may need to specify "multiple" for compatibility with those packages.PetscMatrix support for hash-table-based matrices with newer PETSc versions. This will allow MOOSE much more flexibility in problems (e.g. contact) where a priori determination of matrix sparsity patterns is difficult.
Fixes for
HYPRE_SetMemoryLocation
in more complicated (e.g. field split) configurationsRemoved
contrib/boost
, which was a version incompatible with C++17. libMesh codes (including MOOSE) which require boost now must have an external boost installation to use.Support for and compiler flag selection for configuring libMesh with newer Intel compilers
Bug fixes and first-order two-dimensional test coverage for VariationalMeshSmoother.
MeshTools::n_connected_components()
function to count the number of connected components in a meshAdded operator[] for DenseVector. This is more consistent with other vector/map container types, and enables more compatibility with generic templated algorithms.
PetscMatrix::frobenius_norm()
method, and refactoring of other norm calculationsNew
transient_ex3
example application demonstrating a explicit DG/FV formulation of the 2D advection equationImprovements and more options in
calculator
appImprovements and bug fixes in reduced-basis code
New grad(div()) problem example code with Raviart-Thomas elements
Support for "packing" for Cap'n'Proto users
Bug fix in FParser optimized JIT output
Bug fix for
elem_default_orders()
print style inMeshBase::get_info()
andprint_info()
.Bug fix for corrupt time stamps in Exodus outputs with a single time step
Bug fixes in programmatic setting of PETSc preconditioners
Workarounds for older PETSc error-checking macros are now removed; raw PETSc code should use
LibmeshPetscCall
for error checking.General cleanup in autoconf (
./configure
source) codeGeneral refactoring in
FEInterface
Bug Fixes and Minor Enhancements
Radiative boundary conditions no longer have a default emissivity of 1. The emissivity is now required in the derived classes that use this emissivity.
The
Bounds
system can now be used with a displaced mesh.The AdvancedExtruderGenerator can now set boundary names for the top and bottom extruded boundaries
The
--color
command line arguments to display colors in the console now takes precedence of theMOOSE_COLOR
environment variableLinear finite volume variables can now be loaded from Exodus files
The current commit/version of the application in use is now added to the Exodus file output
Synchronization times are now consistently honored in
Outputs
A command line argument was added to suppress header output to the console
MooseObjects now have the ability to disable specific blanket PETSc options not applicable to the simulation.
Conda Package Changes
scripts/versioner.py
will begin handling the entire "bump" process employed when performing any actions requiring changes to Apptainer/Conda recipes. Please see the external wiki page detailing the process: Updating Packages.