MOOSE Newsletter (November 2023)

MOOSE Improvements

MeshDivisions system to split the mesh in arbitrary ways

The MeshDivisions system has been added to MOOSE. It was released with a number of simple examples, including SubdomainsDivision for a block ID-based division of the mesh and the CartesianGridDivision for a Cartesian grid-numbering overlaid on top of the mesh. It is intended to be able to specify arbitrary mappings in transfers between applications. For now, the new system can be used for arbitrary reduction operations over the mesh divisions using the MeshDivisionFunctorReductionVectorPostprocessor mostly for postprocessing purposes.

Coordinate transformations during transfers between applications

General coordinate transformations between applications have been implemented in the MultiAppGeneralField-derived transfers. This enables transfers between from RZ to XYZ geometries, for example, or accounting for arbitrary rotations (defined in the [Mesh] blocks) when transferring between applications.

Changes to Darcy/Forchheimer friction

We have changed the way that users should formulate Darcy and Forchheimer friction coefficients for simulating friction flows with the finite-volume Navier-Stokes classes. Information about the new formulation can be found in the relevant friction kernel, PINSFVMomentumFriction. We have also introduced a real example of a class that computes Darcy and Forchheimer friction coefficients, FunctorErgunDragCoefficients.

Selective exclusion of finite element families for p-refinement

Users may now selectively exclude finite element families from p-refinement. This allows a use case such as a discontinuous Galerkin discretization for the "nonlinear" variables and Lagrange-based auxiliary variables for data transfers. In this example the user may want to exclude the Lagrange family from p-refinement while p-refining the monomial or L2 Lagrange nonlinear variable. Families to exclude are controlled using the disable_p_refinement_for_families parameter in the Adaptivity block. By default, all non-hierarchic finite element families are excluded from p-refinement.

Custom eigen normalizations

Users may now provide a custom normalization to their eigen solves using the "bx_norm" parameter. This is the last piece that the "new" SLEPc-based eigen system needed to emulate the native MOOSE-based eigen system. With this addition, the native MOOSE implementation may be removed in the future.

libMesh-level Changes

2023.11.06 Update

  • Added low-order RAVIART_THOMAS finite element support, including general H(div) mapping support for future divergence-conforming finite element families. Added L2_RAVIART_THOMAS support for the broken/L2 version of that space. Example codes for each, using mixed and hybridized formulations.

  • Option to remove a boundary id globally from a mesh without re-preparing it afterward

  • Option to merge subdomains when stitching meshes based on inspection of both subdomain ids and subdomain names

  • Better matching of input file ids when reading Abaqus files

  • Fixes for independent control over which variables see p-refinement

  • Added QBase::clone() method

  • Added parameter for user-supplied hash when doing Just-In-Time compilation with fparser

  • Added Packing specializations for Eigen matrices; this enables parallel communication of these classes and of many derived types including them.

  • Bug fixes for nodal interpolation of rational elements; this corrects an error in VTK output of many IsoGeometric Analysis mesh results.

  • Bug fix for overzealous caching of rational elements' shape functions. This corrects an error in computation on many IsoGeometric Analysis meshes

  • Bug fixes for refinement of Tet14 elements.

  • More robust reduced_basis EIM error indicator calculations

  • Higher-order default quadrature choice in integration-based error estimators and error indicators, avoiding underintegration on superconvergent results

  • Removal of Fortran/C++ detection for HDF5 libraries, so we can more easily find the desired C HDF5 library we do use.

  • Upgrade to latest autotools versions in libMesh, TIMPI, and MetaPhysicL

  • Update VTK compatibility to support VTK 9.3

  • GCC warning workarounds to allow –enable-werror builds with -Wextra in GCC 13

  • Minor refactoring in Threads/PerfLog interactions

  • More parallel synchronization assertions during System setup and update operations

  • Minor fixes to documentation, comments, and unit tests, including VexCL-enabled unit tests of MetaPhysicL

2023.11.29 Update

  • enum_to_string and string_to_enum now initialize their maps via static constructors, so they (and functions which depend on them, like Elem::get_info() are now thread-safe.

  • Added FEInterface::is_hierarchic() shim.

  • Added TypeTensor<T>::column() extraction method.

  • Added L2_LAGRANGE_VEC finite element family, providing a space which locally matches LAGRANGE_VEC but which is discontinuous between elements.

  • Configure option --with-xdr-include, to make it easier to build on systems with XDR support in non-default locations.

  • Configure now detects non-default $CC from PETSc when possible.

  • Configure now adds compiler flags to enable safe use of Floating-Point Exceptions, even with newer clang/clang++ and optimization enabled.

  • Support for reads of ExodusII meshes with the WEDGE6 element string.

  • Support for Metis partitioning of meshes with overlapping nodes or elements even with unique_id() disabled.

  • Updated to newer Nanoflann, switched to git submodule

  • PETSc now uses VecGhostGetGhostIS instead of VecGetLocalToGlobalMapping for more efficiency on newer PETSc versions.

  • Bugfix and test coverage for recent bug in reads of Abaqus meshes with element sets.

  • Bugfix and test coverage for XDR writes of refined meshes with extra element integers.

  • Fixes for reduced_basis EIM features.

  • Fixes for example codes triggering GCC 13 warnings.

PETSc-level Changes

PETSc updated to 3.20.1

The moose-petsc package has been updated alongside the PETSc submodule to version 3.20.1. To update your older MOOSE environment to include this change, please activate your MOOSE conda environment and perform the command:


mamba install moose-dev=2023.11.30

The MOOSE package versions and builds included in this environment version are the following:


Package                  Version           Build
===================================================
moose-dev                2023.11.30        build_0
moose-libmesh            2023.11.29        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.1            build_0
moose-tools              2023.11.28        hd1db04d_0
moose-wasp               2023.11.29        build_0

Bug Fixes and Minor Enhancements

  • A DirichletBC leveraging functors was added for finite element variables: FunctorDirichletBC. This helps create arbitrary couplings between variables at boundary conditions.

  • The ability to evaluate functors defined on the other side of a boundary was added to the FVFunctorDirichletBC. This helps connect two volumes together where variables connected through Dirichlet boundary conditions are defined on two separate subdomains.

  • The MultiAppCopyTransfer now supports transfer of vector variables.