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

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) configurations

  • Removed 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 mesh

  • Added 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 calculations

  • New transient_ex3 example application demonstrating a explicit DG/FV formulation of the 2D advection equation

  • Improvements and more options in calculator app

  • Improvements 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 in MeshBase::get_info() and print_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) code

  • General 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 the MOOSE_COLOR environment variable

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