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

min_ad_size = 150
method = '!dbg'

is now

capabilities = 'ad_size>=150 & method!=dbg'

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

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 in MatCopy in PetscMatrix::operator=. This is much more robust than using SAME_NONZERO_PATTERN

  • Assert verify calls where appropriate

  • Change API name SparseMatrix::reset_memory to SparseMatrix::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 preallocation

  • Better 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 header

  • Lock 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 code

  • Add mutex to fparser setEpsilon to prevent thread races

  • Add QBase::get_base_order() API allowing comparison of multiple quadrature rules independent of p-refinement level

  • Update TIMPI submodule

    • Use MPI-4 APIs for MPI_Count, i.e. 64-bit, size support, when available

    • Fix 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 numbers

  • CheckpointIO 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 do recalculate_n_partitions() and update_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 enables dynamic_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 utilities

    • Unit test fixes for C++14 compilers

    • timpi_pure attribute for pure functions; on C++17 and newer compilers this prevents ignoring the function return values

    • Marked verify() and semiverify() 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 mesh

  • Moved demangle() to libmesh_common.h. Any failures in cast_ptr or cast_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 in JumpErrorEstimator subclasses with the integrate_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 from DofMap::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 the METHOD 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.

commentnote:Linux compiler/wrapper versions unchanged

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.