diff --git a/src/atmosphericModels/Make/files b/src/atmosphericModels/Make/files
index b68f5c7b7ec9bd3d2cbb5d6751b84481d398157a..9e4f3018a5134d55d783acc2f4fcb9ddb2e89f26 100644
--- a/src/atmosphericModels/Make/files
+++ b/src/atmosphericModels/Make/files
@@ -1,5 +1,6 @@
 /* Models */
-atmosphericTurbulentTransportModels.C
+turbulenceModels/atmosphericTurbulentTransportModels.C
+turbulenceModels/atmosphericTurbulentFluidThermoModels.C
 porosityModels/powerLawLopesdaCosta/powerLawLopesdaCosta.C
 
 
diff --git a/src/atmosphericModels/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.C b/src/atmosphericModels/turbulenceModels/RAS/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.C
similarity index 100%
rename from src/atmosphericModels/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.C
rename to src/atmosphericModels/turbulenceModels/RAS/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.C
diff --git a/src/atmosphericModels/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.H b/src/atmosphericModels/turbulenceModels/RAS/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.H
similarity index 100%
rename from src/atmosphericModels/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.H
rename to src/atmosphericModels/turbulenceModels/RAS/kEpsilonLopesdaCosta/kEpsilonLopesdaCosta.H
diff --git a/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C
new file mode 100644
index 0000000000000000000000000000000000000000..94e393c2eef709c06046a989648344a544811998
--- /dev/null
+++ b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.C
@@ -0,0 +1,494 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "kL.H"
+#include "fvOptions.H"
+#include "bound.H"
+#include "gravityMeshObject.H"
+#include "wallDist.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace RASModels
+{
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::Cmu() const
+{
+    // (A:Eq. 31)
+    return (0.556 + 0.108*Rt_)/(1.0 + 0.308*Rt_ + 0.00837*sqr(Rt_));
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::CmuPrime() const
+{
+    // (A:Eq. 32)
+    return 0.556/(1.0 + 0.277*Rt_);
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::nutPrime() const
+{
+    // (A:Eq. 12)
+    return CmuPrime()*sqrt(k_)*L_;
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::epsilonCanopy() const
+{
+    const auto* CdPtr =
+        this->mesh_.template findObject<volScalarField>("plantCd");
+    const auto* LADPtr =
+        this->mesh_.template findObject<volScalarField>("leafAreaDensity");
+    const volVectorField& U = this->U_;
+
+    if (CdPtr && LADPtr)
+    {
+        const auto& Cd = *CdPtr;
+        const auto& LAD = *LADPtr;
+
+        // (W:Eq. 13)
+        return Cd*LAD*mag(U)*k_;
+    }
+
+    return tmp<volScalarField>::New
+    (
+        IOobject
+        (
+            IOobject::groupName("epsilonCanopy", this->alphaRhoPhi_.group()),
+            this->runTime_.timeName(),
+            this->mesh_,
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            false
+        ),
+        this->mesh_,
+        dimensionedScalar(sqr(dimLength)/pow3(dimTime), Zero)
+    );
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::epsilon() const
+{
+    // (W:Eq. 13)
+    tmp<volScalarField> tepsilonCanopy = epsilonCanopy();
+
+    // (A:Eq. 19)
+    tmp<volScalarField> tepsilonPlain = pow3(Cmu0_)*pow(k_, 1.5)/L_;
+
+    // (W:Eq. 13)
+    tmp<volScalarField> tepsilon = max(tepsilonPlain, tepsilonCanopy);
+    volScalarField& epsilon = tepsilon.ref();
+    bound(epsilon, this->epsilonMin_);
+
+    return tepsilon;
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::canopyHeight() const
+{
+    const auto* canopyHeightPtr =
+        this->mesh_.template findObject<volScalarField>("canopyHeight");
+
+    if (canopyHeightPtr)
+    {
+        const auto& canopyHeight = *canopyHeightPtr;
+        return canopyHeight;
+    }
+
+    return tmp<volScalarField>::New
+    (
+        IOobject
+        (
+            IOobject::groupName("canopyHeight", this->alphaRhoPhi_.group()),
+            this->runTime_.timeName(),
+            this->mesh_,
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            false
+        ),
+        this->mesh_,
+        dimensionedScalar(dimLength, Zero)
+    );
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<volScalarField> kL<BasicTurbulenceModel>::L() const
+{
+    // (A:Eq. 22)
+    const volScalarField Lplain(kappa_*y_);
+
+    // Increase roughness for canopy (forest, vegetation etc)
+    tmp<volScalarField> tLcanopy = kappa_*canopyHeight();
+    const volScalarField& Lcanopy = tLcanopy;
+
+    // (W:Eq. 16)
+    return max(Lcanopy, Lplain);
+}
+
+
+template<class BasicTurbulenceModel>
+void kL<BasicTurbulenceModel>::stratification(const volScalarField& fVB)
+{
+    tmp<volScalarField> tLg = L();
+    const volScalarField& Lg = tLg.cref();
+
+    tmp<volScalarField> tcanopyHeight = canopyHeight();
+    const volScalarField& canopyHeight = tcanopyHeight;
+
+    tmp<volScalarField> tLcanopy = kappa_*canopyHeight;
+    const volScalarField& Lcanopy = tLcanopy;
+
+    const scalar Cmu0 = Cmu0_.value();
+    const scalar CbStable = CbStable_.value();
+    const scalar CbUnstable = CbUnstable_.value();
+
+    forAll(L_, i)
+    {
+        if (y_[i] > canopyHeight[i])
+        {
+            if (fVB[i] > 0)
+            {
+                // (A:Eq. 23)
+                const scalar Lb = CbStable*sqrt(k_[i])/sqrt(fVB[i]);
+
+                // (A:Eq. 26)
+                L_[i] = sqrt(sqr(Lg[i]*Lb)/(sqr(Lg[i]) + sqr(Lb)));
+            }
+            else
+            {
+                // For unstable/neutral boundary layer (A:p. 80)
+                // Smoothing function for turbulent Richardson
+                // number to ensure gentle transition into
+                // the regime of strong convection
+                Rt_[i] =
+                    min
+                    (
+                        max(Rt_[i], -1.0),
+                        Rt_[i] - sqr(Rt_[i] + 1.0)/(Rt_[i] - 1.0)
+                    );
+
+                // (A:Eq. 28)
+                L_[i] =
+                    Lg[i]
+                   *sqrt(1.0 - pow(Cmu0, 6.0)*pow(CbUnstable, -2.0)*Rt_[i]);
+            }
+        }
+        else
+        {
+            L_[i] = Lcanopy[i];
+        }
+    }
+
+    // Limit characteristic length scale
+    L_ = min(L_, Lmax_);
+}
+
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+template<class BasicTurbulenceModel>
+void kL<BasicTurbulenceModel>::correctNut()
+{
+    this->nut_ = Cmu()*sqrt(k_)*L_;
+    this->nut_.correctBoundaryConditions();
+    fv::options::New(this->mesh_).correct(this->nut_);
+
+    BasicTurbulenceModel::correctNut();
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<fvScalarMatrix> kL<BasicTurbulenceModel>::kSource() const
+{
+    return tmp<fvScalarMatrix>::New
+    (
+        k_,
+        dimVolume*this->rho_.dimensions()*k_.dimensions()/dimTime
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class BasicTurbulenceModel>
+kL<BasicTurbulenceModel>::kL
+(
+    const alphaField& alpha,
+    const rhoField& rho,
+    const volVectorField& U,
+    const surfaceScalarField& alphaRhoPhi,
+    const surfaceScalarField& phi,
+    const transportModel& transport,
+    const word& propertiesName,
+    const word& type
+)
+:
+    eddyViscosity<RASModel<BasicTurbulenceModel>>
+    (
+        type,
+        alpha,
+        rho,
+        U,
+        alphaRhoPhi,
+        phi,
+        transport,
+        propertiesName
+    ),
+
+    kappa_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "kappa",
+            this->coeffDict_,
+            0.41
+        )
+    ),
+    sigmak_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "sigmak",
+            this->coeffDict_,
+            1.0
+        )
+    ),
+    beta_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "beta",
+            this->coeffDict_,
+            dimless/dimTemperature,
+            3.3e-03
+        )
+    ),
+    Cmu0_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "Cmu0",
+            this->coeffDict_,
+            0.556
+        )
+    ),
+    Lmax_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "Lmax",
+            this->coeffDict_,
+            dimLength,
+            GREAT
+        )
+    ),
+    CbStable_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "CbStable",
+            this->coeffDict_,
+            0.25
+        )
+    ),
+    CbUnstable_
+    (
+        dimensioned<scalar>::getOrAddToDict
+        (
+            "CbUnstable",
+            this->coeffDict_,
+            0.35
+        )
+    ),
+
+    k_
+    (
+        IOobject
+        (
+            IOobject::groupName("k", alphaRhoPhi.group()),
+            this->runTime_.timeName(),
+            this->mesh_,
+            IOobject::MUST_READ,
+            IOobject::AUTO_WRITE
+        ),
+        this->mesh_
+    ),
+    L_
+    (
+        IOobject
+        (
+            IOobject::groupName("L", alphaRhoPhi.group()),
+            this->runTime_.timeName(),
+            this->mesh_,
+            IOobject::READ_IF_PRESENT,
+            IOobject::AUTO_WRITE
+        ),
+        this->mesh_,
+        dimensionedScalar(dimLength, scalar(1))
+    ),
+    Rt_
+    (
+        IOobject
+        (
+            IOobject::groupName("Rt", alphaRhoPhi.group()),
+            this->runTime_.timeName(),
+            this->mesh_,
+            IOobject::READ_IF_PRESENT,
+            IOobject::AUTO_WRITE
+        ),
+        this->mesh_,
+        dimensionedScalar(dimless, Zero)
+    ),
+    g_(meshObjects::gravity::New(this->mesh_.time())),
+    y_(wallDist::New(this->mesh_).y())
+{
+    bound(k_, this->kMin_);
+
+    if (type == typeName)
+    {
+        this->printCoeffs(type);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class BasicTurbulenceModel>
+bool kL<BasicTurbulenceModel>::read()
+{
+    if (eddyViscosity<RASModel<BasicTurbulenceModel>>::read())
+    {
+        kappa_.readIfPresent(this->coeffDict());
+        sigmak_.readIfPresent(this->coeffDict());
+        beta_.readIfPresent(this->coeffDict());
+        Cmu0_.readIfPresent(this->coeffDict());
+        Lmax_.readIfPresent(this->coeffDict());
+        CbStable_.readIfPresent(this->coeffDict());
+        CbUnstable_.readIfPresent(this->coeffDict());
+
+        return true;
+    }
+
+    return false;
+}
+
+
+template<class BasicTurbulenceModel>
+void kL<BasicTurbulenceModel>::correct()
+{
+    if (!this->turbulence_)
+    {
+        return;
+    }
+
+    // Construct local convenience references
+    const alphaField& alpha = this->alpha_;
+    const rhoField& rho = this->rho_;
+    const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
+    const volVectorField& U = this->U_;
+    const volScalarField& nut = this->nut_;
+
+    fv::options& fvOptions(fv::options::New(this->mesh_));
+
+    eddyViscosity<RASModel<BasicTurbulenceModel>>::correct();
+
+    // Turbulent kinetic energy production rate
+    tmp<volTensorField> tgradU = fvc::grad(U);
+    const volScalarField::Internal G
+    (
+        this->GName(),
+        nut.v()*2*magSqr(dev(symm(tgradU.cref().v())))
+    );
+    tgradU.clear();
+
+    // Square of Brunt-Vaisala (buoyancy) frequency
+    const auto& T = U.mesh().lookupObject<volScalarField>("T");
+    tmp<volScalarField> tfBV = -beta_*(fvc::grad(T) & g_);
+    const volScalarField& fBV = tfBV.cref();
+
+    // Sink or source of TKE depending on stratification type (A:Eq. 15)
+    tmp<volScalarField> tPb = -fBV*nutPrime();
+    const volScalarField& Pb = tPb.cref();
+
+    // Turbulent kinetic energy dissipation rate due to plains and canopy
+    tmp<volScalarField> tepsilon = epsilon();
+    const volScalarField& epsilon = tepsilon.cref();
+
+    // Divergence of velocity
+    tmp<volScalarField> tdivU = fvc::div(fvc::absolute(this->phi(), U));
+    const volScalarField::Internal& divU = tdivU.cref().v();
+
+    // Turbulent kinetic energy equation
+    tmp<fvScalarMatrix> kEqn
+    (
+        fvm::ddt(alpha, rho, k_)
+      + fvm::div(alphaRhoPhi, k_)
+      - fvm::laplacian(alpha*rho*DkEff(), k_)
+     ==
+        alpha()*rho()*G
+      + fvm::SuSp((Pb - epsilon)/k_, k_)
+      - fvm::SuSp((2.0/3.0)*alpha()*rho()*divU, k_)
+      + kSource()
+      + fvOptions(alpha, rho, k_)
+    );
+
+    tdivU.clear();
+    tPb.clear();
+
+    kEqn.ref().relax();
+    fvOptions.constrain(kEqn.ref());
+    solve(kEqn);
+    fvOptions.correct(k_);
+    bound(k_, this->kMin_);
+
+    // Turbulent Richardson number (A:Eq. 29)
+    Rt_ = fBV*sqr(k_/tepsilon);
+
+    stratification(fBV);
+    tfBV.clear();
+
+    correctNut();
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace RASModels
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/atmosphericModels/turbulenceModels/RAS/kL/kL.H b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.H
new file mode 100644
index 0000000000000000000000000000000000000000..870b38ac694171b3f9c96a22ebf39cc2199f6dd0
--- /dev/null
+++ b/src/atmosphericModels/turbulenceModels/RAS/kL/kL.H
@@ -0,0 +1,313 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::RASModels::kL
+
+Group
+    grpRASTurbulence
+
+Description
+    A one-equation (turbulent kinetic energy \c k) turbulence closure
+    model for incompressible and compressible geophysical applications.
+
+    Turbulent kinetic energy (\c k) is computed with a transport equation
+    and the turbulent length scale (\c L) is computed with an algebraic
+    expression which depends on the local stratification.
+
+    References:
+    \verbatim
+        Standard model (tag:A):
+            Axell, L. B., & Liungman, O. (2001).
+            A one-equation turbulence model for geophysical applications:
+            comparison with data and the k−ε model.
+            Environmental Fluid Mechanics, 1(1), 71-106.
+            DOI:10.1023/A:1011560202388
+
+        Canopy-related models (tag:W):
+            Wilson, J. D., & Flesch, T. K. (1999).
+            Wind and remnant tree sway in forest cutblocks.
+            III. A windflow model to diagnose spatial variation.
+            Agricultural and Forest Meteorology, 93(4), 259-282.
+            DOI:10.1016/S0168-1923(98)00121-X
+    \endverbatim
+
+Usage
+    Example by using \c constant/turbulenceProperties:
+    \verbatim
+    RAS
+    {
+        // Mandatory entries
+        RASModel        kL;
+
+        // Optional entries
+        kLCoeffs
+        {
+            kappa       <scalar>;
+            sigmak      <scalar>;
+            beta        <scalar>;
+            Cmu0        <scalar>;
+            Lmax        <scalar>;
+            CbStable    <scalar>;
+            CbUnstable  <scalar>;
+        }
+
+        // Inherited entries
+        ...
+    }
+    \endverbatim
+
+    where the entries mean:
+    \table
+      Property   | Description                     | Type   | Reqd | Deflt
+      RASModel   | Type name: kL                   | word   | yes  | -
+      kappa      | von Karman constant             | scalar | no   | 0.41
+      sigmak     | Empirical model coefficient     | scalar | no   | 1.0
+      beta | Thermal expansion coefficient [1/K]   | scalar | no   | 3.3e-3
+      Cmu0       | Empirical model coefficient     | scalar | no   | 0.556
+      Lmax   | Maximum mixing-length scale [m]     | scalar | no   | GREAT
+      CbStable   | Stable stratification constant  | scalar | no   | 0.25
+      CbUnstable | Unstable stratification constant | scalar | no  | 0.35
+    \endtable
+
+    The inherited entries are elaborated in:
+      - \link eddyViscosity.H \endlink
+
+    \heading Input fields (mandatory)
+    \plaintable
+        k         | Turbulent kinetic energy                [m2/s2]
+        T         | Potential temperature                   [K]
+    \endplaintable
+
+    \heading Input fields (optional)
+    \plaintable
+        canopyHeight    | Canopy height                     [m]
+        plantCd         | Plant canopy drag coefficient     [-]
+        leafAreaDensity | Leaf area density                 [1/m]
+        Rt              | Turbulent Richardson number       [-]
+        L               | Characteristic length scale       [m]
+    \endplaintable
+
+Note
+  - Optional input fields can/should be input
+    by using \c readFields function object.
+
+SourceFiles
+    kL.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef kL_H
+#define kL_H
+
+#include "RASModel.H"
+#include "eddyViscosity.H"
+#include "uniformDimensionedFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace RASModels
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class kL Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class BasicTurbulenceModel>
+class kL
+:
+    public eddyViscosity<RASModel<BasicTurbulenceModel>>
+{
+    // Private Member Functions
+
+        //- Return modified stability function of Launder,
+        //- calibrated with the results of Hogstrom (A:Eq. 31)
+        tmp<volScalarField> Cmu() const;
+
+        //- Return modified stability function of Launder,
+        //- calibrated with the results of Hogstrom (A:Eq. 32)
+        tmp<volScalarField> CmuPrime() const;
+
+        //- Return eddy diffusivity (A:Eq. 12)
+        tmp<volScalarField> nutPrime() const;
+
+        //- Return turbulent kinetic energy dissipation rate due to canopy
+        tmp<volScalarField> epsilonCanopy() const;
+
+        //- Return turbulent kinetic energy
+        //- dissipation rate due to plains and canopy
+        tmp<volScalarField> epsilon() const;
+
+        //- Return canopy height
+        tmp<volScalarField> canopyHeight() const;
+
+        //- Return characteristic length scale
+        tmp<volScalarField> L() const;
+
+        //- Modify characteristic length scale
+        //- according to the specified stratification
+        void stratification(const volScalarField& fVB);
+
+        // Generated Methods
+
+            //- No copy construct
+            kL(const kL&) = delete;
+
+            //- No copy assignment
+            void operator=(const kL&) = delete;
+
+
+protected:
+
+    // Protected Data
+
+        // Model coefficients
+
+            //- von Karman constant
+            dimensionedScalar kappa_;
+
+            //- Empirical model coefficient
+            dimensionedScalar sigmak_;
+
+            //- Thermal expansion coefficient [1/K]
+            dimensionedScalar beta_;
+
+            //- Empirical model coefficient
+            dimensionedScalar Cmu0_;
+
+            //- Maximum mixing-length scalar [m]
+            dimensionedScalar Lmax_;
+
+            //- Stable stratification constant
+            dimensionedScalar CbStable_;
+
+            //- Unstable stratification constant
+            dimensionedScalar CbUnstable_;
+
+
+        // Fields
+
+            //- Turbulent kinetic energy    [m2/s2]
+            volScalarField k_;
+
+            //- Characteristic length scale [m]
+            volScalarField L_;
+
+            //- Turbulent Richardson number [-]
+            volScalarField Rt_;
+
+            //- Gravitational acceleration  [m2/s2]
+            const uniformDimensionedVectorField& g_;
+
+            //- Wall distance
+            //  Note: different to wall distance in parent RASModel
+            //  which is for near-wall cells only
+            const volScalarField& y_;
+
+
+    // Protected Member Functions
+
+        //- Correct the turbulence viscosity
+        virtual void correctNut();
+
+        //- Add explicit source for turbulent kinetic energy
+        virtual tmp<fvScalarMatrix> kSource() const;
+
+
+public:
+
+    typedef typename BasicTurbulenceModel::alphaField alphaField;
+    typedef typename BasicTurbulenceModel::rhoField rhoField;
+    typedef typename BasicTurbulenceModel::transportModel transportModel;
+
+
+    //- Runtime type information
+    TypeName("kL");
+
+
+    // Constructors
+
+        //- Construct from components
+        kL
+        (
+            const alphaField& alpha,
+            const rhoField& rho,
+            const volVectorField& U,
+            const surfaceScalarField& alphaRhoPhi,
+            const surfaceScalarField& phi,
+            const transportModel& transport,
+            const word& propertiesName = turbulenceModel::propertiesName,
+            const word& type = typeName
+        );
+
+
+    //- Destructor
+    virtual ~kL() = default;
+
+
+    // Member Functions
+
+        //- Re-read model coefficients if they have changed
+        virtual bool read();
+
+        //- Return the effective diffusivity for k
+        tmp<volScalarField> DkEff() const
+        {
+            return tmp<volScalarField>::New
+            (
+                "DkEff",
+                (this->nut_/sigmak_ + this->nu())
+            );
+        }
+
+        //- Return the turbulent kinetic energy field
+        virtual tmp<volScalarField> k() const
+        {
+            return k_;
+        }
+
+        //- Solve the turbulence equations and correct the turbulence viscosity
+        virtual void correct();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace RASModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+    #include "kL.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/atmosphericModels/turbulenceModels/atmosphericTurbulentFluidThermoModels.C b/src/atmosphericModels/turbulenceModels/atmosphericTurbulentFluidThermoModels.C
new file mode 100644
index 0000000000000000000000000000000000000000..d813a5dbb1843ddf6f050841d932514f3e28728d
--- /dev/null
+++ b/src/atmosphericModels/turbulenceModels/atmosphericTurbulentFluidThermoModels.C
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "turbulentFluidThermoModels.H"
+
+// -------------------------------------------------------------------------- //
+// RAS models
+// -------------------------------------------------------------------------- //
+
+#include "kEpsilonLopesdaCosta.H"
+makeRASModel(kEpsilonLopesdaCosta);
+
+#include "kL.H"
+makeRASModel(kL);
+
+// ************************************************************************* //
diff --git a/src/atmosphericModels/atmosphericTurbulentTransportModels.C b/src/atmosphericModels/turbulenceModels/atmosphericTurbulentTransportModels.C
similarity index 95%
rename from src/atmosphericModels/atmosphericTurbulentTransportModels.C
rename to src/atmosphericModels/turbulenceModels/atmosphericTurbulentTransportModels.C
index 2f1373b65c99267db145c527621c1ac95b50f583..48e32541c9e7b48f0efc7922cd28089b357a9d31 100644
--- a/src/atmosphericModels/atmosphericTurbulentTransportModels.C
+++ b/src/atmosphericModels/turbulenceModels/atmosphericTurbulentTransportModels.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2018 OpenFOAM Foundation
+    Copyright (C) 2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,4 +35,7 @@ License
 #include "kEpsilonLopesdaCosta.H"
 makeRASModel(kEpsilonLopesdaCosta);
 
+#include "kL.H"
+makeRASModel(kL);
+
 // ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/Allrun b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/Allrun
index 15075d623f27d56d92398664fcc62e535574655c..ff256f2362cb34ff84627b16b859439fcfe12078 100755
--- a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/Allrun
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/Allrun
@@ -10,6 +10,7 @@ cd "${0%/*}" || exit                                # Run from this directory
     setups="
     kEpsilon
     kOmegaSST
+    kL
     "
 
     # flag to enable computations in parallel mode
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/plot b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/plot
index 592d623b012f20ecab46b7327765e4dab07afc89..a133b5896e6ace005e8d2d53da421749a6fc2692 100755
--- a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/plot
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/plot
@@ -7,8 +7,9 @@ cd "${0%/*}" || exit                                # Run from this directory
 
     # operand setups
     setups="
-    kEpsilon-neutral-stability
-    kOmegaSST-neutral-stability
+    kEpsilon
+    kOmegaSST
+    kL
     "
 
 
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/T b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/T
new file mode 120000
index 0000000000000000000000000000000000000000..36acfd78fec2c622f4ccbc18c7c6c12feb537c37
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/T
@@ -0,0 +1 @@
+../../common/0.orig/T
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/U b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/U
new file mode 120000
index 0000000000000000000000000000000000000000..e4dc4caaf68a467a7d9d1e29eb147e6657e9bc87
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/U
@@ -0,0 +1 @@
+../../common/0.orig/U
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/alphat b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/alphat
new file mode 120000
index 0000000000000000000000000000000000000000..013f6d3db3a54555612c2f3b20f3675f1cc12602
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/alphat
@@ -0,0 +1 @@
+../../common/0.orig/alphat
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/k b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/k
new file mode 120000
index 0000000000000000000000000000000000000000..3e1c38725bfc0c32f705a09a5bf707da4f0c6680
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/k
@@ -0,0 +1 @@
+../../common/0.orig/k
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/leafAreaDensity b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/leafAreaDensity
new file mode 120000
index 0000000000000000000000000000000000000000..312272b4ace3f7a9cbf6b557e783db51f8bf186e
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/leafAreaDensity
@@ -0,0 +1 @@
+../../common/0.orig/leafAreaDensity
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/nut b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/nut
new file mode 120000
index 0000000000000000000000000000000000000000..8186897dc1e524952025d143bc577da45c565816
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/nut
@@ -0,0 +1 @@
+../../common/0.orig/nut
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/p_rgh b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/p_rgh
new file mode 120000
index 0000000000000000000000000000000000000000..a394ed8aa0f177ee6c4d2ee036fe4049a73b5857
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/p_rgh
@@ -0,0 +1 @@
+../../common/0.orig/p_rgh
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/plantCd b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/plantCd
new file mode 120000
index 0000000000000000000000000000000000000000..b5fbd9980a11d1771b93cf846e9e229a4ef67999
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/plantCd
@@ -0,0 +1 @@
+../../common/0.orig/plantCd
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/qPlant b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/qPlant
new file mode 100644
index 0000000000000000000000000000000000000000..d0140814785b50df9ae2da6fc653c5af3e69233d
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/0.orig/qPlant
@@ -0,0 +1,36 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2106                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      qPlant;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 2 -3 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    "(bottom|top)"
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+
+    "(inlet|outlet|left|right)"
+    {
+        type            cyclic;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/fvOptions b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/fvOptions
new file mode 100644
index 0000000000000000000000000000000000000000..287fa71581227d6af466c200ea85cbe3ec8cc282
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/fvOptions
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2106                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvOptions;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+pressureGradient
+{
+    type            vectorSemiImplicitSource;
+    volumeMode      specific;
+    selectionMode   all;
+    injectionRateSuSp
+    {
+        U               ( ( 0 0.00197805 0 ) 0 );
+    }
+}
+
+atmCoriolisUSource1
+{
+    type            atmCoriolisUSource;
+    atmCoriolisUSourceCoeffs
+    {
+        selectionMode   all;
+        Omega           ( 0 0 5.65156e-05 );
+    }
+}
+
+atmPlantCanopyUSource1
+{
+    type            atmPlantCanopyUSource;
+    atmPlantCanopyUSourceCoeffs
+    {
+        selectionMode   all;
+    }
+}
+
+atmPlantCanopyTSource1
+{
+    type            atmPlantCanopyTSource;
+    atmPlantCanopyTSourceCoeffs
+    {
+        selectionMode   all;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/g b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/g
new file mode 120000
index 0000000000000000000000000000000000000000..c6fea3b1e556a1f8f687373e3af19adfa2f73ad7
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/g
@@ -0,0 +1 @@
+../../common/constant/g
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/transportProperties b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/transportProperties
new file mode 120000
index 0000000000000000000000000000000000000000..e6a4e4f7fc53f2c83e8fcde854665db55f6466d2
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/transportProperties
@@ -0,0 +1 @@
+../../common/constant/transportProperties
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/turbulenceProperties b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/turbulenceProperties
new file mode 100644
index 0000000000000000000000000000000000000000..fc47d6dad2741aedea278de32998cc1915e04a51
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/constant/turbulenceProperties
@@ -0,0 +1,36 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2106                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType      RAS;
+
+RAS
+{
+    RASModel        kL;
+
+    turbulence      on;
+
+    printCoeffs     on;
+
+    kLCoeffs
+    {
+        CbStable    0.25;
+        CbUnstable  0.35;
+        Lmax        41.0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/system b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/system
new file mode 120000
index 0000000000000000000000000000000000000000..86c0ebd6e7baf5d4e389403fe98512613a6bdb8a
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/precursor/setups.orig/kL/system
@@ -0,0 +1 @@
+../common/system
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/Allrun b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/Allrun
index 75396cd525fe4fdba8d7ea4610c86c5c63c4cfcb..41edc4f60f5b2e3b453391a9d64c0d69e17e7085 100755
--- a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/Allrun
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/Allrun
@@ -10,6 +10,7 @@ cd "${0%/*}" || exit                                # Run from this directory
     setups="
     kEpsilon
     kOmegaSST
+    kL
     "
 
     # flag to enable computations in parallel mode
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/T b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/T
new file mode 120000
index 0000000000000000000000000000000000000000..36acfd78fec2c622f4ccbc18c7c6c12feb537c37
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/T
@@ -0,0 +1 @@
+../../common/0.orig/T
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/U b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/U
new file mode 120000
index 0000000000000000000000000000000000000000..e4dc4caaf68a467a7d9d1e29eb147e6657e9bc87
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/U
@@ -0,0 +1 @@
+../../common/0.orig/U
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/alphat b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/alphat
new file mode 120000
index 0000000000000000000000000000000000000000..013f6d3db3a54555612c2f3b20f3675f1cc12602
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/alphat
@@ -0,0 +1 @@
+../../common/0.orig/alphat
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/k b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/k
new file mode 120000
index 0000000000000000000000000000000000000000..3e1c38725bfc0c32f705a09a5bf707da4f0c6680
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/k
@@ -0,0 +1 @@
+../../common/0.orig/k
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/nut b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/nut
new file mode 120000
index 0000000000000000000000000000000000000000..8186897dc1e524952025d143bc577da45c565816
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/nut
@@ -0,0 +1 @@
+../../common/0.orig/nut
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/p_rgh b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/p_rgh
new file mode 120000
index 0000000000000000000000000000000000000000..a394ed8aa0f177ee6c4d2ee036fe4049a73b5857
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/0.orig/p_rgh
@@ -0,0 +1 @@
+../../common/0.orig/p_rgh
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/boundaryData b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/boundaryData
new file mode 120000
index 0000000000000000000000000000000000000000..12dfff1d411a2a7e0d1b5c405af5c4fd25ce3564
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/boundaryData
@@ -0,0 +1 @@
+../../common/constant/boundaryData
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/fvOptions b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/fvOptions
new file mode 100644
index 0000000000000000000000000000000000000000..b9f469968b64b493fffbdf6b307832b03bcc5e9e
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/fvOptions
@@ -0,0 +1,39 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2106                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvOptions;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+pressureGradient
+{
+    type                vectorSemiImplicitSource;
+    selectionMode       all;
+    volumeMode          specific;
+    injectionRateSuSp
+    {
+        U ((0 1.978046e-03 0) 0);
+    }
+}
+
+atmCoriolisUSource1
+{
+    type               atmCoriolisUSource;
+    atmCoriolisUSourceCoeffs
+    {
+        selectionMode   all;
+        Omega           (0 0 5.65156e-5);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/g b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/g
new file mode 120000
index 0000000000000000000000000000000000000000..c6fea3b1e556a1f8f687373e3af19adfa2f73ad7
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/g
@@ -0,0 +1 @@
+../../common/constant/g
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/transportProperties b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/transportProperties
new file mode 120000
index 0000000000000000000000000000000000000000..e6a4e4f7fc53f2c83e8fcde854665db55f6466d2
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/transportProperties
@@ -0,0 +1 @@
+../../common/constant/transportProperties
\ No newline at end of file
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/turbulenceProperties b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/turbulenceProperties
new file mode 100644
index 0000000000000000000000000000000000000000..a631af459084ae5b8e0156b38a4e130fec680b97
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/constant/turbulenceProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v2106                                 |
+|   \\  /    A nd           | Website:  www.openfoam.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType        RAS;
+
+RAS
+{
+    RASModel          kL;
+
+    turbulence        on;
+
+    printCoeffs       on;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/system b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/system
new file mode 120000
index 0000000000000000000000000000000000000000..8ed134fc8c3dea35c0e4c947813c3944918cd293
--- /dev/null
+++ b/tutorials/verificationAndValidation/atmosphericModels/atmFlatTerrain/successor/setups.orig/kL/system
@@ -0,0 +1 @@
+../common/system/
\ No newline at end of file