v2306: New and updated solvers and physics

Improved vanDriest LES delta model

TOP

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:

Van Driest improvement

Source code

Resolved bugs

New Lagrangian particle force: Coulomb

TOP

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

New fvOption: fanMomentumSource

TOP

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 Louis Vittoz and Vuko Vukcevic of SimScale GmbH for providing the code and elaborate discussions.

New fvOption: limitTurbulenceViscosity

TOP

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

Improved rigid-body motion constraint: axis

TOP

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