MOOSE Newsletter (June 2023)

MOOSE Improvements

General axisymmetric coordinates

The RZ coordinate system was extended to enable using general coordinate axes. Before this, the RZ coordinate system was limited in the following ways:

  • The origin of the coordinate system was restricted to be only.

  • The direction of the axisymmetric axis was restricted to be the or direction.

  • Only a single axisymmetric coordinate system could be defined.

Now arbitrary axisymmetric coordinate systems may be specified on a per-subdomain basis: for each subdomain using RZ, the axis origin and direction are specified. See Coordinate Systems for more information.

Added HSCoupler2D3D component

The HSCoupler2D3D component was added to the Thermal Hydraulics module. This component fully couples a 2D heat structure boundary to a 3D heat structure boundary via a simplified gap heat transfer formulation. Using this component can avoid the need to create MultiApps for simulations solving transient heat conduction between a 3D domain like an assembly matrix and 2D heat structure components. The main caveat is that the application needs to be configured with a sufficient AD container size, due to coupling 2D elements to arbitrary numbers of 3D elements. See the component documentation for more information.

Fluid properties improvements

Several new function definitions were added in the fluid properties of the fluid properties module:

  • for helium: specific energy computed from pressure and density

  • for lead and lead-bismuth eutectic: temperature computed from pressure and enthalpy

  • for tabulated fluid properties: temperature and density from pressure and specific entropy

For the sodium-potassium eutectic, the computation of temperature from pressure and enthalpy now relies on an analytical inversion of the enthalpy equation rather than a Newton method-based solve.

Projections in the auxiliary system

The ProjectionAux auxiliary kernel was created, replacing the SelfAux auxiliary kernel. It enables a variety of projections for a variable, auxiliary or nonlinear, to an auxiliary variable that minimizes the L2-norm of the difference.

It notably enables conversions, with a projection error, between variables with all their degrees of freedom at nodes (for example linear Lagrange) and variables defined through degrees of freedom on the element (for example a constant monomial).

libMesh-level Changes

2023.06.19 Update

  • Avoid using direct new calls or C-style casts in examples and unit tests

  • RBConstruction: Re-throw exceptions on all procs in parallel

  • Added QBase::size() for more generic algorithm compatibility

  • Optimization of LAGRANGE Hex and especially RATIONAL_BERNSTEIN shape function and derivative evaluations

  • Updated reduced_basis APIs, including vectorization of RBParameters values and optimization work

  • EquationSystems I/O can now be done to any istream/ostream, not just directly to files; this is in support of future serialization improvements in MOOSE

  • FEAbstract::add_p_level_in_reinit() API to allow FE objects to individually ignore Elem p-refinement levels; this is a prerequisite to p-refinement support in MOOSE

  • Better error checking and handling in ExodusII_IO input and mesh stitching

  • EigenSystem (as opposed to CondensedEigenSystem solves of constrained systems now throw errors, rather than risking returning non-physical eigenmodes

  • Major bug fixes for certain triangulation refinement cases with Poly2TriTriangulator

  • Assorted bug fixes - all_second_order() leaves untouched any elements in the range that are already second-order - build system console output cleaned up; - Fixes, workarounds to pass -fsanitize=integer builds - CouplingMatrix is now compatible with hundreds of thousands of variable fields - Elem::key() is now 64-bit for 64-bit dof_id_type builds, improving performance by reducing hash conflicts - ExodusII_IO output now handles matching sideset and shellface set ids - DistributedMesh can handle nodes being not-quite-orphaned by user code element deletion - Mesh copying and cloning now handles missing entries in boundary id to name maps, as well as better preserving partitioning settings

TIMPI changes: - Fixes, workarounds to pass -fsanitize=integer builds: correct signed-vs-unsigned use, explicit casts when converting, etc. - Test coverage for vector<bool> reductions, test updates to remove deprecated code - Cleaner vector<bool> unpacking code

2023.06.23 Update

  • Un-condensed Eigensystem solves of constrained systems now throw warnings, not errors, for the sake of downstream apps getting away with it so far.

  • PETSc DM interface error messages now use proper format strings for 32-bit builds too

PETSc-level Changes

Bug Fixes and Minor Enhancements

  • FillBetweenSidesetsGenerator and SideSetsFromPointsGenerator are now compatible with DistributedMesh.

  • SideSetsFromPointsGenerator now detects and cleanly errors if given a point that can only determine a sideset ambiguously.

  • ElementDeletionGeneratorBase (used for BlockDeletionGenerator and PlaneDeletionGenerator now has a delete\_exteriors option, which can be set to false to retain the boundary elements of interior elements being deleted.

  • XYDelaunayGenerator now detects and cleanly errors in all cases where users mistakenly selected a hole for both refinement and stitching.

  • In the Navier Stokes finite volume implementation of weakly compressible flow, the user will now be able to compute face velocities on INITIAL by making the Rhie Chow interpolation default to a linear interpolation.

  • Object documentation was added to the Thermal Hydraulics module for its materials, postprocessors, a closure, constraints, controls, auxiliary kernels, scalar auxkernels, initial conditions and actions.

  • The object documentation index was re-organized with separate categories for FunctorMaterials, ControlLogic. Syntax documentation was added for boundary conditions

  • A LayeredExtremumMaterialProperty user object was created to be able to compute extremum of material properties on spatial layers.