MOOSE Newsletter (November 2021)
MOOSE Conda Packages Now Compatible with Xcode Newer Than 12.4, MacOS Monterey
Conda package updates for moose-mpich
, moose-petsc
, and moose-libmesh
were merged in #19230, and they enable full MacOS Big Sur compatibility for previously unsupported Xcode and Command Line Tools versions 12.5, 13, and 13.1. This update also enables support for MacOS Monterey. The Clang compiler has also been updated to 12.0.1.
This update only applies to Intel Macs. Official M1 Apple Silicon support is on the way! Track the MOOSE issue #18954 if interested in new developments.
To download the new packages, please activate your MOOSE conda environment and perform the following command:
conda update --all
where the appropriate versions and build numbers in the update output should be at least the following:
Package Version Build
=====================================================
moose-libmesh 2021.10.27 build_1
moose-mpich 3.3.2 build_8
moose-petsc 3.15.1 build_3
Versions and build numbers will increment over time as MOOSE is updated, and the above represents the version/build when compatibility was first enabled. If any issues with the new packages are experienced, please open a new Discussions post!
Legacy Input Parameter Deprecation
The legacy input parameter construction method has been supported for nearly two years. It is now slated for deprecation on Mar 1, 2022. After said date, any objects whose parameter construction is not updated will not compile.
Previously, input parameters were defined with a template specialization of InputParameters validParams<T>()
, which required a forward declaration in the object header as follows:
class SomeMooseObject;
template <>
InputParameters validParams<SomeMooseObject>
And the parameters were defined in the source by specializing InputParameters validParams<T>()
as follows:
template <>
InputParameters
validParams<SomeMooseObject>()
{
InputParameters params = validParams<SomeParentMooseObject>();
params.addParam<bool>("foo", false, "Some description");
return params;
}
The new method of input parameter construction involves defining a static method on the object itself: static InputParameters validParams()
. The transition of objects to the new input parameter construction method is straight-forward and will be demonstrated using the example object above. First, replace all calls to validParams<T>()
with T::validParams()
.
In the header of each object, remove the forward declarations as described above and add a public static InputParameters validParams()
declaration:
#include "SomeParentMooseObject.h"
class SomeMooseObject : public SomeParentMooseObject
{
public:
SomeMooseObject(const InputParameters & params);
static InputParameters validParams();
// continued...
};
In the source of each object, replace the template specialization of InputParameters validParams<T>()
with the InputParameters T::validParams()
method:
InputParameters
SomeMooseObject::validParams()
{
InputParameters params = SomeParentMooseObject::validParams();
params.addParam<bool>("foo", false, "Some description");
return params;
}
MOOSE Improvements
Weakly compressible fully-coupled implementation of the Navier Stokes equations
Leveraging the functor system, the incompressible Navier Stokes finite volume implementation was modified to support density variations. The formulation is similarly based on the Rhie Chow face interpolation. Additional kernels necessary for the weakly compressible formulation are:
time derivative of density for the mass equation
additional time derivative of density, multiplied by velocity, in the momentum equations
additional time derivative of density, multiplied by
cp T
, in the energy equation
An additional kernel was added to handle the mixing length turbulence model without having to normalize the energy equation by density, as this was no longer simple with a time and space varying fluid density.
All other kernels are shared between the incompressible and weakly compressible formulations. Transient examples were added to the repository.
Weakly compressible fully-coupled implementation of the porous media equations
A porous media formulation of the Navier Stokes equations was similarly adapted to handle weakly compressible flows. All incompressible kernels were adapted to handle weakly compressible flow, with no renaming of the kernels.
RenameBlockGenerator
The RenameBlockGenerator was updated to support block merging and a mix of old/new block names and IDs. It is now ordering-independent with most configurations (see the documentation for more details).
libMesh-level Changes
Changes to dual shape function initialization to enable edge dropping and 3D mortar problems.
Refactored autoconf compiler option selection, to allow for testing of submodules with stricter compiler settings.
Reduced Basis support for Empirical Interpolation Method incorporation of integral terms on element sides.
API support for selecting SVD as a preconditioner type
Improvements to the "calculator" app, for visualizing projections of parsed functions on meshes (and, optionally, pre-existing solutions), to allow it to optionally noutput numeric integrals instead.
Fix (or at least workaround for a compiler bug) for broken JIT parsed function compilation on Apple M1 compilers.
Fix for broken TIMPI communication of standard library structured classes of large strings.
Fix for potential leak of TIMPI derived data types, causing valgrind errors in some use cases.
Assorted minor bugfixes: for Exodus IGA reads of files with multiple element blocks, for Exodus IGA files with homogeneous (implicit) element weights, for element quality calculations on infinite hexes, and for Xdr header writes and a potentially uninitialized Xdr version variable.
Bug Fixes and Minor Enhancements
Missing user documentation was added for initial conditions, time steppers, kernels, mesh generators, postprocessors, vector postprocessors and nodal kernels.
Function-based initial conditions were added for the conserved variable formulation of the fully compressible Navier Stokes equations