# v2306: New and updated solvers and physics

In the vanDriest LES delta model a property at the nearest wall (y*) is used to calculate a local length scale. In previous releases these wall properties were transported using the same mechanism to calculate the wall distance (meshWave). In this release the addressing is calculated once and cached such that the information on the nearest wall can be directly obtained. This (at the cost of extra storage) gives a very large speed up on larger meshes. Additionally the same addressing can also be used for the wall distance itself using the new meshWaveAddressing wallDist method in fvSchemes:

```
wallDist
{
method meshWaveAddressing;
// Fetch the nearest wall normal
nRequired true;
// Optional entry delaying wall distance update to every n steps
// Default is 1 (update every step)
updateInterval 5;
}
```

The following image demonstrates the strong scaling performance resulting from these improvements, demonstrated as part of the ExaFoam project:

**Source code**

**Resolved bugs**

The new Coulomb finite-volume option (fvOption) provides a model for electrostatic forces acting on particles based on their diameter, along with essential underlying changes in the electricPotential function object for evaluating the electric field. The coupling is currently one-way.

A minimal example usage follows:

```
subModels
{
solution
{
interpolationSchemes
{
<Ename> <interpolationScheme>; // Electric field name
}
}
particleForces
{
Coulomb
{
q <Function1<scalar>>; // Electric charge of particles
E <word>; // Electric field
}
}
}
```

**Source code**

**Merge request**

The new fanMomentumSource finite-volume option (fvOption) adds a momentum source to represent the action of a fan on the flow.

Firstly, the flow rate through the set of upstream faces encompassing the cell zone is calculated. Upstream faces are automatically determined using the flow direction and the surrounding face zone. The pressure gradient is subsequently obtained from the fan pressure curve as a function of flow rate, and the thickness of the fan (measurement section).

A minimal example usage is as follows:

```
fan
{
// Mandatory entries
type fanMomentumSource;
fanCurve <Function1<scalar>>;
flowDir <vector>;
thickness <scalar>;
cellZone <word>;
faceZone <word>;
// Optional entries
gradient <scalar>;
rho <scalar>;
U <word>;
// Inherited entries
selectionMode <word>;
...
}
```

**Source code**

**Merge request**

**Attribution**

- OpenCFD would like to acknowledge and thank Vuko Vukcevic of SimScale GmbH for providing the code and elaborate discussions.

The new limitTurbulenceViscosity finite-volume option (fvOption) provides a mechanism to limit the turbulence viscosity, nut, which can increase calculation stability.

The turbulence viscosity field is corrected within a specified region by applying a maximum limit, set according to a coefficient multiplied by the laminar viscosity:

\[ \nu_{t,max} = c \nu \]

A minimal example usage is as follows:

```
limitTurbulenceViscosity1
{
// Mandatory entries
type limitTurbulenceViscosity;
// Optional entries
nut nut;
c 1e5;
// Inherited entries
...
}
```

**Source code**

The axis constraint imposes orientation limits where bodies can only rotate around a fixed axis. This has been enhanced with additional minimum and maximum rotation angles, e.g. to model butterfly valves.

Furthermore, all rigid-body motion constraints are now run-time adjustable.

A minimal example usage is as follows:

```
constraints
{
constrainRotation1
{
sixDoFRigidBodyMotionConstraint axis;
axis <vector>;
// Optional entries
maxClockwiseTheta <Function1<scalar>>;
maxCounterclockwiseTheta <Function1<scalar>>;
thetaUnits <word>;
referenceOrientation <tensor>;
}
}
```

**Source code**

**Merge request**