MOOSE Newsletter (August 2024)
OpenMPI added to Conda MOOSE Packages alongside MPICH
You may now specify either OpenMPI or the MPICH MPI wrapper when installing MOOSE Conda packages by appending openmpi
or mpich
to the conda create/install
line:
conda create -n moose moose-dev openmpi||mpich
Note: OpenMPI, being a new package addition, is a bit under-tested at the moment. It is recommended for use only by experienced users and developers!
MOOSE Improvements
New system: Correctors
The Corrector system was introduced to offer first-class support for modifying solution variables (also called nonlinear variables, except when using the linear finite volume discretization). This can be for re-normalization purposes, for shifting the entire variable, and so on. Correctors
derive from UserObjects
; they are simply specialized for this purpose and use the [Corrector]
syntax. We are curious to see how users seek to modify the output of the nonlinear solver, so please let us know how you use this new system!
New system: MeshModifiers
The MeshModifier system was introduced to offer first-class support for modifying the mesh during a simulation. This can be to change the subdomain id of certain elements, to add or remove sides from a sideset, and so on. MeshModifiers
derive from UserObjects
; they are simply specialized for this purpose and use the [MeshModifier]
syntax.
We are curious to see how users seek to modify the mesh during a simulation, so please let us know how you use this new system!
MeshModifier
used to be the old name for MeshGenerators
. If you have a really old input file, you may see mesh modifiers with similar names to the mesh generators. The correct fix will be to change the names of the objects in the input file to their corresponding mesh generator.
Warnings and warning tallies now available for SolutionInvalidInterface
SolutionInvalidInterface now offers the option to create warnings that are tallied during a simulation, similar to the solutionInvalid
-cases, but do not cause the solution to be rejected. Knowing the number of instances that a warning was triggered is helpful for the modeler to decide manually whether the solution is acceptable. These warnings are created using the flagSolutionWarning
routine.
Block restriction debug output
Block restriction of objects can now be output using the "show_block_restriction" parameter in the Debug block.
Condensation of constraint equations in eigenproblem solves
When constraints (such as those at "hanging nodes" generated by adaptive mesh refinement) are present in the nonlinear system, MOOSE now condenses constrained rows and columns out of the system matrix before solving for eigenvalues and/or eigenvectors. This improves solve efficiency, but more importantly it precludes the possibility of ending up with spurious eigenmodes corresponding to the constraint equations rather than to the physical system.
MOOSE server improvements
These improvements will be available on the next update of the VSCode MOOSE plugin.
When writing a new object in an input, the required parameters are automatically added to the input file. The user still has to fill in their value.
!include
directives are no longer removed by automatic formatting.Inputs with a broken format will no longer be subject to automatic formatting, which would not improve the broken format.
Parameters with a specific string type, for example
FunctionName
, will now automatically suggest the valid inputs from the rest of the input file. In this example, the plugin might suggest the list ofFunctions
already specified in the input.
MOOSE Modules improvements
Second order reactor meshing
Second order elements can now be generated by the PeripheralRingMeshGenerator, PatternedCartesianPeripheralModifier and PatternedHexPeripheralModifier. The reactor module's support for second order elements is essentially complete.
Automated adaptation of assembly background meshes in core lattices
For core lattices built with assemblies with meshes which were not conformal, there is now an option in the CoreMeshGenerator, triggered by setting ReactorMeshParams/"flexible_assembly_stitching" to true
, to automatically perform flexible stitching by re-meshing the background regions. This is especially useful for assemblies which do not have the same number of pin cells.
Added fluid properties class for a two-phase fluid mixed with a non-condensable gas
The TwoPhaseNCGPartialPressureFluidProperties class was added, which derives from TwoPhaseNCGFluidProperties
, takes any TwoPhaseFluidProperties
and SinglePhaseFluidProperties
as input, and creates an IdealRealGasMixtureFluidProperties, which computes gas mixture properties using a ideal partial pressure mixing assumption.
This class is suitable for two-phase flow applications that may feature a non-condensable gas. Such a flow model is planned for one-dimensional components in the Thermal Hydraulics module later this year.
libMesh-level Changes
2024.08.17
Update
Don't leak temporary Netgen
LDFLAGS
intolibmesh_LDFLAGS
.Include
<memory>
ingetpot.h
for more compiler compatibility.Implemented an improved
ASPECT_RATIO
quality metric for Quad elements.Added
Quad::quality(WARP)
implementation.Added unit tests for mesh smoothers.
Fixed
ReplicatedMesh(DistributedMesh &)
construction.Report a more useful error message when asked to tetrahedralize a broken boundary.
Add
Elem::edges_adjacent_to_node()
APIAllow all Petsc matrix types to proceed from a common base class.
Call netgen only on rank 0, then broadcast, for better reliability when tetrahedralizing in parallel.
Add generic
Elem::quality(MIN,MAX_DIHEDRAL_ANGLE)
implementation.Close solution before zeroing for eigen systems.
Add matrix iterator APIs to match vector iterator APIs.
Fixes for compilations using single/triple/quadruple precision
Netgen handling for unprepared inputs, non-contained holes
2024.08.30
Update
Temporarily disable SIGFPE (if it's enabled) before opening ExodusII files, to work around a bug in HDF5 1.14.3
Fixes for SIGFPE in fparser, Clough-Tocher FE, and example codes
Added
FPEDisabler
class to make temporarily disabling SIGFPE easy for usersNetgen submodule updates, including bug fixes for undefined behavior (which caused
-fsanitize
error messages) and for a node-ordering-dependent bug in tetrahedralizing domains with holesAdded
init_condensed_matrices
API, as part of ongoing work for doing more solves after condensing away constrained Degrees of FreedomAdded generic
Elem::quality(JACOBIAN, SCALED_JACOBIAN)
implementationsDisabled default Netgen build behavior of
-march=native
. This was causing "Illegal instruction" errors at program startup on some systems whose native architecture does not support the full instruction set available on our build boxes.
PETSc-level Changes
PETSc updated to 3.21.4
The moose-petsc
package has been updated alongside the MOOSE repository submodule to version 3.21.4. Consequently, the moose-dev
conda environment was updated to version 2024.08.05
. All moose-dev
packages versioned after this date should contain PETSc 3.21.4. To obtain a newer version of the MOOSE development packages, please follow our getting started instructions and create a new MOOSE conda environment. Alternatively, one may also attempt an update of their current conda environment by performing the following commands, assuming that your development environment is named moose
:
conda activate moose
conda update moose-dev
Bug Fixes and Minor Enhancements
The Terminator can now output messages without failing the time step or returning an error, with its new 'NONE' option to the "fail_mode" parameter.
VectorNeumannBC
was renamed to DirectionalNeumannBC for clarity.MeshExtruderGenerator
was deprecated to prepare for its removal, as the AdvancedExtruderGenerator offers all its functionalities and more.MaterialVectorPostprocessor
was renamed to ElementMaterialSampler to follow the naming convention used for the other vectorpostprocessor sampler objects.TransientMultiApp now always restores by default at the end of fixed point iterations. Not restoring was an optimization that is not valid if there are stateful properties or, generally, quantities computed on
TIMESTEP_BEGIN
.