<commit_before># 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](https://github.com/idaholab/moose/pull/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.

!alert! note title=Intel Macs Only
This update only applies to Intel Macs. Official M1 Apple Silicon support is on
the way! Track the MOOSE issue [#18954](https://github.com/idaholab/moose/issues/18954)
if interested in new developments.
!alert-end!

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 in the update output should be:

```
Package                  Version            Build
=====================================================
moose-libmesh            2021.10.27         build_1
moose-mpich              3.3.2              build_8
moose-petsc              3.15.1             build_3
```

If any issues with the new packages are experienced, please open a new
[Discussions post](https://github.com/idaholab/moose/discussions)!

## 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:

```cpp
class SomeMooseObject;
template <>
InputParameters validParams<SomeMooseObject>
```

And the parameters were defined in the source by specializing
`InputParameters validParams<T>()` as follows:

```cpp
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:

```cpp
#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:

```cpp
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.md] 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
<commit_msg>Add version/build caveat for new Monterey packages<commit_after># 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](https://github.com/idaholab/moose/pull/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.

!alert! note title=Intel Macs Only
This update only applies to Intel Macs. Official M1 Apple Silicon support is on
the way! Track the MOOSE issue [#18954](https://github.com/idaholab/moose/issues/18954)
if interested in new developments.
!alert-end!

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](https://github.com/idaholab/moose/discussions)!

## 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:

```cpp
class SomeMooseObject;
template <>
InputParameters validParams<SomeMooseObject>
```

And the parameters were defined in the source by specializing
`InputParameters validParams<T>()` as follows:

```cpp
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:

```cpp
#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:

```cpp
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.md] 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

{'fraction_non_alphanumeric': 0.0640158138827644, 'fraction_numerical': 0.00988367672774272, 'mean_word_length': 4.802382002646669, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5775146', 'n_tokens_mistral': 3417, 'n_tokens_neox': 3146, 'n_words': 1608}