MOOSE Newsletter (April 2025)
Minimum supported MacOS version is now Ventura (13.3)
Due to the recent moose-dev
package changes described below, the minimum MacOS version compatible with MOOSE development is now Ventura (13.3). If you cannot update your MacOS version, please consider using the Docker-based installation option for MOOSE.
MOOSE Improvements
MFEM backend support
MOOSE now has base support for finite element computations using MFEM. This support was developed by the United Kingdom Atomic Energy Authority (UKAEA), originally as part of their Platypus application, but that support has now been merged upstream into MOOSE. Those wishing to get familiar with use of the MFEM backend can look at test cases as well as the class documentation under the MFEM header on our source index page.
capabilities
parameter in tests
specs
The MOOSE test harness provides numerous parameters to skip tests depending on capabilities provided by the current executable. We have checks for the petsc_version
, required_submodules
, the configured ad_size
etc. Those checks all require custom python functions that parse configuration files and probe the source tree.
The new capabilities
parameter combines all the test harness parameters that probe built-in functionality of the executable, and provides a flexible boolean expression parser to construct abitrary conditions that test execution depends on. Capabilities now relies on an application internal registry that can be queried with the --show-capabilities
option. For example
is now
Application and module developers can register their own capabilities using the addCapability
function. Check MooseApp::registerCapabilities()
for examples.
Parsed-expression generation of multiple subdomain ids
The ParsedSubdomainMeshGenerator is able to specify the extent of a single subdomain on the mesh using a parsed expression, able to represent the combinatorial logical expression defining its extent. With the ParsedSubdomainIDsGenerator, we can now evaluate a parsed expression on each element and use the integer result of this evaluation to assign a new subdomain id to the element. This added flexibility facilitates distinguishing multiple elements of a lattice a posteriori, after creating the lattice.
Material property outputs system rework
The material property outputs system was reworked to perform consistently using both specific Outputs
objects and keywords such as all
or none
specified in the outputs parameter of Materials
objects. Several issues were fixed at that time.
Neumann boundary conditions for linear finite volume discretization
Neumann boundary conditions, used to specify a diffusive heat flux for example, have been added to the linear finite volume discretization. This is part of an effort to support conjugate heat transfer simulations in the Navier Stokes module.
MOOSE Modules Changes
Navier Stokes
Users may now specify separator sidesets on variables. These separator sidesets are boundaries that prevent flow, and decouple equations between the two sides of the boundary. This is helpful for coarse mesh multi-dimensional thermal hydraulic simulations.
The DittusBoelterFunctorMaterial was added to compute the Dittus-Boelter correlation for the wall heat transfer coefficient.
Porous flow
Spatially varying initial properties were added to the Kozeny Carman materials. This will serve to model ground fractures with spatially varying apertures.
Subchannel
The examples in the subchannel module have been reorganized into three categories:
Verification: Inputs compared between subchannel simulations and either analytical solutions or other subchannel codes,
Validation: Inputs of simulations compared to experimental data, and
Examples: Inputs showcasing useful techniques in subchannel, unrelated to verification and validation (V&V) efforts. effort.
Reactor
The HexagonalGridPositions was extended to allow the nesting of another positions object within the hexagonal grid. This allows users to obtain all pin positions in a hexagonal core with multiple hexagonal pin lattices within a single object.
LibMesh-level Changes
2025.04.02
Update
Set nullspace for both J and P operators because PETSc may look at either when setting up linear solves
No longer need to manually set hypre memory location for PETSc 3.23. This was previously required for MOOSE stack builds with GPU enabled because PETSc's hook into hypre assumed that any configuration enabling GPU support should always run with data structures on device
Just use
DIFFERENT_NONZERO_PATTERN
inMatCopy
inPetscMatrix::operator=
. This is much more robust than usingSAME_NONZERO_PATTERN
Assert
verify
calls where appropriateChange API name
SparseMatrix::reset_memory
toSparseMatrix::restore_original_nonzero_pattern
. The new API name better reflects both the focus of the API and also that this API may not perform any memory allocation/deallocation as long as previous fills of the matrix have matched the original preallocationBetter error message from
System::read_serialized_vectors()
when encountering a difference between the number of vectors we expect to read vs. the number of vectors declared in the XDR headerLock at
PetscMatrix
level when doing add/set. This will allow user code to remove their mutex locks around matrix assembly and also saves users who did not previously have proper mutex locking in threaded regions of their codeAdd mutex to fparser
setEpsilon
to prevent thread racesAdd
QBase::get_base_order()
API allowing comparison of multiple quadrature rules independent of p-refinement levelUpdate TIMPI submodule
Use MPI-4 APIs for
MPI_Count
, i.e. 64-bit, size support, when availableFix for uninitialized warning with gcc 13.3
Remove phony make code which could trigger multiple netgen builds
Get metaphysicl config include
Allow instantiation of
DenseVector::print
with dual numbersCheckpointIO can now handle some of the
Mesh
caches if needed. MOOSE often skips partitioning when doing checkpoint restart, so now at the libMesh level we can dorecalculate_n_partitions()
andupdate_post_partitioning()
when that is the case.Add begin/end members to DenseVector allowing for range based looping
Avoid creating temporary array for hashword2() overload taking 64-bit inputs
2025.04.17
Update
Autoconf-submodule (ACSM) update
When recent clang versions are detected, the compiler flag
-fno-assume-unique-vtables
is used. This enablesdynamic_cast
to work reliably on macOS 15 (Sequoia) environments, which fixes a number of libMesh and MOOSE failures there.More thorough detection for code coverage support when –enable-coverage builds may require it from multiple languages' compilers.
TIMPI submodule update
Fixes and tests for
timpi_version.h
utilitiesUnit test fixes for C++14 compilers
timpi_pure
attribute for pure functions; on C++17 and newer compilers this prevents ignoring the function return valuesMarked
verify()
andsemiverify()
as pure. This prevents the common usage error of not asserting the result when intended.Removed default
Attributes
values. Code which attempts parallel reductions on user-defined types without first specifying their attributes now fails to compile, instead of compiling but not working correctly.
Added support for creating and computing on arbitrary polygons in 2D
Better tolerance computations when stitching meshes along a boundary with discrete NodeElem elements
Fix for reading of Gmsh files with physicals of different types but the same id numbers
Migrated more print methods of templated classes into headers, to enable user instantiations with unanticipated types
Added "-V" option to the meshtool utility app to apply the
VariationalSmoother
to the input meshMoved
demangle()
tolibmesh_common.h
. Any failures incast_ptr
orcast_ref
in dbg or devel modes are now reported using demangled typenames.Fix for return values of
FE::n_quadrature_points()
: after using a user-specified list of quadrature points rather than a quadrature-rule-generated list, the length of the specified list is now correctly returned. This fixes undefined behavior inJumpErrorEstimator
subclasses with theintegrate_slits
option enabled, which fixes a valgrind-detected error and a potential test failure in libMesh unit tests.Fix for undefined behavior in
SimplexRefiner
. This similarly fixes a libMesh unit test.Fix for a Netgen configuration error: configuring the same Netgen-enabled libMesh build directory for a second time no longer leaves Netgen in an "unbuilt, but marked as built" state.
Refactoring for simplicity and forward compatibility in Gaussian quadrature code
More assertions
2025.04.22
Update
Add option to variational smoother to preserve subdomain boundaries, and add test for new option.
Drop
LOG_SCOPE
calls fromDofMap::dof_indices()
Update citations
Update traffic
Fixes for VTK 9.4
Add check for failures to find VTK macros
Detect new VTK macros from new VTK header file
PETSc-level Changes
2025.04.02
Update
We updated PETSc to version 3.23. For a summary of changes please see the PETSc release page.
Bug Fixes, Minor Changes, and Minor Enhancements
Added support for objects to turn off irrelevant slepc options. This ability helps to minimize PETSc's unused option warnings.
When the TestHarness cannot find the executable corresponding to the set value of the METHOD variable, it now looks for executables for other possible METHOD values and emits a useful error message that the user may want to modify METHOD.
Periodic boundary conditions can now be specified on array variables.
Cross-derivatives
d2/dxdy
can now be computed for the bicubic interpolations.Simulation recovery testing was turned on for the phase field and porous flow modules.
ParsedCurveGenerator can now generate
EDGE3
elements.Meshes are now "prepared for use" before any stitching operations, both in the StitchedMeshGenerator and when stitching hole meshes in the XYDelaunayGenerator.
Unused parameters can now properly be allowed in the
mesh-only
mesh generation mode, using the-w
or--allow-unused
command line option.The MOOSE Test Harness (used in
run_tests
) will now detect and mention executables built with other methods (opt
,devel
,dbg
,oprof
) when no executable has been built with the current method. As a reminder, build methods can be set using theMETHOD
environment variables.The
--force-restart
command line option was added to force restarting even when sanity checks for the match between the checkpoint file used and the current simulation are failing.make clobberall
will now clobber all contrib folders that are not git submodules of MOOSE.Internal side indicators used in adaptive mesh refinement - to measure an error, for example - should now be run on the undisplaced mesh in simulations using a displaced mesh.
The SolutionIC was extended with a new parameter to allow a different block restriction in the domain of application of the initial conditon and the source blocks in the solution file.
Conda Package Changes
2025.04.22
Update to the moose-dev
Package
The moose-dev
conda package was updated in order to address MOOSE build issues encountered after the recent MacOS update to Sequoia 15.4. This required a number of dependency package updates and changes. Context for this issue can be found in idaholab/moose#30227
, and descriptions of the compiler and dependency package updates can be found below.
MacOS Compiler Updates to Clang, MPICH, OpenMPI
The moose-mpi
package (now version 2025.04.17
) was updated to use newer Clang compilers on MacOS, version 18.1.8. This necessitated an update to the MPICH and OpenMPI wrappers as well. MPICH is now version 4.3.0, and OpenMPI is now version 5.0.7. On a related note, gfortran was updated to version 13.3.0 on MacOS platforms to correspond with this change.
GCC, MPICH, and OpenMPI versions were not changed on Linux! They remain at GCC 12.3.0, MPICH 4.2.1, and OpenMPI 4.1.6.
VTK Updated to 9.4.2
The VTK data visualization library was updated to the latest release (9.4.2) for all platforms.
HDF5 Changes
The HDF5 version was updated to 1.14.3
on MacOS, while 1.14.2
remains the installed version on Linux systems.
Python 3.12 Available
Python 3.12 compatibility was added, making the moose-dev
package compatible with Python 3.9 - 3.12. Python 3.12 is now the default version installed when installing the moose-dev
package.
Plotly Added
The interactive graphing library for Python, plotly, is now available in the moose-tools
package. The version currently installed is 6.0.1.