MOOSE Newsletter (January 2022)

Conda MPICH Updated to 3.4.2

To gain enhanced support for newer platform architectures alongside various bug fixes and enhancements, the moose-mpich package was updated to MPICH 3.4.2 (released May 2021). This update can be obtained by activating the conda MOOSE environment and performing:


conda update --all

where the appropriate versions and build numbers in the update output should be at least the following:


Package                  Version            Build
=====================================================
moose-libmesh            2021.12.15         build_1
moose-libmesh-vtk        9.1.0              build_1
moose-mpich              3.4.2              build_0
moose-petsc              3.15.1             build_4

MOOSE Improvements

PeripheralTriangleMeshGenerator

A new mesh generator available in the MOOSE reactor module, the PeripheralTriangleMeshGenerator, allows users to take an arbitrary 2-D input mesh (typically a reactor core) and automatically add a triangulation of the area in between the input mesh boundary and a circular periphery. For thick peripheries, element size within that area can be reduced by user-specified parameters defining extra circles of element vertices to add. The output mesh may then be passed to other generators for further extension, extrusion to 3-D, etc.

Figure 1 shows an example triangulation around an existing core mesh.

Figure 1: An example triangulation generated by PeripheralTriangleMeshGenerator using Steiner point rings.

PeripheralRingMeshGenerator

Another new mesh generator, PeripheralRingMeshGenerator, is also available in the MOOSE reactor module. The mesh generator adds a 2D peripheral region using first-order quadrilateral elements (i.e., QUAD4) with a circular external boundary to the input 2D mesh. It provides similar functionalities to PeripheralTriangleMeshGenerator, but with quadrilateral elements. PeripheralRingMeshGenerator also works well for reactor cores with explicit pin geometries in addition to coarser meshed assemblies, and it can be used recursively on a mesh to add as many rings of peripheral regions as desired.

Figure 2 shows an example of the peripheral mesh generated by this mesh generator.

Figure 2: An example peripheral ring (cyan region) generated by PeripheralRingMeshGenerator.

Flux boundary conditions for the Navier Stokes finite volume implementation

Mass, momentum, energy and scalar quantity flux boundary conditions were added in order to facilitate coupling between multi-dimensional fluid simulations and subchannel or system-level simulations. The boundary conditions accept multiple formulations, based on conserved or primitive variables, enabling maximum flexibility and reducing the need for additional conversion of quantities between coupled applications.

libMesh-level Changes

  • Make CompareDofObjectsByID available to all. This is useful for building sets of node and element pointers that have more deterministic ordering than if the set was ordered based on the pointer addresses

  • Make use of std::condition_variable for _get_array. Eliminates helgrind errors during multi-thread access to PetscVector::get

  • Update to TIMPI 1.8.2

  • Nanoflann update to 1.4.1

  • Use get_unique_tag() for a few more MessageTags

  • Remove caching from FE<CLOUGH>

  • Higher precision when printing assert failures

  • resolve warning of expectedly unbinned entries.

  • Clear input data structure before using

  • Don't unnecessarily compute the Jacobian for ComputeResidualandJacobian. This optimization will likely be leveraged in MOOSE in order to compute the residual and Jacobian simultaneously, avoiding duplicate variable and material property reinitialization.

Bug Fixes and Minor Enhancements

  • A boolean parameter extrap was added to PiecewiseLinear, which when set to true specifies that extrapolation occurs when the sample is outside of the provided abscissa values, instead of using the nearest ordinate value.

  • Documentation was added for certain Problems and Predictors

  • Additional utilities for the functor system were added, such as to create a functor that is a gradient of another functor.