MOOSE Newsletter (October 2024)
MOOSE Improvements
New System: Convergence
The Convergence system was added, which allows the user to specify customized stopping criteria for their solves/iteration. Currently, only the nonlinear solve is supported, but this is planned for extension to fixed point iteration and steady-state detection. The main class to add new capability is PostprocessorConvergence, which allows a post-processor to be compared to a tolerance to determine convergence. This post-processor should be executed on the new execute_on
option, NONLINEAR_CONVERGENCE
.
Standardization of Physics initialization
For all Physics
classes deriving from PhysicsBase
, the variable initialization behavior has been standardized. Variables should be initialized using, in order of priority:
user-specified initialization input parameters, which should always be obeyed
from an exodus file, with the
initialize_variables_from_mesh_file
parameter, if no user specified values for a variable are requestedfrom the checkpoint file specified to the
Problem
for the restartfrom the default value of the initialization parameters, if and only if none of the previous conditions apply
Direct Nodeset generation
In MOOSE, we often forego the concepts of nodesets and sidesets to simply use the term "boundary", which refers to one or the other depending on the objects at hand. For example, a Dirichlet boundary condition for a Lagrange variable will use a nodeset for its boundary parameter, while a postprocessor computing the diffusive flux with a monomial variable will use a sideset for its boundary parameter. As such, we focused our mesh generation effort to be able to easily create sidesets, and the nodesets can be easily generated from these sidesets.
However, for the specific need of generating 1D nodesets within a 3D mesh, we needed to be able to generate nodesets directly. The ParsedGenerateNodeset joins the roster of mesh generators for that purpose. It offers much of the flexibility of the ParsedGenerateSideset and their design are very similar.
Mesh conversion to all simplices (triangles and tets)
The ElementsToSimplicesConverter was created as a mesh generator. An input mesh will be modified to replace each non-simplex mesh element with a set of simplices connecting the same nodes. Each quad is split into 2 triangles, each pyramid into 2 tetrahedra, each prism into 3 tets, and each cube into 6 tets.
Ability to set multiple time integrators
For simulations using multiple variables/equations, there is now the option to use different time integration methods for each variable/equation.
New tests scheduler for High Performance Computing
A new scheduler was added to the MOOSE test suite to be able to leverage HPC platforms for continuous integration.
MOOSE Modules changes
Navier Stokes: Skewness correction changes
The gradient of the pressure, both corrected and uncorrected, that are used in Rhie-Chow interpolation are now both using skewness correction when skewness correction has been specified for the pressure variable.
Skewness-corrected gradients are now computed using the Least-Squares method rather than Green Gauss. With these two modifications, oscillations on skewed meshes in simulations with volumetric body forces are no longer present.
Thermal hydraulics: use of field variables on node elements for Junctions
For cases with large numbers of Junctions, it was observed that performance was severely degraded. This was explained by the use of scalar variables, which are intended to have a global coupling to other fields. By instead using field variables on node elements, the expected coupling to other variables is much reduced, and performance was greatly improved.
libMesh-level Changes
2024.10.17
Update
Support for reading (the surface triangulations defined by) STL files. This combined with our recent tetrahedralization support also allows for creating volume meshes from STL files; however, creating high-quality volume meshes from arbitrary STL files is still a work in progress.
Support for higher-order (up to quintic) vector-valued FE bases in the Nédélec (first kind) and Raviart-Thomas FE families.
Better handling for odd IsoGeometric Analysis extraction operators, and better error handling for broken IGA operators.
Better unit test coverage for NodeElem; fixes to NodeElem methods which should be no-op but instead threw errors.
Unit test coverage for fifth-order
MONOMIAL
elements. So far new tests have not uncovered any problems, but based on user reports of convergence issues, we recommend limitingMONOMIAL
variables to fourth-order.Fixes for condensed eigensolve support after mesh reinit.
Fixes for caching of FE data on sides of meshes with non-uniform p-refinement levels.
Minor fixes for compiler complaints from
nvc++
andclang++ -fsanitize
.Properly register
--keep-cout
and--drop-cerr
warnings with PETSc to avoid "options you set that were not used" false positives.Better error messages when tetrahedralizing a non-watertight input boundary mesh.
Refactoring in AbaqusIO, to enable subclasses in MOOSE code with experimental support for more advanced file features.
Improvements and fixes in Reduced Basis code, particularly the Empirical Interpolation Method classes.
Bug Fixes and Minor Enhancements
The GenericFunctorTimeDerivativeMaterial was added to be able to create time-derivative functor material properties of other functors.
The ParsedAux can now directly leverage Real and ADReal-valued material properties, without first converting them to auxiliary variables.
Block-restriction of indicators in adaptivity is now fully supported. Previously only markers could be block restricted, while indicators had to cover the whole domain.
The Coupleable interface now supports an additional routine for retrieving the time derivative of nodal and DoF values with automatic differentiation.
A diagnostics for "waterproofness" of sidesets, e.g. covering the entire external boundary of the mesh, was added to the MeshDiagnosticsGenerator.
A new execution flag
NONLINEAR_CONVERGENCE
was added for executing objects right before evaluating the residual in nonlinear iterations and assessing convergence.A new
timeIntegral()
routine was added to Functions to compute the integral from timet1
tot2
at pointp
. The routine must be implemented for every Function requiring it.A
FunctorMaterial
was added to compute the time derivatives of other functors. This facilitates the creation of complex expressions directly from the input file.The AverageVariableChange postprocessor was added to compute the change over time steps of a variable. This is part of a larger effort to provide greater flexibility in setting convergence criteria.
FluidProperties
can now return exceptions when aNaN
is encountered, using the NaNInterface. Previously, only ignoring, returning an error or a warning were possible.The JSONFileReader was templated to be able to read JSON files with leaves of strings rather than Reals.
Verification and validation document lists can now be placed in the top level of
[Tests]
specifications.The SideFVFluxBCIntegral was added to be able to postprocess the fluxes of a
FVFluxBC
directly rather than re-implementing the flux computation in a postprocessor.
Conda Package Changes
moose-mpi
, our lowest level package, has been updated to allow users wishing to build their own PETSc, libMesh, and WASP to do so without needing to install any additional Conda packages.HDF5 has been downgraded to solve issue: Floating Point Exception, #28350
The minimum MacOS build SDK has been bumped to MacOS Big Sur (11.3). Users of MacOS versions older than this may run into issues building and running MOOSE, MOOSE dependencies, or other MOOSE-based applications.