MOOSE Newsletter (January 2024)

MOOSE Improvements

New Physics action syntax

The Physics syntax has been added to MOOSE. The Physics system is meant to streamline the input of a set of physical equations in MOOSE. For example, this might allow the definition of the required equations automatically but also the selection of good default parameters and preconditioners. Physics are derived from Actions but define APIs to facilitate the implementation of a new Physics action. As appropriate, some of the modules' actions that defined equations will be transitioned to the Physics system over the coming months.

Separation of the Materials and FunctorMaterials block

Functor materials were added to MOOSE to allow evaluation of material properties at arbitrary locations, such as element faces or nodes, usually on-the-fly (although some caching is supported). These materials do not define traditional material properties as in the Material system, but instead they define Functors. To mark the difference between the two systems, the two types of objects should no longer be created in the same [Materials] block; FunctorMaterials should be created inside a [FunctorMaterials] block.

Improvements in the Navier Stokes Module

  • The k- turbulence model was added. This method enables more accurate turbulence modeling compared to the current mixing-length model.

  • A drift-flux mixture model was added which enables solutions of two-phase flows where the phases move at different velocities but assume local equilibrium over short spatial length scales.

Field Split Additions

Field splits can now be nested within each other. Moreover a NavierStokesProblem was introduced that allows for scalable preconditioning of the Navier-Stokes equations for low to moderate Reynolds numbers. The Least Squared Commutator preconditioning techniques employed have been demonstrated on problem sizes up to 70 million degrees of freedom.

libMesh-level Changes

2024.01.23 Update

  • New example illustrating a Hybridized Discontinuous Galerkin solve

  • Added new finite element support: the HIERARCHIC_VEC FE family, for vector-valued hierarchic shape functions, and the L2_HIERARCHIC_VEC FE family, for the broken/L2 version of that space. Added simple-vector-valued example and Hybridized-Discontinuous-Galerkin example runs using these families.

  • Support for a pre-check object callback from PetscNonlinearSolver

  • Keep track of libMesh command line queries, and avoid spurious unused-option warnings about them from PETSc

  • Support for upgrading the order of mixed-order input meshes in all_second_order() and all_complete_order()

  • Support for neighbor-finding and mesh stitching with mixed-order input meshes. Mixed-order meshes must still be upgraded before being used to support C0 finite element types in a linear solve (where constraint equations would be needed between incompatible-order neighbors), but mesh generation and modification with pre-upgraded mixed-order meshes is now possible.

  • Support for more preconditioning options in EigenSparseLinearSolver; this allows us to reenable a dozen examples that were previously skipped when Eigen was configured as the default linear algebra package.

  • Minor fixes to reduced basis code, string parsing of uncommon quadrature rule names, configuration on systems without stdlib.h,

  • Minor clarifications and typo fixes in documentation, comments, and runtime error messages

  • Fixes for VTK .pvtu reading, and preservation of libMesh node, element, and subdomain ids written to VTK files

  • Elem::volume() no longer can throw an exception when called on an element without an invertible mapping; hence print_info() and get_info() are now safe to use when emitting debugging messages about twisted geometric elements.

  • Support interior_parent in Elem order upgrades

  • Avoid creating duplicate entries in BoundaryInfo multimaps

  • Removes an overzealous assertion in variable name collection that does not work with NodeElem-only meshes

PETSc-level Changes

PETSc updated to 3.20.3

The moose-petsc package has been updated alongside the repository submodule to version 3.20.3. Consequently, the moose-dev conda environment has been updated. To update your MOOSE package to this release, please activate your MOOSE conda environment and perform the command:


mamba install moose-dev=2024.01.23

or remove and re-create your moose environment by performing the following:


conda deactivate
conda env remove -n moose
conda create -n moose moose-dev=2024.01.23

The following MOOSE package versions and builds corresponding to moose-dev=2024.01.23 should be seen in the new conda environment.


Package                  Version           Build
===================================================
moose-dev                2024.01.23        build_0
moose-libmesh            2024.01.23        build_0
moose-libmesh-vtk        9.2.6             build_8
moose-mpich              4.0.2             build_15
moose-peacock            2023.11.29        hb4c3223_0
moose-petsc              3.20.3            build_0
moose-tools              2023.12.20        he4b30e4_0
moose-wasp               2023.11.29        build_0

Bug Fixes and Minor Enhancements

  • Shorthand functor material property output was added using the "output_properties" parameter. This automatically creates a FunctorAux and a constant monomial variable for output, which had to be done manually before.

  • Extra element IDs can now be used to assign elements to subdomains in the ParsedSubdomainMeshGenerator.

  • The PropertyReadFile user object can now read multiple files, once every time it is executed. The execution is controlled with the "execute_on" parameter.

  • The NEML2 constitutive model library was added to the solid mechanics module as an optional dependency. NEML2 is built on top of libTorch and supports the implementation of device-independent material models (with GPU support).