MOOSE Newsletter (January 2023)

MOOSE Improvements

Automatically Computed Pressure Drops at Porosity Jumps

We have added the ability to automatically compute the pressure drop at porosity discontinuities between subdomains according to the Bernoulli equation. When using the NavierStokesFV action a user can toggle the automatic pressure drop computation by specifying porosity_interface_pressure_treatment = 'bernoulli'. Note that this automatic Bernoulli treatment only really makes sense for inviscid or nearly inviscid flows as significant viscosity greatly impacts the pressure drop across porosity discontinuities, rendering Bernoullis's equation inaccurate. In order to properly detect porosity discontinuities, the user must use an appropriate functor. Any of the following functors work: PiecewiseConstantVariable, any AD functor material property, and any discontinuous AD function. Normal finite volume variables do not support automatic porosity jump detection as they interpolate face values from cell center values.

libMesh-level Changes

2023.01.09 Update

  • Added Elem::orient() method, to automatically reorder "flipped" elements that would otherwise have a negative Jacobian.

  • Added MeshTools::Modification::orient_elements() method, to automatically reorder any and all "flipped" elements in an entire mesh.

  • Changed GhostingFunctor::map_type definition, to shorten + optimize SparsityPattern construction code. Typical matrix initialization speed is unchanged, common initialization cases are approximately 50% faster, and worst-case initialization benchmarks are 800% faster.

  • libMesh now only prints its own error messages from exceptions which are not caught. Higher-level code catching error exceptions can choose whether to print their messages or not.

  • Mesh refinement support for Prism21 elements

  • SIDE_HIERARCHIC finite element support for prisms, higher shape function orders on hexes

  • Added Pyramid18 geometry and Lagrange basis support

  • Nemesis files now support named blocks, sidesets, and nodesets

  • Added a flag to control whether nodal quadrature is allowed in pyramids

  • Compatibility fixes for MFFD with PETSc 3.18.1

  • Replaced deprecated-by-OSX sprintf() calls with proper C++

  • Added NodeElem implementations for contains_point() and close_to_point()

  • Added PetscVector::pointwise_divide()

  • Xdr now accepts any std::string_view compatible comment

  • Bug fixes for Abaqus I/O, Tri7 refinement, L2_HIERARCHIC shapes on Tri3, and an unnecessary header inclusion

2023.01.24 Update

  • Fixes and workarounds for NVidia HPC SDK compiler warnings. These compilers are not yet recommended for use, since at least one optimizer bug is keeping their builds from passing our full test suite, but we do hope to have them in CI testing this year.

  • Any libmesh_*FLAGS settings given to libMesh configure are now passed downstream to software like MOOSE via libmesh-config

  • Compilation fixes for MetaPhysicL under some configurations

  • TIMPI Packing<std::string> now uses the same buffer_type as all the other built-in Packing specializations, allowing automatic packed-range operations of composite datatypes including string data without requiring workarounds like vector<char>.

  • Major bugfix for TIMPI Packing<std::tuple<...>>

  • More test coverage for parallel operations on MetaPhysicL datatypes using TIMPI methods.