MOOSE Newsletter (October 2021)

"moosetools" Repository Removed

The effort to extract the python tools from MOOSE into a more generic set of tools has been halted. If the need for this effort changes it may be considered again in the future.

Support Ended for PETSc < 3.5

Support was ended this month for PETSc versions older than 3.5, and MOOSE code references corresponding to these prior versions have been removed from the framework.

MOOSE Improvements and New Features

Reactor Module

A new module called Reactor has been introduced in MOOSE to enhance MOOSE's mesh generation capabilities for nuclear reactor designs, specifically hexagonal pins, assemblies, and cores.

The currently available capability allows an analyst to build a hexagonal pin, ducted assembly, and core using a series of new MeshGenerators. SimpleHexagonGenerator quickly builds a homogenized hexagonal pin or assembly for coarse mesh representation. PolygonConcentricCircleMeshGenerator builds heterogeneous pin cells with optional ducts. This MeshGenerator is generalized for regular polygon pin cells with any number of sides (3=triangle, 4=Cartesian, .. 6=hexagon). Azimuthal mesh discretization may vary by polygon side. PatternedHexMeshGenerator patterns pin cells into an assembly and optionally adds ducted regions. It can also be used to pattern assemblies into a core. The capabilities in this module allows a reactor analyst to avoid the use of external, licensed meshing tools and streamlines the workflow significantly for MOOSE-based reactor physics analysis, lowering the barrier to entry for users. Special attention was paid to allow the user to assign block names, IDs and external boundary names and IDs if desired.

Heterogeneous pin cell created with PolygonConcentricCircleMeshGenerator

Ducted assembly created with PatternedHexMeshGenerator

Small core with pin-by-pin assemblies and two control drums created using PatternedHexMeshGenerator (with various input objects)

Additional functionality is forthcoming in the next few weeks to support static and rotating control drum geometry; automated extra element integer ID assignments called Reporting IDs on the mesh to identify and track pins, assemblies, planes, and depletion zones; a triangular meshing capability for meshing core peripheries; and a Reactor Geometry Mesh Builder which uses the new SubMeshGenerator capability in MOOSE to streamline inputs for Cartesian or hexagonal pins, assemblies, and cores and automatically use ID tracking for regions as well as apply material assignments to the mesh.

The Reactor module capabilities (current and forthcoming) are discussed in a recent report. This module was developed with funding from the DOE-NEAMS Multiphysics Technical Area to support advanced reactor analysis with MOOSE-based applications. For additional information on upcoming capabilities in this module, please contact Emily Shemon ([email protected]).

Functor System

A new arbitrary evaluation system has made its way into MOOSE. The purpose of this system is to allow arbitrary evaluation of functor objects at arbitrary points in time and space. These functors can be called with a variety of spatial arguments including elements and face information objects. Functors can be pulled into any object deriving from the FunctorInterface using the getFunctor method. Some MOOSE objects that are functors include MooseVariables, FunctorMaterialProperties, and Functions. Any of these objects can be used in an input file for MooseFunctorName parameters. Functor objects compute values when called via operator(); gradient() and dot() APIs are also implemented for several derived functor types, allowing on-the-fly computation of spatial gradients and time derivatives respectively.

3D Mortar Constraints

MOOSE now supports mortar constraints on 3D geometries. Mortar methods enforce constraints by introducing additional Lagrange multiplier variables and can be more robust and stable than Node-on-Face constraints. Some examples of MOOSE mortar constraints (previously available only in 2D) include:

Miscellaneous & Bug fixes

  • Crystal initial condition actions now correctly transfer the block parameter to the Initial Condition they create

  • User documentation was added for 22 postprocessors.

  • The NodalProxyMaxValue postprocessor was renamed to NodalMaxValueId. The proxy term is reserved for using one variable to sample/perform an action on another, for example sample the value of variable v at the maximum of variable u.

  • The TotalVariableValue postprocessor was renamed to be a TimeIntegratedPostprocessor. The new name is more accurately describing the function performed by this postprocessor.

libMesh-level Changes

  • Support for Tri7 triangles (like Tri6 plus one mid-element node) and Tet14 tetrahedra (like Tri10 plus one mid-face node on each face)

  • Reduced Basis EIM updates

  • SIDE_HIERARCHIC finite element (shapes defined on sides and discontinuous between sides) support for triangles

  • LOG_CALL() macro to simplify exception-safe PerfLog support in more use cases.

  • Refactoring and simplification of the finite-difference-method fallback for calculating shape function gradients on finite element types without analytic gradient implementations

  • ExodusII_IO::get_sideset_data_indices() accessor method

  • Fixed file handle leaks in some ExodusII use cases, leaks which triggered errors when running with ExodusII version 8.11

  • Read support for new IsoGeometric Analysis extensions to ExodusII

  • Assorted bug fixes for distcheck, clang warnings, non-double-precision configurations, Elem::permute(), other minor issues.