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