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!

commentnote

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 of Functions 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 into libmesh_LDFLAGS.

  • Include <memory> in getpot.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() API

  • Allow 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 users

  • Netgen submodule updates, including bug fixes for undefined behavior (which caused -fsanitize error messages) and for a node-ordering-dependent bug in tetrahedralizing domains with holes

  • Added init_condensed_matrices API, as part of ongoing work for doing more solves after condensing away constrained Degrees of Freedom

  • Added generic Elem::quality(JACOBIAN, SCALED_JACOBIAN) implementations

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