mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: improve/verify atmBoundaryLayerInlet conditions
ENH: add generalised log-law type ground-normal inflow boundary conditions for wind velocity and turbulence quantities for homogeneous, two-dimensional, dry-air, equilibrium and neutral atmospheric boundary layer (ABL) modelling ENH: remove `zGround` entry, which is now automatically computed ENH: add `displacement height` entry, `d` ENH: add generalised atmBoundaryLayerInletOmega boundary condition ENH: add a verification case for atmBoundaryLayerInlet BCs DOC: improve atmBoundaryLayerInlet header documentation BUG: fix value-entry behaviour in atmBoundaryLayerInlet (fixes #1578) Without this change: - for serial-parallel computations, if `value` entry is available in an `atmBoundaryLayerInlet` BC, the theoretical ABL profile expressions are not computed, and the `value` entry content is used as a profile data - for parallel computations, if `value` entry is not available, `decomposePar` could not be executed. With this change: - assuming `value` entry is always be present, the use of `value` entry for the ABL profile specification is determined by a flag `initABL` - the default value of the optional flag `initABL` is `true`, but whenever `initABL=true` is executed, `initABL` is overwritten as `false` for the subsequent runs, so that `value` entry can be safely used. Thanks Per Jørgensen for the bug report. BUG: ensure atmBoundaryInlet conditions are Galilean-invariant (fixes #1692) Related references: The ground-normal profile expressions (tag:RH): Richards, P. J., & Hoxey, R. P. (1993). Appropriate boundary conditions for computational wind engineering models using the k-ε turbulence model. In Computational Wind Engineering 1 (pp. 145-153). DOI:10.1016/B978-0-444-81688-7.50018-8 Modifications to preserve the profiles downstream (tag:HW): Hargreaves, D. M., & Wright, N. G. (2007). On the use of the k–ε model in commercial CFD software to model the neutral atmospheric boundary layer. Journal of wind engineering and industrial aerodynamics, 95(5), 355-369. DOI:10.1016/j.jweia.2006.08.002 Expression generalisations to allow height variation for turbulence quantities (tag:YGCJ): Yang, Y., Gu, M., Chen, S., & Jin, X. (2009). New inflow boundary conditions for modelling the neutral equilibrium atmospheric boundary layer in computational wind engineering. J. of Wind Engineering and Industrial Aerodynamics, 97(2), 88-95. DOI:10.1016/j.jweia.2008.12.001 The generalised ground-normal profile expression for omega (tag:YGJ): Yang, Y., Gu, M., & Jin, X., (2009). New inflow boundary conditions for modelling the neutral equilibrium atmospheric boundary layer in SST k-ω model. In: The Seventh Asia-Pacific Conference on Wind Engineering, November 8-12, Taipei, Taiwan. Reproduced benchmark: Rectangular prism shown in FIG 1 of Hargreaves, D. M., & Wright, N. G. (2007). On the use of the k–ε model in commercial CFD software to model the neutral atmospheric boundary layer. Journal of wind engineering and industrial aerodynamics, 95(5), 355-369. DOI:10.1016/j.jweia.2006.08.002 Benchmark data: HW, 2007 FIG 6 TUT: update simpleFoam/turbineSiting tutorial accordingly
This commit is contained in:
committed by
Andrew Heather
parent
5863c94be0
commit
336fb3bddf
@ -1,10 +1,22 @@
|
|||||||
derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C
|
/* Models */
|
||||||
derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
|
||||||
derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C
|
|
||||||
derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
|
||||||
derivedFvPatchFields/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C
|
|
||||||
|
|
||||||
atmosphericTurbulentTransportModels.C
|
atmosphericTurbulentTransportModels.C
|
||||||
porosityModels/powerLawLopesdaCosta/powerLawLopesdaCosta.C
|
porosityModels/powerLawLopesdaCosta/powerLawLopesdaCosta.C
|
||||||
|
|
||||||
|
|
||||||
|
/* Boundary conditions */
|
||||||
|
|
||||||
|
derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletOmega/atmBoundaryLayerInletOmegaFvPatchScalarField.C
|
||||||
|
derivedFvPatchFields/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C
|
||||||
|
|
||||||
|
|
||||||
|
/* Wall function BCs */
|
||||||
|
|
||||||
|
|
||||||
|
/* fvOptions */
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libatmosphericModels
|
LIB = $(FOAM_LIBBIN)/libatmosphericModels
|
||||||
|
|||||||
@ -37,16 +37,20 @@ namespace Foam
|
|||||||
|
|
||||||
atmBoundaryLayer::atmBoundaryLayer(const Time& time, const polyPatch& pp)
|
atmBoundaryLayer::atmBoundaryLayer(const Time& time, const polyPatch& pp)
|
||||||
:
|
:
|
||||||
|
initABL_(false),
|
||||||
|
kappa_(0.41),
|
||||||
|
Cmu_(0.09),
|
||||||
|
C1_(0.0),
|
||||||
|
C2_(1.0),
|
||||||
|
ppMin_((boundBox(pp.points())).min()),
|
||||||
time_(time),
|
time_(time),
|
||||||
patch_(pp),
|
patch_(pp),
|
||||||
flowDir_(time, "flowDir"),
|
flowDir_(time, "flowDir"),
|
||||||
zDir_(time, "zDir"),
|
zDir_(time, "zDir"),
|
||||||
kappa_(0.41),
|
|
||||||
Cmu_(0.09),
|
|
||||||
Uref_(time, "Uref"),
|
Uref_(time, "Uref"),
|
||||||
Zref_(time, "Zref"),
|
Zref_(time, "Zref"),
|
||||||
z0_(),
|
z0_(),
|
||||||
zGround_()
|
d_()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -57,6 +61,15 @@ atmBoundaryLayer::atmBoundaryLayer
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
|
initABL_(dict.getOrDefault<Switch>("initABL", true)),
|
||||||
|
kappa_
|
||||||
|
(
|
||||||
|
dict.getCheckOrDefault<scalar>("kappa", 0.41, scalarMinMax::ge(SMALL))
|
||||||
|
),
|
||||||
|
Cmu_(dict.getCheckOrDefault<scalar>("Cmu", 0.09, scalarMinMax::ge(SMALL))),
|
||||||
|
C1_(dict.getOrDefault("C1", 0.0)),
|
||||||
|
C2_(dict.getOrDefault("C2", 1.0)),
|
||||||
|
ppMin_((boundBox(pp.points())).min()),
|
||||||
time_(time),
|
time_(time),
|
||||||
patch_(pp),
|
patch_(pp),
|
||||||
flowDir_(TimeFunction1<vector>(time, "flowDir", dict)),
|
flowDir_(TimeFunction1<vector>(time, "flowDir", dict)),
|
||||||
@ -66,7 +79,7 @@ atmBoundaryLayer::atmBoundaryLayer
|
|||||||
Uref_(TimeFunction1<scalar>(time, "Uref", dict)),
|
Uref_(TimeFunction1<scalar>(time, "Uref", dict)),
|
||||||
Zref_(TimeFunction1<scalar>(time, "Zref", dict)),
|
Zref_(TimeFunction1<scalar>(time, "Zref", dict)),
|
||||||
z0_(PatchFunction1<scalar>::New(pp, "z0", dict)),
|
z0_(PatchFunction1<scalar>::New(pp, "z0", dict)),
|
||||||
zGround_(PatchFunction1<scalar>::New(pp, "zGround", dict))
|
d_(PatchFunction1<scalar>::New(pp, "d", dict))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -77,31 +90,39 @@ atmBoundaryLayer::atmBoundaryLayer
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
|
initABL_(abl.initABL_),
|
||||||
|
kappa_(abl.kappa_),
|
||||||
|
Cmu_(abl.Cmu_),
|
||||||
|
C1_(abl.C1_),
|
||||||
|
C2_(abl.C2_),
|
||||||
|
ppMin_(abl.ppMin_),
|
||||||
time_(abl.time_),
|
time_(abl.time_),
|
||||||
patch_(patch.patch()),
|
patch_(patch.patch()),
|
||||||
flowDir_(abl.flowDir_),
|
flowDir_(abl.flowDir_),
|
||||||
zDir_(abl.zDir_),
|
zDir_(abl.zDir_),
|
||||||
kappa_(abl.kappa_),
|
|
||||||
Cmu_(abl.Cmu_),
|
|
||||||
Uref_(abl.Uref_),
|
Uref_(abl.Uref_),
|
||||||
Zref_(abl.Zref_),
|
Zref_(abl.Zref_),
|
||||||
z0_(abl.z0_.clone(patch_)),
|
z0_(abl.z0_.clone(patch_)),
|
||||||
zGround_(abl.zGround_.clone(patch_))
|
d_(abl.d_.clone(patch_))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
atmBoundaryLayer::atmBoundaryLayer(const atmBoundaryLayer& abl)
|
atmBoundaryLayer::atmBoundaryLayer(const atmBoundaryLayer& abl)
|
||||||
:
|
:
|
||||||
|
initABL_(abl.initABL_),
|
||||||
|
kappa_(abl.kappa_),
|
||||||
|
Cmu_(abl.Cmu_),
|
||||||
|
C1_(abl.C1_),
|
||||||
|
C2_(abl.C2_),
|
||||||
|
ppMin_(abl.ppMin_),
|
||||||
time_(abl.time_),
|
time_(abl.time_),
|
||||||
patch_(abl.patch_),
|
patch_(abl.patch_),
|
||||||
flowDir_(abl.flowDir_),
|
flowDir_(abl.flowDir_),
|
||||||
zDir_(abl.zDir_),
|
zDir_(abl.zDir_),
|
||||||
kappa_(abl.kappa_),
|
|
||||||
Cmu_(abl.Cmu_),
|
|
||||||
Uref_(abl.Uref_),
|
Uref_(abl.Uref_),
|
||||||
Zref_(abl.Zref_),
|
Zref_(abl.Zref_),
|
||||||
z0_(abl.z0_.clone(patch_)),
|
z0_(abl.z0_.clone(patch_)),
|
||||||
zGround_(abl.zGround_.clone(patch_))
|
d_(abl.d_.clone(patch_))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -110,13 +131,13 @@ atmBoundaryLayer::atmBoundaryLayer(const atmBoundaryLayer& abl)
|
|||||||
vector atmBoundaryLayer::flowDir() const
|
vector atmBoundaryLayer::flowDir() const
|
||||||
{
|
{
|
||||||
const scalar t = time_.timeOutputValue();
|
const scalar t = time_.timeOutputValue();
|
||||||
vector dir(flowDir_.value(t));
|
const vector dir(flowDir_.value(t));
|
||||||
const scalar magDir = mag(dir);
|
const scalar magDir = mag(dir);
|
||||||
|
|
||||||
if (magDir < SMALL)
|
if (magDir < SMALL)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "magnitude of " << flowDir_.name()
|
<< "magnitude of " << flowDir_.name() << " = " << magDir
|
||||||
<< " vector must be greater than zero"
|
<< " vector must be greater than zero"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
@ -128,13 +149,13 @@ vector atmBoundaryLayer::flowDir() const
|
|||||||
vector atmBoundaryLayer::zDir() const
|
vector atmBoundaryLayer::zDir() const
|
||||||
{
|
{
|
||||||
const scalar t = time_.timeOutputValue();
|
const scalar t = time_.timeOutputValue();
|
||||||
vector dir(zDir_.value(t));
|
const vector dir(zDir_.value(t));
|
||||||
const scalar magDir = mag(dir);
|
const scalar magDir = mag(dir);
|
||||||
|
|
||||||
if (magDir < SMALL)
|
if (magDir < SMALL)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "magnitude of " << zDir_.name()
|
<< "magnitude of " << zDir_.name() << " = " << magDir
|
||||||
<< " vector must be greater than zero"
|
<< " vector must be greater than zero"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
@ -149,14 +170,22 @@ tmp<scalarField> atmBoundaryLayer::Ustar(const scalarField& z0) const
|
|||||||
const scalar Uref = Uref_.value(t);
|
const scalar Uref = Uref_.value(t);
|
||||||
const scalar Zref = Zref_.value(t);
|
const scalar Zref = Zref_.value(t);
|
||||||
|
|
||||||
return kappa_*Uref/(log((Zref + z0)/z0));
|
if (Zref < 0)
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Negative entry in " << Zref_.name() << " = " << Zref
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
// (derived from RH:Eq. 6, HW:Eq. 5)
|
||||||
|
return kappa_*Uref/log((Zref + z0)/z0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void atmBoundaryLayer::autoMap(const fvPatchFieldMapper& mapper)
|
void atmBoundaryLayer::autoMap(const fvPatchFieldMapper& mapper)
|
||||||
{
|
{
|
||||||
z0_->autoMap(mapper);
|
z0_->autoMap(mapper);
|
||||||
zGround_->autoMap(mapper);
|
d_->autoMap(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -167,51 +196,80 @@ void atmBoundaryLayer::rmap
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
z0_->rmap(abl.z0_(), addr);
|
z0_->rmap(abl.z0_(), addr);
|
||||||
zGround_->rmap(abl.zGround_(), addr);
|
d_->rmap(abl.d_(), addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<vectorField> atmBoundaryLayer::U(const vectorField& p) const
|
tmp<vectorField> atmBoundaryLayer::U(const vectorField& pCf) const
|
||||||
{
|
{
|
||||||
const scalar t = time_.timeOutputValue();
|
const scalar t = time_.timeOutputValue();
|
||||||
const scalarField zGround(zGround_->value(t));
|
const scalarField d(d_->value(t));
|
||||||
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
||||||
|
const scalar groundMin = zDir() & ppMin_;
|
||||||
|
|
||||||
scalarField Un((Ustar(z0)/kappa_)*log(((zDir() & p) - zGround + z0)/z0));
|
// (YGCJ:Table 1, RH:Eq. 6, HW:Eq. 5)
|
||||||
|
scalarField Un
|
||||||
|
(
|
||||||
|
(Ustar(z0)/kappa_)*log(((zDir() & pCf) - groundMin - d + z0)/z0)
|
||||||
|
);
|
||||||
|
|
||||||
return flowDir()*Un;
|
return flowDir()*Un;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<scalarField> atmBoundaryLayer::k(const vectorField& p) const
|
tmp<scalarField> atmBoundaryLayer::k(const vectorField& pCf) const
|
||||||
{
|
{
|
||||||
const scalar t = time_.timeOutputValue();
|
const scalar t = time_.timeOutputValue();
|
||||||
|
const scalarField d(d_->value(t));
|
||||||
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
||||||
|
const scalar groundMin = zDir() & ppMin_;
|
||||||
|
|
||||||
return sqr(Ustar(z0))/sqrt(Cmu_);
|
// (YGCJ:Eq. 21; RH:Eq. 7, HW:Eq. 6 when C1=0 and C2=1)
|
||||||
|
return
|
||||||
|
sqr(Ustar(z0))/sqrt(Cmu_)
|
||||||
|
*sqrt(C1_*log(((zDir() & pCf) - groundMin - d + z0)/z0) + C2_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<scalarField> atmBoundaryLayer::epsilon(const vectorField& p) const
|
tmp<scalarField> atmBoundaryLayer::epsilon(const vectorField& pCf) const
|
||||||
{
|
{
|
||||||
const scalar t = time_.timeOutputValue();
|
const scalar t = time_.timeOutputValue();
|
||||||
const scalarField zGround(zGround_->value(t));
|
const scalarField d(d_->value(t));
|
||||||
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
||||||
|
const scalar groundMin = zDir() & ppMin_;
|
||||||
|
|
||||||
return pow3(Ustar(z0))/(kappa_*((zDir() & p) - zGround + z0));
|
// (YGCJ:Eq. 22; RH:Eq. 8, HW:Eq. 7 when C1=0 and C2=1)
|
||||||
|
return
|
||||||
|
pow3(Ustar(z0))/(kappa_*((zDir() & pCf) - groundMin - d + z0))
|
||||||
|
*sqrt(C1_*log(((zDir() & pCf) - groundMin - d + z0)/z0) + C2_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tmp<scalarField> atmBoundaryLayer::omega(const vectorField& pCf) const
|
||||||
|
{
|
||||||
|
const scalar t = time_.timeOutputValue();
|
||||||
|
const scalarField d(d_->value(t));
|
||||||
|
const scalarField z0(max(z0_->value(t), ROOTVSMALL));
|
||||||
|
const scalar groundMin = zDir() & ppMin_;
|
||||||
|
|
||||||
|
// (YGJ:Eq. 13)
|
||||||
|
return Ustar(z0)/(kappa_*sqrt(Cmu_)*((zDir() & pCf) - groundMin - d + z0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void atmBoundaryLayer::write(Ostream& os) const
|
void atmBoundaryLayer::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
z0_->writeData(os) ;
|
os.writeEntry("initABL", initABL_);
|
||||||
flowDir_.writeData(os);
|
|
||||||
zDir_.writeData(os);
|
|
||||||
os.writeEntry("kappa", kappa_);
|
os.writeEntry("kappa", kappa_);
|
||||||
os.writeEntry("Cmu", Cmu_);
|
os.writeEntry("Cmu", Cmu_);
|
||||||
|
os.writeEntry("C1", C1_);
|
||||||
|
os.writeEntry("C2", C2_);
|
||||||
|
flowDir_.writeData(os);
|
||||||
|
zDir_.writeData(os);
|
||||||
Uref_.writeData(os);
|
Uref_.writeData(os);
|
||||||
Zref_.writeData(os);
|
Zref_.writeData(os);
|
||||||
zGround_->writeData(os);
|
z0_->writeData(os) ;
|
||||||
|
d_->writeData(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2014-2018 OpenFOAM Foundation
|
Copyright (C) 2014-2018 OpenFOAM Foundation
|
||||||
Copyright (C) 2015 OpenCFD Ltd.
|
Copyright (C) 2015-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -31,84 +31,156 @@ Group
|
|||||||
grpRASBoundaryConditions grpInletBoundaryConditions
|
grpRASBoundaryConditions grpInletBoundaryConditions
|
||||||
|
|
||||||
Description
|
Description
|
||||||
This class provides functions to evaluate the velocity and turbulence
|
Base class to set log-law type ground-normal inflow boundary conditions for
|
||||||
distributions appropriate for atmospheric boundary layers (ABL).
|
wind velocity and turbulence quantities for homogeneous, two-dimensional,
|
||||||
|
dry-air, equilibrium and neutral atmospheric boundary layer (ABL) modelling.
|
||||||
|
|
||||||
The profile is derived from the friction velocity, flow direction and
|
The ground-normal profile expressions are due to \c YGCJ
|
||||||
"vertical" direction:
|
(refer to references below) whereat \c RH expressions were generalised:
|
||||||
|
|
||||||
\f[
|
\f[
|
||||||
U = \frac{U^*}{\kappa} ln\left(\frac{z - z_g + z_0}{z_0}\right)
|
u = \frac{u^*}{\kappa} \ln \left( \frac{z - d + z_0}{z_0} \right)
|
||||||
\f]
|
\f]
|
||||||
|
|
||||||
\f[
|
\f[
|
||||||
k = \frac{(U^*)^2}{\sqrt{C_{\mu}}}
|
v = w = 0
|
||||||
\f]
|
\f]
|
||||||
|
|
||||||
\f[
|
\f[
|
||||||
\epsilon = \frac{(U^*)^3}{\kappa(z - z_g + z_0)}
|
k = \frac{(u^*)^2}{\sqrt{C_\mu}}
|
||||||
|
\sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
\f[
|
||||||
|
\epsilon = \frac{(u^*)^3}{\kappa (z - d + z_0)}
|
||||||
|
\sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
\f[
|
||||||
|
\omega = \frac{u^*}{\kappa \sqrt{C_\mu}} \frac{1}{z - d + z_0}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
\f[
|
||||||
|
u^* =
|
||||||
|
\frac{u_{ref} \kappa}{\ln\left(\frac{z_{ref} + z_0}{z_0}\right)}
|
||||||
\f]
|
\f]
|
||||||
|
|
||||||
where
|
where
|
||||||
\vartable
|
\vartable
|
||||||
U^* | Friction velocity
|
u | Ground-normal streamwise flow speed profile [m/s]
|
||||||
\kappa | von Karman's constant
|
v | Spanwise flow speed [m/s]
|
||||||
C_{\mu} | Turbulence viscosity coefficient
|
w | Ground-normal flow speed [m/s]
|
||||||
z | Vertical coordinate
|
k | Ground-normal turbulent kinetic energy (TKE) profile [m^2/s^2]
|
||||||
z_0 | Surface roughness height [m]
|
\epsilon | Ground-normal TKE dissipation rate profile [m^2/s^3]
|
||||||
z_g | Minimum z-coordinate [m]
|
\omega | Ground-normal specific dissipation rate profile [m^2/s^3]
|
||||||
\endvartable
|
u^* | Friction velocity [m/s]
|
||||||
and
|
\kappa | von Kármán constant [-]
|
||||||
\f[
|
C_\mu | Empirical model constant [-]
|
||||||
U^* = \kappa\frac{U_{ref}}{ln\left(\frac{Z_{ref} + z_0}{z_0}\right)}
|
z | Ground-normal coordinate component [m]
|
||||||
\f]
|
d | Ground-normal displacement height [m]
|
||||||
where
|
z_0 | Aerodynamic roughness length [m]
|
||||||
\vartable
|
u_{ref} | Reference mean streamwise wind speed at \f$z_{ref}\f$ [m/s]
|
||||||
U_{ref} | Reference velocity at \f$Z_{ref}\f$ [m/s]
|
z_{ref} | Reference height being used in \f$u^*\f$ estimations [m]
|
||||||
Z_{ref} | Reference height [m]
|
C_1 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
|
C_2 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
\endvartable
|
\endvartable
|
||||||
|
|
||||||
Use in the atmBoundaryLayerInletVelocity, atmBoundaryLayerInletK and
|
Note
|
||||||
atmBoundaryLayerInletEpsilon boundary conditions.
|
- The \c RH expressions are special cases of those in \c YGCJ when \c C1=0
|
||||||
|
and \c C2=1. Both \c C1 and \c C2 can be determined by nonlinear fitting
|
||||||
|
of (\c YGCJ:Eq. 19) with an experimental dataset for \c k. By default,
|
||||||
|
\c atmBoundaryLayerInlet boundary conditions compute \c RH expressions.
|
||||||
|
- \c z is the ground-normal height relative to the global minimum height
|
||||||
|
of the inlet patch; therefore, the minimum of \c z is always zero
|
||||||
|
irrespective of the absolute z-coordinate of the computational patch.
|
||||||
|
|
||||||
Reference:
|
Reference:
|
||||||
D.M. Hargreaves and N.G. Wright, "On the use of the k-epsilon model
|
\verbatim
|
||||||
in commercial CFD software to model the neutral atmospheric boundary
|
The ground-normal profile expressions (tag:RH):
|
||||||
layer", Journal of Wind Engineering and Industrial Aerodynamics
|
Richards, P. J., & Hoxey, R. P. (1993).
|
||||||
95(2007), pp 355-369.
|
Appropriate boundary conditions for computational wind
|
||||||
|
engineering models using the k-ε turbulence model.
|
||||||
|
In Computational Wind Engineering 1 (pp. 145-153).
|
||||||
|
DOI:10.1016/B978-0-444-81688-7.50018-8
|
||||||
|
|
||||||
|
Modifications to preserve the profiles downstream (tag:HW):
|
||||||
|
Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
On the use of the k–ε model in commercial CFD software
|
||||||
|
to model the neutral atmospheric boundary layer.
|
||||||
|
Journal of wind engineering and
|
||||||
|
industrial aerodynamics, 95(5), 355-369.
|
||||||
|
DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
|
||||||
|
Expression generalisations to allow height
|
||||||
|
variation for turbulence quantities (tag:YGCJ):
|
||||||
|
Yang, Y., Gu, M., Chen, S., & Jin, X. (2009).
|
||||||
|
New inflow boundary conditions for modelling the neutral equilibrium
|
||||||
|
atmospheric boundary layer in computational wind engineering.
|
||||||
|
J. of Wind Engineering and Industrial Aerodynamics, 97(2), 88-95.
|
||||||
|
DOI:10.1016/j.jweia.2008.12.001
|
||||||
|
|
||||||
|
The generalised ground-normal profile expression for omega (tag:YGJ):
|
||||||
|
Yang, Y., Gu, M., & Jin, X., (2009).
|
||||||
|
New inflow boundary conditions for modelling the
|
||||||
|
neutral equilibrium atmospheric boundary layer in SST k-ω model.
|
||||||
|
In: The Seventh Asia-Pacific Conference on Wind Engineering,
|
||||||
|
November 8-12, Taipei, Taiwan.
|
||||||
|
|
||||||
|
Theoretical remarks (tag:E):
|
||||||
|
Emeis, S. (2013).
|
||||||
|
Wind Energy Meteorology: Atmospheric
|
||||||
|
Physics for Wind Power Generation.
|
||||||
|
Springer-Verlag Berlin Heidelberg.
|
||||||
|
DOI:10.1007/978-3-642-30523-8
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
\table
|
\table
|
||||||
Property | Description | Required | Default
|
Property | Description | Type | Req'd | Deflt
|
||||||
flowDir | Flow direction | yes |
|
flowDir | Flow direction | TimeFunction1<vector> | yes | -
|
||||||
zDir | Vertical direction | yes |
|
zDir | Ground-normal direction | TimeFunction1<vector> | yes | -
|
||||||
kappa | von Karman's constant | no | 0.41
|
Uref | Reference mean streamwise flow speed being used in <!--
|
||||||
Cmu | Turbulence viscosity coefficient | no | 0.09
|
--> \f$u^*\f$ estimations [m/s] | TimeFunction1<scalar> | yes | -
|
||||||
Uref | Reference velocity [m/s] | yes |
|
Zref | Reference height being used in \f$u^*\f$ estimations [m] <!--
|
||||||
Zref | Reference height [m] | yes |
|
--> | TimeFunction1<scalar> | yes | -
|
||||||
z0 | Surface roughness height [m] | yes |
|
z0 | Surface roughness length [m] <!--
|
||||||
zGround | Minimum z-coordinate [m] | yes |
|
--> | PatchFunction1<scalar> | yes | -
|
||||||
|
d | Displacement height [m] - see Notes <!--
|
||||||
|
--> | PatchFunction1<scalar> | yes | -
|
||||||
|
kappa | von Kármán constant | scalar | no | 0.41
|
||||||
|
Cmu | Empirical model constant | scalar | no | 0.09
|
||||||
|
initABL | Flag to initialise profiles with the theoretical <!--
|
||||||
|
--> ABL expressions, otherwise use "value" list <!--
|
||||||
|
--> | bool | no | true
|
||||||
|
value | ABL profile content when initABL=false <!--
|
||||||
|
--> | scalarList | conditional | -
|
||||||
|
phi | Name of the flux field | word | no | phi
|
||||||
|
C1 | Curve-fitting coefficient \c YGCJ profiles | scalar | no | 0.0
|
||||||
|
C2 | Curve-fitting coefficient \c YGCJ profiles | scalar | no | 1.0
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
|
||||||
\verbatim
|
|
||||||
ground
|
|
||||||
{
|
|
||||||
type atmBoundaryLayerInletVelocity;
|
|
||||||
flowDir (1 0 0);
|
|
||||||
zDir (0 0 1);
|
|
||||||
Uref 10.0;
|
|
||||||
Zref 20.0;
|
|
||||||
z0 uniform 0.1;
|
|
||||||
zGround uniform 0.0;
|
|
||||||
}
|
|
||||||
\endverbatim
|
|
||||||
|
|
||||||
Note
|
Note
|
||||||
D.M. Hargreaves and N.G. Wright recommend Gamma epsilon in the
|
- The derived ABL expressions automatically satisfy the simplified transport
|
||||||
k-epsilon model should be changed from 1.3 to 1.11 for consistency.
|
equation for \c k. Yet the same expressions only satisfy the simplified
|
||||||
The roughness height (Er) is given by Er = 20 z0 following the same
|
transport equation for \c epsilon when the model constants \c sigmaEpsilon
|
||||||
reference.
|
is 1.11 with \c kappa=0.4 (\c HW:p. 358).
|
||||||
|
- \c atmBoundaryLayerInlet boundary conditions inherit \c inletOutlet
|
||||||
|
traits, so that a given inlet condition can be supplied from all sides of
|
||||||
|
the domain, e.g. a ground-normal cylinder domain having a single
|
||||||
|
inlet/outlet boundary where the changes between inlet and outlet depend
|
||||||
|
on the wind direction and patch normals, so that any change in inflow
|
||||||
|
orientation can be handled with the same mesh.
|
||||||
|
- \c d is the displacement height, and "is relevant for flows over forests
|
||||||
|
and cities" (E:p. 28). "The displacement height gives the vertical
|
||||||
|
displacement of the entire flow regime over areas which are densely covered
|
||||||
|
with obstacles such as trees or buildings" (E:p. 28).
|
||||||
|
|
||||||
|
See also
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletVelocityFvPatchVectorField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletKFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
- ExtendedCodeGuide::atmBoundaryLayer
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
atmBoundaryLayer.C
|
atmBoundaryLayer.C
|
||||||
@ -133,7 +205,33 @@ namespace Foam
|
|||||||
|
|
||||||
class atmBoundaryLayer
|
class atmBoundaryLayer
|
||||||
{
|
{
|
||||||
// Private data
|
protected:
|
||||||
|
|
||||||
|
// Protected Data
|
||||||
|
|
||||||
|
//- Flag to initialise profiles with the theoretical ABL expressions,
|
||||||
|
//- otherwise initialises by using "value" entry content
|
||||||
|
Switch initABL_;
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
//- von Kármán constant
|
||||||
|
const scalar kappa_;
|
||||||
|
|
||||||
|
//- Empirical model constant
|
||||||
|
const scalar Cmu_;
|
||||||
|
|
||||||
|
//- Curve-fitting coefficient
|
||||||
|
const scalar C1_;
|
||||||
|
|
||||||
|
//- Curve-fitting coefficient
|
||||||
|
const scalar C2_;
|
||||||
|
|
||||||
|
//- Minimum coordinate vector of this patch
|
||||||
|
const vector ppMin_;
|
||||||
|
|
||||||
//- Reference to the time database
|
//- Reference to the time database
|
||||||
const Time& time_;
|
const Time& time_;
|
||||||
@ -141,29 +239,23 @@ class atmBoundaryLayer
|
|||||||
//- Reference to the patch
|
//- Reference to the patch
|
||||||
const polyPatch& patch_;
|
const polyPatch& patch_;
|
||||||
|
|
||||||
//- Flow direction
|
//- Streamwise flow direction
|
||||||
TimeFunction1<vector> flowDir_;
|
TimeFunction1<vector> flowDir_;
|
||||||
|
|
||||||
//- Direction of the z-coordinate
|
//- Direction of the ground-normal coordinate
|
||||||
TimeFunction1<vector> zDir_;
|
TimeFunction1<vector> zDir_;
|
||||||
|
|
||||||
//- Von Karman constant
|
//- Reference mean streamwise flow speed being used in Ustar estimations
|
||||||
const scalar kappa_;
|
|
||||||
|
|
||||||
//- Turbulent viscosity coefficient
|
|
||||||
const scalar Cmu_;
|
|
||||||
|
|
||||||
//- Reference velocity
|
|
||||||
TimeFunction1<scalar> Uref_;
|
TimeFunction1<scalar> Uref_;
|
||||||
|
|
||||||
//- Reference height
|
//- Reference height being used in Ustar estimations
|
||||||
TimeFunction1<scalar> Zref_;
|
TimeFunction1<scalar> Zref_;
|
||||||
|
|
||||||
//- Surface roughness height
|
//- Surface roughness length
|
||||||
autoPtr<PatchFunction1<scalar>> z0_;
|
autoPtr<PatchFunction1<scalar>> z0_;
|
||||||
|
|
||||||
//- Minimum coordinate value in z direction
|
//- Displacement height
|
||||||
autoPtr<PatchFunction1<scalar>> zGround_;
|
autoPtr<PatchFunction1<scalar>> d_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -193,14 +285,14 @@ public:
|
|||||||
atmBoundaryLayer(const atmBoundaryLayer&);
|
atmBoundaryLayer(const atmBoundaryLayer&);
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member Functions
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return flow direction
|
//- Return flow direction
|
||||||
vector flowDir() const;
|
vector flowDir() const;
|
||||||
|
|
||||||
//- Return z-direction
|
//- Return the ground-normal direction
|
||||||
vector zDir() const;
|
vector zDir() const;
|
||||||
|
|
||||||
//- Return friction velocity
|
//- Return friction velocity
|
||||||
@ -219,14 +311,16 @@ public:
|
|||||||
// Evaluate functions
|
// Evaluate functions
|
||||||
|
|
||||||
//- Return the velocity distribution for the ATM
|
//- Return the velocity distribution for the ATM
|
||||||
tmp<vectorField> U(const vectorField& p) const;
|
tmp<vectorField> U(const vectorField& pCf) const;
|
||||||
|
|
||||||
//- Return the turbulent kinetic energy distribution for the ATM
|
//- Return the turbulent kinetic energy distribution for the ATM
|
||||||
tmp<scalarField> k(const vectorField& p) const;
|
tmp<scalarField> k(const vectorField& pCf) const;
|
||||||
|
|
||||||
//- Return the turbulent dissipation rate distribution for the ATM
|
//- Return the turbulent dissipation rate distribution for the ATM
|
||||||
tmp<scalarField> epsilon(const vectorField& p) const;
|
tmp<scalarField> epsilon(const vectorField& pCf) const;
|
||||||
|
|
||||||
|
//- Return the specific dissipation rate distribution for the ATM
|
||||||
|
tmp<scalarField> omega(const vectorField& pCf) const;
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
void write(Ostream&) const;
|
void write(Ostream&) const;
|
||||||
|
|||||||
@ -28,6 +28,7 @@ License
|
|||||||
|
|
||||||
#include "atmBoundaryLayerInletEpsilonFvPatchScalarField.H"
|
#include "atmBoundaryLayerInletEpsilonFvPatchScalarField.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "turbulenceModel.H"
|
||||||
#include "fvPatchFieldMapper.H"
|
#include "fvPatchFieldMapper.H"
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
@ -68,13 +69,14 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField
|
|||||||
refGrad() = 0;
|
refGrad() = 0;
|
||||||
valueFraction() = 1;
|
valueFraction() = 1;
|
||||||
|
|
||||||
if (dict.found("value"))
|
if (!initABL_)
|
||||||
{
|
{
|
||||||
scalarField::operator=(scalarField("value", dict, p.size()));
|
scalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scalarField::operator=(refValue());
|
scalarField::operator=(refValue());
|
||||||
|
initABL_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,8 +150,8 @@ void atmBoundaryLayerInletEpsilonFvPatchScalarField::rmap
|
|||||||
void atmBoundaryLayerInletEpsilonFvPatchScalarField::write(Ostream& os) const
|
void atmBoundaryLayerInletEpsilonFvPatchScalarField::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
fvPatchScalarField::write(os);
|
fvPatchScalarField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
|
||||||
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
|
atmBoundaryLayer::write(os);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2018 OpenFOAM Foundation
|
Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -30,28 +31,74 @@ Group
|
|||||||
grpRASBoundaryConditions grpInletBoundaryConditions
|
grpRASBoundaryConditions grpInletBoundaryConditions
|
||||||
|
|
||||||
Description
|
Description
|
||||||
This boundary condition specifies an inlet value for the turbulence
|
This boundary condition provides a log-law type ground-normal inflow
|
||||||
dissipation, \f$\epsilon\f$, appropriate for atmospheric boundary layers.
|
boundary condition for turbulent kinetic energy dissipation rate, i.e.
|
||||||
|
\c epsilon, for homogeneous, two-dimensional, dry-air, equilibrium and
|
||||||
|
neutral atmospheric boundary layer modelling.
|
||||||
|
|
||||||
See Foam::atmBoundaryLayer for details.
|
The ground-normal \c epsilon profile expression:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
\epsilon = \frac{(u^*)^3}{\kappa (z - d + z_0)}
|
||||||
|
\sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
where
|
||||||
|
\vartable
|
||||||
|
\epsilon | Ground-normal TKE dissipation rate profile [m^2/s^3]
|
||||||
|
u^* | Friction velocity [m/s]
|
||||||
|
\kappa | von Kármán constant [-]
|
||||||
|
z | Ground-normal coordinate component [m]
|
||||||
|
z_0 | Aerodynamic roughness length [m]
|
||||||
|
d | Ground-normal displacement height [m]
|
||||||
|
C_1 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
|
C_2 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
|
\endvartable
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\heading Required fields
|
||||||
|
\plaintable
|
||||||
|
epsilon | Turbulent kinetic energy dissipation rate [m^2/s^3]
|
||||||
|
\endplaintable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
Example of the boundary condition specification:
|
||||||
\verbatim
|
\verbatim
|
||||||
ground
|
inlet
|
||||||
{
|
{
|
||||||
|
// Mandatory entries (unmodifiable)
|
||||||
type atmBoundaryLayerInletEpsilon;
|
type atmBoundaryLayerInletEpsilon;
|
||||||
|
|
||||||
|
// Mandatory (inherited) entries (unmodifiable)
|
||||||
|
flowDir (1 0 0);
|
||||||
z (0 0 1);
|
z (0 0 1);
|
||||||
Uref 10.0;
|
Uref 10.0;
|
||||||
Zref 20.0;
|
Zref 0.0;
|
||||||
z0 uniform 0.1;
|
z0 uniform 0.1;
|
||||||
zGround uniform 0.0;
|
d uniform 0.0;
|
||||||
|
|
||||||
|
// Optional (inherited) entries (unmodifiable)
|
||||||
|
kappa 0.41;
|
||||||
|
Cmu 0.09;
|
||||||
|
initABL true;
|
||||||
|
phi phi;
|
||||||
|
C1 0.0;
|
||||||
|
C2 1.0;
|
||||||
|
|
||||||
|
// Conditional mandatory (inherited) entries (runtime modifiable)
|
||||||
|
value uniform 0; // when initABL=false
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
The inherited entries are elaborated in:
|
||||||
|
- \link atmBoundaryLayer.H \endlink
|
||||||
|
- \link inletOutletFvPatchField.H \endlink
|
||||||
|
|
||||||
See also
|
See also
|
||||||
Foam::atmBoundaryLayer,
|
- Foam::atmBoundaryLayer
|
||||||
Foam::atmBoundaryLayerInletVelocityFvPatchVectorField,
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletKFvPatchScalarField
|
||||||
Foam::atmBoundaryLayerInletKFvPatchScalarField
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletVelocityFvPatchVectorField
|
||||||
|
- ExtendedCodeGuide::atmBoundaryLayer::atmBoundaryLayerInletEpsilon
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
||||||
@ -104,7 +151,7 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
//- Construct by mapping given
|
//- Construct by mapping given
|
||||||
// atmBoundaryLayerInletEpsilonFvPatchScalarField onto a new patch
|
//- atmBoundaryLayerInletEpsilonFvPatchScalarField onto a new patch
|
||||||
atmBoundaryLayerInletEpsilonFvPatchScalarField
|
atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
(
|
(
|
||||||
const atmBoundaryLayerInletEpsilonFvPatchScalarField&,
|
const atmBoundaryLayerInletEpsilonFvPatchScalarField&,
|
||||||
@ -142,12 +189,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member Functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
// Mapping functions
|
// Mapping functions
|
||||||
|
|
||||||
//- Map (and resize as needed) from self given a mapping object
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
|||||||
@ -68,13 +68,14 @@ atmBoundaryLayerInletKFvPatchScalarField
|
|||||||
refGrad() = 0;
|
refGrad() = 0;
|
||||||
valueFraction() = 1;
|
valueFraction() = 1;
|
||||||
|
|
||||||
if (dict.found("value"))
|
if (!initABL_)
|
||||||
{
|
{
|
||||||
scalarField::operator=(scalarField("value", dict, p.size()));
|
scalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scalarField::operator=(refValue());
|
scalarField::operator=(refValue());
|
||||||
|
initABL_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,8 +149,8 @@ void atmBoundaryLayerInletKFvPatchScalarField::rmap
|
|||||||
void atmBoundaryLayerInletKFvPatchScalarField::write(Ostream& os) const
|
void atmBoundaryLayerInletKFvPatchScalarField::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
fvPatchScalarField::write(os);
|
fvPatchScalarField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
|
||||||
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
|
atmBoundaryLayer::write(os);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2014-2018 OpenFOAM Foundation
|
Copyright (C) 2014-2018 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -30,28 +31,71 @@ Group
|
|||||||
grpRASBoundaryConditions grpInletBoundaryConditions
|
grpRASBoundaryConditions grpInletBoundaryConditions
|
||||||
|
|
||||||
Description
|
Description
|
||||||
This boundary condition specifies an inlet value for the turbulence
|
This boundary condition provides a log-law type ground-normal inflow
|
||||||
kinetic energy, \f$k\f$, appropriate for atmospheric boundary layers.
|
boundary condition for turbulent kinetic energy, i.e. \c k,
|
||||||
|
for homogeneous, two-dimensional, dry-air, equilibrium and neutral
|
||||||
|
atmospheric boundary layer modelling.
|
||||||
|
|
||||||
See Foam::atmBoundaryLayer for details.
|
The ground-normal \c k profile expression:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
k = \frac{(u^*)^2}{\sqrt{C_\mu}}
|
||||||
|
\sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
where
|
||||||
|
\vartable
|
||||||
|
k | Ground-normal turbulent kinetic energy profile [m^2/s^3]
|
||||||
|
u^* | Friction velocity [m/s]
|
||||||
|
C_\mu | Empirical model constant [-]
|
||||||
|
C_1 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
|
C_2 | Curve-fitting coefficient for \c YGCJ profiles [-]
|
||||||
|
\endvartable
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\heading Required fields
|
||||||
|
\plaintable
|
||||||
|
k | Turbulent kinetic energy [m^2/s^2]
|
||||||
|
\endplaintable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
Example of the boundary condition specification:
|
||||||
\verbatim
|
\verbatim
|
||||||
ground
|
inlet
|
||||||
{
|
{
|
||||||
|
// Mandatory entries (unmodifiable)
|
||||||
type atmBoundaryLayerInletK;
|
type atmBoundaryLayerInletK;
|
||||||
z (0 0 1);
|
|
||||||
|
// Mandatory (inherited) entries (unmodifiable)
|
||||||
Uref 10.0;
|
Uref 10.0;
|
||||||
Zref 20.0;
|
Zref 0.0;
|
||||||
z0 uniform 0.1;
|
z0 uniform 0.1;
|
||||||
zGround uniform 0.0;
|
d uniform 0.0;
|
||||||
|
flowDir (1 0 0); // not used
|
||||||
|
z (0 0 1); // not used
|
||||||
|
|
||||||
|
// Optional (inherited) entries (unmodifiable)
|
||||||
|
kappa 0.41;
|
||||||
|
Cmu 0.09;
|
||||||
|
initABL true;
|
||||||
|
phi phi;
|
||||||
|
C1 0.0;
|
||||||
|
C2 1.0;
|
||||||
|
|
||||||
|
// Conditional mandatory (inherited) entries (runtime modifiable)
|
||||||
|
value uniform 0; // when initABL=false
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
The inherited entries are elaborated in:
|
||||||
|
- \link atmBoundaryLayer.H \endlink
|
||||||
|
- \link inletOutletFvPatchField.H \endlink
|
||||||
|
|
||||||
See also
|
See also
|
||||||
Foam::atmBoundaryLayer,
|
- Foam::atmBoundaryLayer
|
||||||
Foam::atmBoundaryLayerInletVelocityFvPatchVectorField,
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletVelocityFvPatchVectorField
|
||||||
Foam::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
- ExtendedCodeGuide::atmBoundaryLayer::atmBoundaryLayerInletK
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
atmBoundaryLayerInletKFvPatchScalarField.C
|
atmBoundaryLayerInletKFvPatchScalarField.C
|
||||||
@ -104,7 +148,7 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
//- Construct by mapping given
|
//- Construct by mapping given
|
||||||
// atmBoundaryLayerInletKFvPatchScalarField onto a new patch
|
//- atmBoundaryLayerInletKFvPatchScalarField onto a new patch
|
||||||
atmBoundaryLayerInletKFvPatchScalarField
|
atmBoundaryLayerInletKFvPatchScalarField
|
||||||
(
|
(
|
||||||
const atmBoundaryLayerInletKFvPatchScalarField&,
|
const atmBoundaryLayerInletKFvPatchScalarField&,
|
||||||
@ -142,7 +186,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member Functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|||||||
@ -0,0 +1,169 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2020 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 "atmBoundaryLayerInletOmegaFvPatchScalarField.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "surfaceFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField::
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
|
atmBoundaryLayer(iF.time(), p.patch())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField::
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
|
atmBoundaryLayer(iF.time(), p.patch(), dict)
|
||||||
|
{
|
||||||
|
phiName_ = dict.getOrDefault<word>("phi", "phi");
|
||||||
|
|
||||||
|
refValue() = omega(patch().Cf());
|
||||||
|
refGrad() = 0;
|
||||||
|
valueFraction() = 1;
|
||||||
|
|
||||||
|
if (!initABL_)
|
||||||
|
{
|
||||||
|
scalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scalarField::operator=(refValue());
|
||||||
|
initABL_ = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField::
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const atmBoundaryLayerInletOmegaFvPatchScalarField& psf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
inletOutletFvPatchScalarField(psf, p, iF, mapper),
|
||||||
|
atmBoundaryLayer(psf, p, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField::
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const atmBoundaryLayerInletOmegaFvPatchScalarField& psf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
inletOutletFvPatchScalarField(psf, iF),
|
||||||
|
atmBoundaryLayer(psf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void atmBoundaryLayerInletOmegaFvPatchScalarField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
refValue() = omega(patch().Cf());
|
||||||
|
|
||||||
|
inletOutletFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void atmBoundaryLayerInletOmegaFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inletOutletFvPatchScalarField::autoMap(m);
|
||||||
|
atmBoundaryLayer::autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void atmBoundaryLayerInletOmegaFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField& psf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inletOutletFvPatchScalarField::rmap(psf, addr);
|
||||||
|
|
||||||
|
const atmBoundaryLayerInletOmegaFvPatchScalarField& blpsf =
|
||||||
|
refCast<const atmBoundaryLayerInletOmegaFvPatchScalarField>(psf);
|
||||||
|
|
||||||
|
atmBoundaryLayer::rmap(blpsf, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void atmBoundaryLayerInletOmegaFvPatchScalarField::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
fvPatchScalarField::write(os);
|
||||||
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
|
atmBoundaryLayer::write(os);
|
||||||
|
writeEntry("value", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,223 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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::atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
|
||||||
|
Group
|
||||||
|
grpRASBoundaryConditions grpInletBoundaryConditions
|
||||||
|
|
||||||
|
Description
|
||||||
|
This boundary condition provides a log-law type ground-normal inflow
|
||||||
|
boundary condition for specific dissipation rate, i.e. \c omega,
|
||||||
|
for homogeneous, two-dimensional, dry-air, equilibrium and neutral
|
||||||
|
atmospheric boundary layer modelling.
|
||||||
|
|
||||||
|
The ground-normal \c omega profile expression:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
\omega = \frac{u^*}{\kappa \sqrt{C_\mu}} \frac{1}{z - d + z_0}
|
||||||
|
\f]
|
||||||
|
|
||||||
|
where
|
||||||
|
\vartable
|
||||||
|
\omega | Ground-normal specific dissipation rate profile [m^2/s^3]
|
||||||
|
u^* | Friction velocity [m/s]
|
||||||
|
\kappa | von Kármán constant [-]
|
||||||
|
C_\mu | Empirical model constant [-]
|
||||||
|
z | Ground-normal coordinate component [m]
|
||||||
|
d | Ground-normal displacement height [m]
|
||||||
|
z_0 | Aerodynamic roughness length [m]
|
||||||
|
\endvartable
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\heading Required fields
|
||||||
|
\plaintable
|
||||||
|
omega | Specific dissipation rate [1/s]
|
||||||
|
\endplaintable
|
||||||
|
|
||||||
|
Example of the boundary condition specification:
|
||||||
|
\verbatim
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
// Mandatory entries (unmodifiable)
|
||||||
|
type atmBoundaryLayerInletOmega;
|
||||||
|
|
||||||
|
// Mandatory (inherited) entries (unmodifiable)
|
||||||
|
flowDir (1 0 0);
|
||||||
|
z (0 0 1);
|
||||||
|
Uref 10.0;
|
||||||
|
Zref 0.0;
|
||||||
|
z0 uniform 0.1;
|
||||||
|
d uniform 0.0;
|
||||||
|
|
||||||
|
// Optional (inherited) entries (unmodifiable)
|
||||||
|
kappa 0.41;
|
||||||
|
Cmu 0.09;
|
||||||
|
initABL true;
|
||||||
|
phi phi;
|
||||||
|
C1 0.0;
|
||||||
|
C2 1.0;
|
||||||
|
|
||||||
|
// Conditional mandatory (inherited) entries (runtime modifiable)
|
||||||
|
value uniform 0; // when initABL=false
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
The inherited entries are elaborated in:
|
||||||
|
- \link atmBoundaryLayer.H \endlink
|
||||||
|
- \link inletOutletFvPatchField.H \endlink
|
||||||
|
|
||||||
|
See also
|
||||||
|
- Foam::atmBoundaryLayer
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletVelocityFvPatchVelocityField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletKFvPatchScalarField
|
||||||
|
- ExtendedCodeGuide::atmBoundaryLayer::atmBoundaryLayerInletOmega
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef atmBoundaryLayerInletOmegaFvPatchScalarField_H
|
||||||
|
#define atmBoundaryLayerInletOmegaFvPatchScalarField_H
|
||||||
|
|
||||||
|
#include "fvPatchFields.H"
|
||||||
|
#include "inletOutletFvPatchFields.H"
|
||||||
|
#include "atmBoundaryLayer.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class atmBoundaryLayerInletOmegaFvPatchScalarField Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
:
|
||||||
|
public inletOutletFvPatchScalarField,
|
||||||
|
public atmBoundaryLayer
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("atmBoundaryLayerInletOmega");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given
|
||||||
|
//- atmBoundaryLayerInletOmegaFvPatchScalarField onto a new patch
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const atmBoundaryLayerInletOmegaFvPatchScalarField&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new atmBoundaryLayerInletOmegaFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
(
|
||||||
|
const atmBoundaryLayerInletOmegaFvPatchScalarField&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new atmBoundaryLayerInletOmegaFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given fvPatchField onto this fvPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -68,13 +68,14 @@ atmBoundaryLayerInletVelocityFvPatchVectorField
|
|||||||
refGrad() = Zero;
|
refGrad() = Zero;
|
||||||
valueFraction() = 1;
|
valueFraction() = 1;
|
||||||
|
|
||||||
if (dict.found("value"))
|
if (!initABL_)
|
||||||
{
|
{
|
||||||
vectorField::operator=(vectorField("value", dict, p.size()));
|
vectorField::operator=(vectorField("value", dict, p.size()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vectorField::operator=(refValue());
|
vectorField::operator=(refValue());
|
||||||
|
initABL_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,8 +149,8 @@ void atmBoundaryLayerInletVelocityFvPatchVectorField::rmap
|
|||||||
void atmBoundaryLayerInletVelocityFvPatchVectorField::write(Ostream& os) const
|
void atmBoundaryLayerInletVelocityFvPatchVectorField::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
fvPatchVectorField::write(os);
|
fvPatchVectorField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
|
||||||
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
|
atmBoundaryLayer::write(os);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2018 OpenFOAM Foundation
|
Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -30,29 +31,77 @@ Group
|
|||||||
grpRASBoundaryConditions grpInletBoundaryConditions
|
grpRASBoundaryConditions grpInletBoundaryConditions
|
||||||
|
|
||||||
Description
|
Description
|
||||||
This boundary condition specifies a velocity inlet profile appropriate
|
This boundary condition provides a log-law type ground-normal inflow
|
||||||
for atmospheric boundary layers (ABL).
|
boundary condition for streamwise component of wind velocity, i.e. \c u,
|
||||||
|
for homogeneous, two-dimensional, dry-air, equilibrium and neutral
|
||||||
|
atmospheric boundary layer modelling.
|
||||||
|
|
||||||
See Foam::atmBoundaryLayer for details.
|
The ground-normal streamwise flow speed profile expression:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
u = \frac{u^*}{\kappa} \ln \left( \frac{z - d + z_0}{z_0} \right)
|
||||||
|
\f]
|
||||||
|
|
||||||
|
\f[
|
||||||
|
v = w = 0
|
||||||
|
\f]
|
||||||
|
|
||||||
|
where
|
||||||
|
\vartable
|
||||||
|
u | Ground-normal streamwise flow speed profile [m/s]
|
||||||
|
v | Spanwise flow speed [m/s]
|
||||||
|
w | Ground-normal flow speed [m/s]
|
||||||
|
u^* | Friction velocity [m/s]
|
||||||
|
\kappa | von Kármán constant [-]
|
||||||
|
z | Ground-normal coordinate component [m]
|
||||||
|
d | Ground-normal displacement height [m]
|
||||||
|
z_0 | Aerodynamic roughness length [m]
|
||||||
|
\endvartable
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\heading Required fields
|
||||||
|
\plaintable
|
||||||
|
U | Velocity [m/s]
|
||||||
|
\endplaintable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
Example of the boundary condition specification:
|
||||||
\verbatim
|
\verbatim
|
||||||
ground
|
inlet
|
||||||
{
|
{
|
||||||
|
// Mandatory entries (unmodifiable)
|
||||||
type atmBoundaryLayerInletVelocity;
|
type atmBoundaryLayerInletVelocity;
|
||||||
n (1 0 0);
|
|
||||||
|
// Mandatory (inherited) entries (unmodifiable)
|
||||||
|
flowDir (1 0 0);
|
||||||
z (0 0 1);
|
z (0 0 1);
|
||||||
Uref 10.0;
|
Uref 10.0;
|
||||||
Zref 20.0;
|
Zref 0.0;
|
||||||
z0 uniform 0.1;
|
z0 uniform 0.1;
|
||||||
zGround uniform 0.0;
|
d uniform 0.0;
|
||||||
|
|
||||||
|
// Optional (inherited) entries (unmodifiable)
|
||||||
|
kappa 0.41;
|
||||||
|
Cmu 0.09;
|
||||||
|
initABL true;
|
||||||
|
phi phi;
|
||||||
|
C1 0.0;
|
||||||
|
C2 1.0;
|
||||||
|
|
||||||
|
// Conditional mandatory (inherited) entries (runtime modifiable)
|
||||||
|
value uniform (0 0 0); // when initABL=false
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
The inherited entries are elaborated in:
|
||||||
|
- \link atmBoundaryLayer.H \endlink
|
||||||
|
- \link inletOutletFvPatchField.H \endlink
|
||||||
|
|
||||||
See also
|
See also
|
||||||
Foam::atmBoundaryLayer,
|
- Foam::atmBoundaryLayer
|
||||||
Foam::atmBoundaryLayerInletKFvPatchScalarField,
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletKFvPatchScalarField
|
||||||
Foam::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
|
- Foam::atmBoundaryLayer::atmBoundaryLayerInletOmegaFvPatchScalarField
|
||||||
|
- ExtendedCodeGuide::atmBoundaryLayer::atmBoundaryLayerInletVelocity
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
||||||
@ -105,7 +154,7 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
//- Construct by mapping given
|
//- Construct by mapping given
|
||||||
// atmBoundaryLayerInletVelocityFvPatchVectorField onto a new patch
|
//- atmBoundaryLayerInletVelocityFvPatchVectorField onto a new patch
|
||||||
atmBoundaryLayerInletVelocityFvPatchVectorField
|
atmBoundaryLayerInletVelocityFvPatchVectorField
|
||||||
(
|
(
|
||||||
const atmBoundaryLayerInletVelocityFvPatchVectorField&,
|
const atmBoundaryLayerInletVelocityFvPatchVectorField&,
|
||||||
@ -143,7 +192,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member Functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|||||||
@ -10,7 +10,6 @@ FoamFile
|
|||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class volVectorField;
|
class volVectorField;
|
||||||
location "0";
|
|
||||||
object U;
|
object U;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -10,7 +10,6 @@ FoamFile
|
|||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class volScalarField;
|
class volScalarField;
|
||||||
location "0";
|
|
||||||
object epsilon;
|
object epsilon;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -11,6 +11,6 @@ Zref 20;
|
|||||||
zDir (0 0 1);
|
zDir (0 0 1);
|
||||||
flowDir (1 0 0);
|
flowDir (1 0 0);
|
||||||
z0 uniform 0.1;
|
z0 uniform 0.1;
|
||||||
zGround uniform 935.0;
|
d uniform 0.0;
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -10,7 +10,6 @@ FoamFile
|
|||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class volScalarField;
|
class volScalarField;
|
||||||
location "0";
|
|
||||||
object nut;
|
object nut;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -3,15 +3,16 @@ cd "${0%/*}" || exit # Run from this directory
|
|||||||
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Make dummy 0 directory
|
restore0Dir
|
||||||
rm -rf 0
|
|
||||||
mkdir 0
|
|
||||||
|
|
||||||
runApplication blockMesh
|
runApplication blockMesh
|
||||||
cp system/decomposeParDict.hierarchical system/decomposeParDict
|
|
||||||
|
cp -f system/decomposeParDict.hierarchical system/decomposeParDict
|
||||||
|
|
||||||
runApplication decomposePar
|
runApplication decomposePar
|
||||||
|
|
||||||
cp system/decomposeParDict.ptscotch system/decomposeParDict
|
cp -f system/decomposeParDict.ptscotch system/decomposeParDict
|
||||||
|
|
||||||
runParallel snappyHexMesh -overwrite
|
runParallel snappyHexMesh -overwrite
|
||||||
|
|
||||||
find . -iname '*level*' -type f -delete
|
find . -iname '*level*' -type f -delete
|
||||||
@ -20,9 +21,11 @@ find . -iname '*level*' -type f -delete
|
|||||||
restore0Dir -processor
|
restore0Dir -processor
|
||||||
|
|
||||||
runParallel topoSet
|
runParallel topoSet
|
||||||
|
|
||||||
runParallel $(getApplication)
|
runParallel $(getApplication)
|
||||||
|
|
||||||
runApplication reconstructParMesh -constant
|
runApplication reconstructParMesh -constant
|
||||||
|
|
||||||
runApplication reconstructPar
|
runApplication reconstructPar
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -0,0 +1,51 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6a
|
||||||
|
5.91040498512291, 0.1664466550044139
|
||||||
|
6.231131486544684, 0.20004461022864461
|
||||||
|
6.510015557466532, 0.19864177284976137
|
||||||
|
6.802843831934471, 0.19716879360193929
|
||||||
|
7.332743206409284, 0.264925839001954
|
||||||
|
7.806875586561379, 0.3681746700877184
|
||||||
|
8.25311955962129, 0.4715637849113534
|
||||||
|
8.62964251495074, 0.5753036090797181
|
||||||
|
9.034053877372374, 0.678903149510198
|
||||||
|
9.522159920655517, 0.8877154933568576
|
||||||
|
9.996321760392572, 1.0965979790724703
|
||||||
|
10.37987573666498, 1.4115700415660655
|
||||||
|
10.833170370391153, 1.7966138311348487
|
||||||
|
11.23767993142931, 2.2523255536648463
|
||||||
|
11.670146638591216, 2.9543755199266144
|
||||||
|
12.060820014561454, 3.797480784635006
|
||||||
|
12.535286270009722, 5.097911034859102
|
||||||
|
12.884235053819857, 6.328550125483808
|
||||||
|
13.135525313499084, 7.3836241181413556
|
||||||
|
13.38685485262492, 8.579542983638703
|
||||||
|
13.582407577566388, 9.775742416611841
|
||||||
|
13.791924145777251, 11.042294144135937
|
||||||
|
13.931660777087739, 12.09792927174503
|
||||||
|
14.057492484298745, 13.294479414062891
|
||||||
|
14.18332419150975, 14.491029556380738
|
||||||
|
14.330111483486501, 15.828319358734987
|
||||||
|
14.448990728647765, 17.09532700840721
|
||||||
|
14.61685144373009, 18.99589108931726
|
||||||
|
14.756823751720233, 20.896595453965197
|
||||||
|
14.875761916051404, 22.37487041289713
|
||||||
|
15.001799840357107, 24.310856137623965
|
||||||
|
15.113873921393413, 26.176489567799837
|
||||||
|
15.239960945007372, 28.28853138357643
|
||||||
|
15.345131663302196, 30.400678412156434
|
||||||
|
15.457294123093371, 32.58321280622188
|
||||||
|
15.527476674321482, 34.237789352744855
|
||||||
|
15.611672168127257, 36.13877428486858
|
||||||
|
15.702849583567724, 38.07493536426778
|
||||||
|
15.766060033022793, 39.72954698172525
|
||||||
|
15.843312884640476, 41.73620063941329
|
||||||
|
15.906533153957195, 43.42602347508071
|
||||||
|
15.969841802028782, 45.43274727463769
|
||||||
|
16.03311117065377, 47.29862620135487
|
||||||
|
16.089418257367353, 49.199751417216476
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6c
|
||||||
|
0.0020701794999818555, 49.592305129990216
|
||||||
|
0.002126271773891171, 48.292814797999284
|
||||||
|
0.002164558818180094, 47.16429009397673
|
||||||
|
0.0022035486578201443, 45.96736595968585
|
||||||
|
0.002263213410047251, 44.873073918499905
|
||||||
|
0.0023244936848750017, 43.77878187731396
|
||||||
|
0.002387462205022902, 42.54769097559135
|
||||||
|
0.0024740215292696124, 41.179834161034535
|
||||||
|
0.0025410406291819093, 39.948743259311925
|
||||||
|
0.002633152079108662, 38.64928587502344
|
||||||
|
0.0027286108031715625, 37.31562877560078
|
||||||
|
0.0028401715363583204, 35.70839042895602
|
||||||
|
0.0029826690252419655, 33.99858588461122
|
||||||
|
0.003132287402529308, 32.391380485668904
|
||||||
|
0.0033188290732853176, 30.442210883087387
|
||||||
|
0.003595390196335023, 28.390524504359476
|
||||||
|
0.003895115615003372, 25.99684097428992
|
||||||
|
0.004372395839556802, 23.329691513956814
|
||||||
|
0.004908099067927725, 20.799340914160364
|
||||||
|
0.0053644197877401765, 18.884486343671554
|
||||||
|
0.0057596497045315715, 17.721959610729485
|
||||||
|
0.006351093794633881, 16.08073570901643
|
||||||
|
0.0069412791686608594, 14.644677150405933
|
||||||
|
0.007791105651922957, 13.003519144097766
|
||||||
|
0.008667461744937913, 11.704325341428799
|
||||||
|
0.009815095638299107, 10.336798003896376
|
||||||
|
0.011164037426490142, 9.037686570483537
|
||||||
|
0.012698101857369398, 7.977973143009834
|
||||||
|
0.01489867869651591, 6.81577588709218
|
||||||
|
0.017636199130990377, 5.790410439413613
|
||||||
|
0.020876528350971663, 4.86764413713756
|
||||||
|
0.02549155925888904, 4.013392582088372
|
||||||
|
0.03210854870598559, 3.193456059131897
|
||||||
|
0.04246543677826559, 2.476299893941352
|
||||||
|
0.05793424483227349, 1.8276584759776568
|
||||||
|
0.07527116643710868, 1.4866332818580332
|
||||||
|
0.10592731524255083, 1.043305471657888
|
||||||
|
0.14840638796815175, 0.805159478411511
|
||||||
|
0.21543066611772452, 0.6697444213773878
|
||||||
|
0.30316307258220004, 0.5000143322505579
|
||||||
|
0.4519488475844894, 0.4330975485920945
|
||||||
|
0.6531567674299283, 0.29766601770675294
|
||||||
|
0.9565872888053345, 0.19648362350923776
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6b - 2500
|
||||||
|
1.2900874635568513, 49.577353047723314
|
||||||
|
1.2896015549076774, 48.40818131143202
|
||||||
|
1.2905733722060253, 47.65161419254281
|
||||||
|
1.2905733722060253, 46.68875311964047
|
||||||
|
1.291059280855199, 45.313220591832724
|
||||||
|
1.292031098153547, 44.212774518335536
|
||||||
|
1.292031098153547, 43.249913445433194
|
||||||
|
1.292517006802721, 42.14948408131183
|
||||||
|
1.2930029154518952, 40.98027892626888
|
||||||
|
1.2930029154518952, 39.74231468968016
|
||||||
|
1.2930029154518952, 38.64190203493463
|
||||||
|
1.2930029154518952, 37.67904096203229
|
||||||
|
1.2934888241010691, 36.372284225146146
|
||||||
|
1.2934888241010691, 34.92799261579263
|
||||||
|
1.2939747327502429, 33.655623774367285
|
||||||
|
1.293488824101069, 32.52083993353679
|
||||||
|
1.2934888241010691, 31.351651487869663
|
||||||
|
1.293488824101069, 30.216850937663335
|
||||||
|
1.293002915451895, 29.116454992293637
|
||||||
|
1.2925170068027212, 27.500240615011972
|
||||||
|
1.292031098153547, 26.124741505955893
|
||||||
|
1.2910592808551993, 24.64609541989325
|
||||||
|
1.290087463556851, 23.064285647448216
|
||||||
|
1.2881438289601554, 21.344957711911654
|
||||||
|
1.2866861030126335, 20.141431498911224
|
||||||
|
1.2857142857142856, 18.559621726466183
|
||||||
|
1.2837706511175897, 17.218560640998398
|
||||||
|
1.28134110787172, 15.705576787602446
|
||||||
|
1.2784256559766762, 13.986282270817554
|
||||||
|
1.2759961127308066, 12.576462103803983
|
||||||
|
1.2740524781341107, 11.132237331953803
|
||||||
|
1.2725947521865888, 9.894323223492584
|
||||||
|
1.2696793002915452, 8.243804497629263
|
||||||
|
1.2696793002915452, 6.455633933667784
|
||||||
|
1.2701652089407192, 5.01132561493845
|
||||||
|
1.2716229348882409, 3.7045354593006437
|
||||||
|
1.2779397473275025, 2.569517687208503
|
||||||
|
1.2881438289601554, 1.7438572992569021
|
||||||
|
1.303692905733722, 1.2962799582399285
|
||||||
|
1.324101068999028, 1.0204750007686414
|
||||||
|
1.3479105928085517, 0.8821046595097073
|
||||||
|
1.3639455782312924, 0.8471653546464779
|
||||||
|
1.381438289601555, 0.743400130734166
|
||||||
|
1.4086491739552964, 0.6736886147660073
|
||||||
|
1.4329446064139941, 0.6040773550528584
|
||||||
|
1.4514091350826042, 0.5346666078496725
|
||||||
|
1.4747327502429544, 0.533864557809764
|
||||||
|
1.4941690962099123, 0.533196182776507
|
||||||
|
1.5155490767735667, 0.5324609702399243
|
||||||
|
1.5388726919339164, 0.49727102473924845
|
||||||
|
1.5573372206025267, 0.46224817299683707
|
||||||
|
1.5777453838678328, 0.4271584837511426
|
||||||
|
1.5991253644314867, 0.3920353757537569
|
||||||
|
1.6214771622934887, 0.39126674446553267
|
||||||
|
1.6404275996112732, 0.39061507880812485
|
||||||
|
1.6637512147716227, 0.38981302876820223
|
||||||
|
1.6875607385811464, 0.38899426935246595
|
||||||
|
1.7089407191448005, 0.35387116135510155
|
||||||
|
1.727405247813411, 0.3876241005343033
|
||||||
|
1.748785228377065, 0.3181130970761288
|
||||||
|
1.7759961127308066, 0.3171773720295761
|
||||||
|
1.8032069970845481, 0.3162416469830234
|
||||||
|
1.8304178814382892, 0.3153059219364778
|
||||||
|
1.8624878522837705, 0.3142031031316108
|
||||||
|
1.899416909620991, 0.3129331905684367
|
||||||
|
1.933430515063168, 0.31176353426025116
|
||||||
|
1.9620991253644315, 0.2763897856253976
|
||||||
|
1.9839650145772594, 0.27563786371298704
|
||||||
@ -0,0 +1,85 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6b - 4000
|
||||||
|
1.274623968947113, 49.543199450483584
|
||||||
|
1.2755943716642406, 48.54523075114714
|
||||||
|
1.2755943716642406, 47.306414508889745
|
||||||
|
1.2760795730228045, 46.03317000781064
|
||||||
|
1.2760795730228045, 44.82876532783818
|
||||||
|
1.2760795730228045, 43.65877221015063
|
||||||
|
1.2765647743813684, 42.38552770907153
|
||||||
|
1.2765647743813684, 41.14671146681413
|
||||||
|
1.2770499757399323, 39.907878528019964
|
||||||
|
1.2770499757399323, 38.703473848047494
|
||||||
|
1.2770499757399323, 37.499069168075025
|
||||||
|
1.2770499757399323, 36.08819511439299
|
||||||
|
1.2770499757399323, 34.952613558990365
|
||||||
|
1.2775351770984957, 33.78260374476606
|
||||||
|
1.2770499757399323, 32.578215761330355
|
||||||
|
1.277049975739932, 31.304987956788032
|
||||||
|
1.2765647743813684, 29.99736528649755
|
||||||
|
1.2765647743813684, 28.861783731094935
|
||||||
|
1.2760795730228045, 27.554161060804454
|
||||||
|
1.2755943716642406, 26.315361515083826
|
||||||
|
1.274623968947113, 24.973343979045183
|
||||||
|
1.274623968947113, 23.768939299072716
|
||||||
|
1.2736535662299855, 22.495744887603927
|
||||||
|
1.2731683648714216, 21.39459159102301
|
||||||
|
1.2721979621542938, 20.052574054984376
|
||||||
|
1.2712275594371665, 18.81379120580052
|
||||||
|
1.2702571567200387, 17.609419918901587
|
||||||
|
1.2692867540029111, 16.301813945147877
|
||||||
|
1.2688015526443472, 15.097425961712162
|
||||||
|
1.2678311499272197, 13.824231550243383
|
||||||
|
1.2663755458515285, 12.585465397596302
|
||||||
|
1.2658903444929646, 11.346665851875684
|
||||||
|
1.2658903444929646, 10.039026485048431
|
||||||
|
1.2658903444929646, 8.834621805075933
|
||||||
|
1.2658903444929646, 7.561394000533639
|
||||||
|
1.2668607472100921, 6.391367489772541
|
||||||
|
1.2692867540029111, 5.2901140139709995
|
||||||
|
1.2712275594371665, 4.0856425478514495
|
||||||
|
1.2760795730228045, 3.018717151650982
|
||||||
|
1.2852983988355167, 2.1236992980442153
|
||||||
|
1.2954876273653566, 1.5383521119282548
|
||||||
|
1.3066472586123243, 1.3314987178729467
|
||||||
|
1.3158660844250365, 1.1247121099647401
|
||||||
|
1.328481319747695, 1.0210433131539034
|
||||||
|
1.341581756428918, 0.9517693820912356
|
||||||
|
1.3575934012615236, 0.8823952718079369
|
||||||
|
1.3716642406598738, 0.8130879476717325
|
||||||
|
1.3876758854924793, 0.7781253996733568
|
||||||
|
1.4056283357593402, 0.7086845032429778
|
||||||
|
1.4201843765162545, 0.6393604825699981
|
||||||
|
1.432799611838913, 0.6389263726139447
|
||||||
|
1.4468704512372634, 0.6384421730475864
|
||||||
|
1.4619116933527414, 0.6035130181227615
|
||||||
|
1.4793789422610382, 0.5340888182291508
|
||||||
|
1.495390587093644, 0.5335378325157123
|
||||||
|
1.5080058224163029, 0.5331037225596802
|
||||||
|
1.5308102862688013, 0.4979074230465059
|
||||||
|
1.549247937894226, 0.4628613923642817
|
||||||
|
1.5657447840853955, 0.46229371011408205
|
||||||
|
1.5822416302765647, 0.4617260278638611
|
||||||
|
1.6026200873362444, 0.4266132110345495
|
||||||
|
1.6200873362445416, 0.39160057342586185
|
||||||
|
1.6424065987384764, 0.3908325327344002
|
||||||
|
1.6618146530810287, 0.39016467126356247
|
||||||
|
1.680737506065017, 0.389513506329493
|
||||||
|
1.6996603590490054, 0.3888623413954235
|
||||||
|
1.7229500242600682, 0.38806090763041823
|
||||||
|
1.7462396894711305, 0.3528479115804899
|
||||||
|
1.7656477438136826, 0.35218005010965925
|
||||||
|
1.7889374090247454, 0.35137861634463263
|
||||||
|
1.8131974769529355, 0.35054378950608367
|
||||||
|
1.8316351285783603, 0.3499093211087967
|
||||||
|
1.8510431829209124, 0.34924145963795894
|
||||||
|
1.8685104318292094, 0.3486403843142014
|
||||||
|
1.8898592916060166, 0.3134941744113604
|
||||||
|
1.913148956817079, 0.312692740646348
|
||||||
|
1.950024260067928, 0.31142380385176693
|
||||||
|
1.977195536147501, 0.27607723550765684
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6b
|
||||||
|
1.3027210884353742, 0.3334523040892563
|
||||||
|
1.3027210884353742, 49.164263858422125
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6d - 2500
|
||||||
|
1.091431306845383, 0.577445652173914
|
||||||
|
2.4700813786500753, 1.3247282608695627
|
||||||
|
3.848731450454764, 2.0720108695652186
|
||||||
|
5.3997127812350385, 2.955163043478258
|
||||||
|
6.95069411201532, 3.7703804347826093
|
||||||
|
8.788894207754907, 4.789402173913047
|
||||||
|
10.971756821445666, 5.944293478260867
|
||||||
|
12.924844423168985, 7.03125
|
||||||
|
14.935375777884154, 8.118206521739125
|
||||||
|
17.290569650550502, 9.408967391304344
|
||||||
|
20.105313547151752, 10.9375
|
||||||
|
22.69028243178554, 12.398097826086953
|
||||||
|
25.102920057443754, 13.620923913043477
|
||||||
|
27.63044518908569, 15.08152173913043
|
||||||
|
30.617520344662523, 16.67798913043478
|
||||||
|
33.3748204882719, 18.172554347826086
|
||||||
|
35.84490186692197, 19.49728260869565
|
||||||
|
38.659645763523216, 21.0258152173913
|
||||||
|
41.18717089516515, 22.452445652173914
|
||||||
|
43.48492101483963, 23.743206521739125
|
||||||
|
46.127333652465296, 25.13586956521739
|
||||||
|
48.310196266156055, 26.324728260869563
|
||||||
|
50.37817137386308, 27.445652173913043
|
||||||
|
52.561033987553856, 28.702445652173914
|
||||||
|
54.51412158927717, 29.789402173913043
|
||||||
|
56.58209669698421, 30.978260869565215
|
||||||
|
58.42029679272379, 31.9633152173913
|
||||||
|
60.258496888463384, 33.05027173913044
|
||||||
|
62.15414073719482, 34.06929347826087
|
||||||
|
63.8774533269507, 35.05434782608695
|
||||||
|
65.5433221637147, 36.03940217391305
|
||||||
|
67.15174724748682, 37.02445652173913
|
||||||
|
69.10483484921015, 38.11141304347826
|
||||||
|
70.94303494494973, 39.19836956521739
|
||||||
|
72.32168501675443, 40.047554347826086
|
||||||
|
74.27477261847774, 41.202445652173914
|
||||||
|
76.11297271421732, 42.255434782608695
|
||||||
|
77.95117280995692, 43.34239130434783
|
||||||
|
79.55959789372905, 44.327445652173914
|
||||||
|
81.22546673049307, 45.346467391304344
|
||||||
|
83.1211105792245, 46.56929347826087
|
||||||
|
84.67209191000478, 47.452445652173914
|
||||||
|
86.16562948779321, 48.40353260869565
|
||||||
|
87.8314983245572, 49.49048913043478
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6d - 4000
|
||||||
|
0.7467687888942081, 0.5095108695652186
|
||||||
|
1.7807563427477255, 1.188858695652172
|
||||||
|
3.1594064145524143, 2.0040760869565233
|
||||||
|
4.8827190043082815, 2.955163043478258
|
||||||
|
6.376256582096698, 3.702445652173914
|
||||||
|
8.099569171852565, 4.721467391304351
|
||||||
|
9.593106749640981, 5.502717391304344
|
||||||
|
11.431306845380568, 6.555706521739133
|
||||||
|
13.039731929152708, 7.404891304347821
|
||||||
|
14.360938247965535, 8.118206521739125
|
||||||
|
15.797032072762086, 8.865489130434781
|
||||||
|
17.63523216850168, 9.884510869565212
|
||||||
|
18.898994734322642, 10.631793478260867
|
||||||
|
20.392532312111058, 11.345108695652172
|
||||||
|
21.886069889899474, 12.194293478260867
|
||||||
|
23.37960746768789, 12.975543478260867
|
||||||
|
24.873145045476306, 13.824728260869563
|
||||||
|
26.65390138822403, 14.70788043478261
|
||||||
|
28.20488271900431, 15.557065217391298
|
||||||
|
29.640976543800853, 16.37228260869565
|
||||||
|
31.134514121589277, 17.119565217391298
|
||||||
|
32.62805169937769, 18.002717391304344
|
||||||
|
34.29392053614169, 18.851902173913047
|
||||||
|
35.78745811393011, 19.63315217391304
|
||||||
|
37.28099569171853, 20.482336956521735
|
||||||
|
38.831977022498805, 21.33152173913043
|
||||||
|
40.44040210627094, 22.18070652173913
|
||||||
|
41.93393968405937, 23.09782608695652
|
||||||
|
43.48492101483963, 24.048913043478258
|
||||||
|
45.03590234561992, 24.864130434782606
|
||||||
|
46.471996170416475, 25.679347826086953
|
||||||
|
48.022977501196735, 26.4945652173913
|
||||||
|
49.516515078985165, 27.377717391304348
|
||||||
|
51.01005265677358, 28.226902173913043
|
||||||
|
52.618477740545714, 29.144021739130434
|
||||||
|
53.99712781235041, 29.99320652173913
|
||||||
|
55.605552896122546, 30.842391304347824
|
||||||
|
57.21397797989468, 31.725543478260867
|
||||||
|
58.59262805169938, 32.57472826086956
|
||||||
|
60.02872187649592, 33.42391304347826
|
||||||
|
61.57970320727621, 34.341032608695656
|
||||||
|
63.01579703207277, 35.224184782608695
|
||||||
|
64.6242221158449, 36.17527173913044
|
||||||
|
66.0028721876496, 36.99048913043478
|
||||||
|
67.55385351842988, 37.87364130434783
|
||||||
|
68.93250359023456, 38.82472826086956
|
||||||
|
70.31115366203926, 39.63994565217391
|
||||||
|
71.86213499281952, 40.59103260869565
|
||||||
|
73.29822881761608, 41.474184782608695
|
||||||
|
74.67687888942078, 42.42527173913044
|
||||||
|
76.11297271421732, 43.34239130434783
|
||||||
|
77.54906653901388, 44.25951086956522
|
||||||
|
78.92771661081856, 45.21059782608695
|
||||||
|
80.30636668262328, 46.09375
|
||||||
|
81.68501675442796, 47.01086956521739
|
||||||
|
83.06366682623265, 47.961956521739125
|
||||||
|
84.38487314504546, 48.91304347826087
|
||||||
|
85.59119195787459, 49.76222826086956
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Fig. 6d
|
||||||
|
1.2063188128291067, 0.6453804347826093
|
||||||
|
3.6189564384873165, 1.936141304347828
|
||||||
|
5.801819052178079, 3.0910326086956488
|
||||||
|
8.099569171852565, 4.449728260869563
|
||||||
|
10.741981809478219, 5.842391304347821
|
||||||
|
13.097175682144567, 7.1331521739130395
|
||||||
|
15.165150789851609, 8.254076086956516
|
||||||
|
17.46290090952609, 9.544836956521735
|
||||||
|
19.932982288176163, 10.835597826086953
|
||||||
|
22.805169937769264, 12.398097826086953
|
||||||
|
25.67735758736238, 13.960597826086953
|
||||||
|
28.319770224988034, 15.455163043478258
|
||||||
|
30.962182862613687, 16.813858695652172
|
||||||
|
33.489707994255625, 18.24048913043478
|
||||||
|
35.67257060794638, 19.39538043478261
|
||||||
|
37.97032072762087, 20.686141304347824
|
||||||
|
40.26807084729536, 21.976902173913043
|
||||||
|
42.967927237912875, 23.403532608695652
|
||||||
|
45.55289612254667, 24.728260869565215
|
||||||
|
47.7932024892293, 26.05298913043478
|
||||||
|
50.20584011488751, 27.377717391304348
|
||||||
|
52.7908089995213, 28.77038043478261
|
||||||
|
55.72044040210628, 30.4008152173913
|
||||||
|
59.052178075634274, 32.13315217391304
|
||||||
|
61.86692197223552, 33.661684782608695
|
||||||
|
64.73910962182862, 35.224184782608695
|
||||||
|
67.32407850646241, 36.71875
|
||||||
|
70.02393489707994, 38.17934782608695
|
||||||
|
72.43657252273816, 39.43614130434783
|
||||||
|
74.61943513642892, 40.692934782608695
|
||||||
|
77.14696026807086, 42.08559782608695
|
||||||
|
79.90426041168023, 43.58016304347826
|
||||||
|
82.77644806127334, 45.14266304347826
|
||||||
|
85.99329822881762, 46.908967391304344
|
||||||
|
88.75059837242699, 48.40353260869565
|
||||||
|
91.16323599808521, 49.69429347826087
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volVectorField;
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (0 0 0);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type atmBoundaryLayerInletVelocity;
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type noSlip;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
// (HW:p. 365):
|
||||||
|
// "In addition, as suggested by RH and often ignored by others, a"
|
||||||
|
// "constant shear stress of rho*(u^*)^2 was applied at the top boundary."
|
||||||
|
//
|
||||||
|
// u^* ~ Uref*kappa/ln((Zref+z0)/z0)
|
||||||
|
// (HW:Table 1):
|
||||||
|
// Uref = 10 m/s
|
||||||
|
// Zref = 6 m
|
||||||
|
// z0 = 0.01 m
|
||||||
|
// tau = rho*(u^*)^2 = 0.390796574
|
||||||
|
type fixedShearStress;
|
||||||
|
tau (0.390796574 0 0);
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform (0 0 0);
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object epsilon;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -3 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0.01;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type atmBoundaryLayerInletEpsilon;
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type epsilonWallFunction;
|
||||||
|
Cmu $Cmu;
|
||||||
|
kappa $kappa;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue $internalField;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
kappa 0.40; // (HW:p. 358)
|
||||||
|
Cmu 0.09; // (HW:p. 358)
|
||||||
|
flowDir (1 0 0); // (HW:Fig. 1)
|
||||||
|
zDir (0 0 1); // (HW:Fig. 1)
|
||||||
|
Uref 10.0; // (HW:Table 1)
|
||||||
|
Zref 6.0; // (HW:Table 1)
|
||||||
|
z0 uniform 0.01; // (HW:Table 1)
|
||||||
|
d uniform 0.0;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object k;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 1.3; // (HW:Eq. 6)
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type atmBoundaryLayerInletK;
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type kqRWallFunction;
|
||||||
|
value uniform 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue $internalField;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object nut;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type nutkAtmRoughWallFunction;
|
||||||
|
kappa $kappa;
|
||||||
|
Cmu $Cmu;
|
||||||
|
z0 $z0;
|
||||||
|
value uniform 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object omega;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0.0007;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type atmBoundaryLayerInletOmega;
|
||||||
|
#include "include/ABLConditions"
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type omegaWallFunction;
|
||||||
|
Cmu $Cmu;
|
||||||
|
kappa $kappa;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue $internalField;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object p;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
}
|
||||||
|
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type uniformFixedValue;
|
||||||
|
uniformValue constant 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cleanCase0
|
||||||
|
|
||||||
|
rm -rf plots
|
||||||
|
rm -f constant/turbulenceProperties
|
||||||
|
rm -rf system/atm-HargreavesWright-2007
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
restore0Dir
|
||||||
|
|
||||||
|
cp -rf $FOAM_TUTORIALS/resources/dataset/atm-HargreavesWright-2007 system/.
|
||||||
|
|
||||||
|
rasModel="kEpsilon" # Tested options="kOmegaSST","kEpsilon"
|
||||||
|
|
||||||
|
sed "s|RAS_MODEL|$rasModel|g" constant/turbulenceProperties.template > \
|
||||||
|
constant/turbulenceProperties
|
||||||
|
|
||||||
|
runApplication blockMesh
|
||||||
|
|
||||||
|
runApplication renumberMesh -overwrite
|
||||||
|
|
||||||
|
runApplication $(getApplication)
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
restore0Dir
|
||||||
|
|
||||||
|
rasModel="kEpsilon" # Tested options="kOmegaSST","kEpsilon"
|
||||||
|
|
||||||
|
sed "s|RAS_MODEL|$rasModel|g" constant/turbulenceProperties.template > \
|
||||||
|
constant/turbulenceProperties
|
||||||
|
|
||||||
|
runApplication blockMesh
|
||||||
|
|
||||||
|
runApplication decomposePar
|
||||||
|
|
||||||
|
runParallel renumberMesh -overwrite
|
||||||
|
|
||||||
|
runParallel $(getApplication)
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,117 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Overview
|
||||||
|
|
||||||
|
"By setting appropriate profiles for wind velocity and the turbulence
|
||||||
|
quantities at the inlet, it is often assumed that the boundary layer will
|
||||||
|
be maintained up to the buildings or obstructions in the flow." (HW:p. 355).
|
||||||
|
However, it was quantified by (HW:p. 355) that "even in the absence of
|
||||||
|
obstructions, ..., the velocity and turbulence profiles decay along the
|
||||||
|
fetch" (HW:p. 355). It was shown by (HW:p. 355) that a set of modifications
|
||||||
|
were required to maintain a neutral atmospheric boundary layer throughout
|
||||||
|
an empty and long computational domain of a RANS computation.
|
||||||
|
|
||||||
|
Aim:
|
||||||
|
|
||||||
|
Verification of the following boundary conditions in terms of the
|
||||||
|
maintenance of inlet quantities downstream within a RANS computation:
|
||||||
|
|
||||||
|
- atmBoundaryLayerInletVelocity
|
||||||
|
- atmBoundaryLayerInletK
|
||||||
|
- atmBoundaryLayerInletEpsilon
|
||||||
|
- atmBoundaryLayerInletOmega
|
||||||
|
|
||||||
|
Benchmark (Physical phenomenon):
|
||||||
|
|
||||||
|
The benchmark is an empty fetch computational domain, steady-state
|
||||||
|
RANS simulation involving the following traits:
|
||||||
|
|
||||||
|
- External flow
|
||||||
|
- The surface layer portion of the neutral-stratified equilibrium
|
||||||
|
atmospheric boundary layer (no Ekman layer)
|
||||||
|
- Dry air
|
||||||
|
- Homogeneous, smooth terrain
|
||||||
|
- Spatiotemporal-invariant aerodynamic roughness length
|
||||||
|
- No displacement height
|
||||||
|
- Newtonian, single-phase, incompressible, non-reacting
|
||||||
|
|
||||||
|
Benchmark scenario:
|
||||||
|
|
||||||
|
- Computational domain: (HW:Fig. 1)
|
||||||
|
- Benchmark dataset: (HW:Fig. 6) (Obtained by the WebPlotDigitizer-4.2
|
||||||
|
(Rohatgi, 2019))
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
Computational study (tag:HW):
|
||||||
|
Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
On the use of the k–ε model in commercial CFD software
|
||||||
|
to model the neutral atmospheric boundary layer.
|
||||||
|
Journal of wind engineering and
|
||||||
|
industrial aerodynamics, 95(5), 355-369.
|
||||||
|
DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
|
||||||
|
Wind profile (tag:RQP):
|
||||||
|
Richards, P. J., Quinn, A. D., & Parker, S. (2002).
|
||||||
|
A 6 m cube in an atmospheric boundary layer flow-Part 2.
|
||||||
|
Computational solutions. Wind and structures, 5(2_3_4), 177-192.
|
||||||
|
DOI:10.12989/was.2002.5.2_3_4.177
|
||||||
|
|
||||||
|
Physical modelling:
|
||||||
|
|
||||||
|
- The governing equations for:
|
||||||
|
- Steady-state, Newtonian, single-phase, incompressible fluid flows,
|
||||||
|
excluding any thermal chemical, electromagnetic and scalar
|
||||||
|
interactions
|
||||||
|
- Mathematical approach for the turbulence modelling:
|
||||||
|
- Reynolds-averaged Navier-Stokes simulation (RANS)
|
||||||
|
- Turbulence closure model:
|
||||||
|
- kEpsilon and kOmegaSST linear eddy viscosity closure models
|
||||||
|
- The sets of input (HW:Table 1):
|
||||||
|
- Reference height, Zref = 6 [m]
|
||||||
|
- Aerodynamic roughness height, z0 = 0.01 [m]
|
||||||
|
- Displacement height, d = 0 [m]
|
||||||
|
- Reference mean wind speed, Uref = 10 [m/s]
|
||||||
|
|
||||||
|
Computational domain modelling:
|
||||||
|
|
||||||
|
- Rectangular prism
|
||||||
|
- (x1, x2, x3)
|
||||||
|
= (5000, 100, 500) [m]
|
||||||
|
= (streamwise, spanwise, ground-normal) directions
|
||||||
|
|
||||||
|
Computational domain discretisation:
|
||||||
|
|
||||||
|
- Spatial resolution:
|
||||||
|
- (x1, x2, x3) = (500, 5, 50) [cells]
|
||||||
|
- Refer to the `system/blockMeshDict` for the grading details
|
||||||
|
- Temporal resolution: Steady state
|
||||||
|
|
||||||
|
Equation discretisation:
|
||||||
|
|
||||||
|
- Spatial derivatives and variables:
|
||||||
|
- Convection: Second order
|
||||||
|
- Others: Second order with various limiters
|
||||||
|
|
||||||
|
- Temporal derivatives and variables: First order
|
||||||
|
|
||||||
|
Numerical boundary/initial conditions:
|
||||||
|
|
||||||
|
- Refer to `0.orig`
|
||||||
|
|
||||||
|
Pressure-velocity coupling algorithm:
|
||||||
|
|
||||||
|
- SIMPLEC
|
||||||
|
|
||||||
|
Linear solvers:
|
||||||
|
|
||||||
|
- Refer to `system/fvSolution`
|
||||||
|
|
||||||
|
Initialisation and sampling:
|
||||||
|
|
||||||
|
- No initialisation/averaging
|
||||||
|
- Sampling at the end of the simulation via `system/sampleDict`
|
||||||
|
- Refer to `system/controlDict` for further details
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object transportProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
transportModel Newtonian;
|
||||||
|
|
||||||
|
nu 1.5e-05;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object turbulenceProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
simulationType RAS;
|
||||||
|
|
||||||
|
RAS
|
||||||
|
{
|
||||||
|
RASModel RAS_MODEL;
|
||||||
|
turbulence on;
|
||||||
|
printCoeffs on;
|
||||||
|
|
||||||
|
RAS_MODELCoeffs // Valid only for epsilon-based models
|
||||||
|
{
|
||||||
|
Cmu 0.09;
|
||||||
|
C1 1.44;
|
||||||
|
C2 1.92;
|
||||||
|
sigmaEps 1.11; //Original value:1.44
|
||||||
|
// See p. 358:
|
||||||
|
// Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
// On the use of the k–ε model in commercial CFD software
|
||||||
|
// to model the neutral atmospheric boundary layer.
|
||||||
|
// Journal of wind engineering and
|
||||||
|
// industrial aerodynamics, 95(5), 355-369.
|
||||||
|
// DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
339
tutorials/verificationAndValidation/atmosphericModels/HargreavesWright_2007/plot
Executable file
339
tutorials/verificationAndValidation/atmosphericModels/HargreavesWright_2007/plot
Executable file
@ -0,0 +1,339 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Postprocess according to the existence of "epsilon" or "omega"
|
||||||
|
baseEpsilonOrOmega="epsilon" # options: "epsilon", "omega".
|
||||||
|
|
||||||
|
# Note: Benchmark data is available for the standard k-epsilon model from:
|
||||||
|
# Hargreaves, D. M., & Wright, N. G. (2007).
|
||||||
|
# On the use of the k–ε model in commercial CFD software
|
||||||
|
# to model the neutral atmospheric boundary layer.
|
||||||
|
# Journal of wind engineering and
|
||||||
|
# industrial aerodynamics, 95(5), 355-369.
|
||||||
|
# DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
# Figure 6.
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
plotUxUpstream() {
|
||||||
|
timeDir=$1
|
||||||
|
zMin=$2
|
||||||
|
echo " Plotting the ground-normal flow speed profile (upstream)."
|
||||||
|
|
||||||
|
outName="plots/Ux_upstream.png"
|
||||||
|
gnuplot<<PLT_UX_UPSTREAM
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [4:18]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top left
|
||||||
|
set xlabel "Ux [m s^{-1}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp0="$timeDir/x_0mCell_U.xy"
|
||||||
|
inp1="$timeDir/x_0mPatch_U.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp0 u 2:((\$1-$zMin)/zRef) t "OF, x=0m (Patch)" w l lw 2 lc rgb "#009E73", \
|
||||||
|
inp1 u 2:((\$1-$zMin)/zRef) t "OF, x=0m (Cell)" w l lw 2 lc rgb "#F0E440"
|
||||||
|
PLT_UX_UPSTREAM
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotUxMid() {
|
||||||
|
timeDir=$1
|
||||||
|
zMin=$2
|
||||||
|
echo " Plotting the ground-normal flow speed profile (mid-range)."
|
||||||
|
|
||||||
|
outName="plots/Ux_mid.png"
|
||||||
|
gnuplot<<PLT_UX_MID
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [4:18]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top left
|
||||||
|
set xlabel "Ux [m s^{-1}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp2="$timeDir/x_2500m_U.xy"
|
||||||
|
inp3="$timeDir/x_4000m_U.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp2 u 2:((\$1-$zMin)/zRef) t "OF, x=2500m" w l lw 2 lc rgb "#0072B2", \
|
||||||
|
inp3 u 2:((\$1-$zMin)/zRef) t "OF, x=4000m" w l lw 2 lc rgb "#D55E00"
|
||||||
|
PLT_UX_MID
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotUxDownstream() {
|
||||||
|
timeDir=$1
|
||||||
|
zMin=$2
|
||||||
|
echo " Plotting the ground-normal flow speed profile (downstream)."
|
||||||
|
|
||||||
|
outName="plots/Ux_downstream.png"
|
||||||
|
gnuplot<<PLT_UX_DOWNSTREAM
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [4:18]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top left
|
||||||
|
set xlabel "Ux [m s^{-1}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp4="$timeDir/x_5000mCell_U.xy"
|
||||||
|
inp5="$timeDir/x_5000mPatch_U.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/Ux-HW-RH-Fig6a" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp4 u 2:((\$1-$zMin)/zRef) t "OF, x=5000m (Cell)" w l lw 2 lc rgb "#CC79A7", \
|
||||||
|
inp5 u 2:((\$1-$zMin)/zRef) t "OF, x=5000m (Patch)" w l lw 2 lc rgb "#440154"
|
||||||
|
PLT_UX_DOWNSTREAM
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotK() {
|
||||||
|
timeDir=$1
|
||||||
|
items=$2
|
||||||
|
seq=$3
|
||||||
|
zMin=$4
|
||||||
|
echo " Plotting the ground-normal turbulent kinetic energy profile."
|
||||||
|
|
||||||
|
outName="plots/k.png"
|
||||||
|
gnuplot<<PLT_K
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [1:2]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top right
|
||||||
|
set xlabel "k [m^2 s^{-2}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp0="$timeDir/x_0mCell_$items.xy"
|
||||||
|
inp1="$timeDir/x_0mPatch_$items.xy"
|
||||||
|
inp2="$timeDir/x_2500m_$items.xy"
|
||||||
|
inp3="$timeDir/x_4000m_$items.xy"
|
||||||
|
inp4="$timeDir/x_5000mCell_$items.xy"
|
||||||
|
inp5="$timeDir/x_5000mPatch_$items.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/k-RH-Fig6b" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/k-HW-Fig6b-2500" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/k-HW-Fig6b-4000" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp0 u $seq:((\$1-$zMin)/zRef) t "OF, x=0m (Patch)" w l lw 2 lc rgb "#009E73", \
|
||||||
|
inp1 u $seq:((\$1-$zMin)/zRef) t "OF, x=0m (Cell)" w l lw 2 lc rgb "#F0E440", \
|
||||||
|
inp2 u $seq:((\$1-$zMin)/zRef) t "OF, x=2500m" w l lw 2 lc rgb "#0072B2", \
|
||||||
|
inp3 u $seq:((\$1-$zMin)/zRef) t "OF, x=4000m" w l lw 2 lc rgb "#D55E00", \
|
||||||
|
inp4 u $seq:((\$1-$zMin)/zRef) t "OF, x=5000m (Cell)" w l lw 2 lc rgb "#CC79A7", \
|
||||||
|
inp5 u $seq:((\$1-$zMin)/zRef) t "OF, x=5000m (Patch)" w l lw 2 lc rgb "#440154"
|
||||||
|
PLT_K
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotEpsilon() {
|
||||||
|
timeDir=$1
|
||||||
|
items=$2
|
||||||
|
zMin=$3
|
||||||
|
echo " Plotting the ground-normal turbulent kinetic"\
|
||||||
|
"energy dissipation rate profile."
|
||||||
|
|
||||||
|
outName="plots/epsilon.png"
|
||||||
|
gnuplot<<PLT_EPSILON
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [0.001:10]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top right
|
||||||
|
set xlabel "epsilon [m^2 s^{-3}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set logscale x
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp0="$timeDir/x_0mCell_$items.xy"
|
||||||
|
inp1="$timeDir/x_0mPatch_$items.xy"
|
||||||
|
inp2="$timeDir/x_2500m_$items.xy"
|
||||||
|
inp3="$timeDir/x_4000m_$items.xy"
|
||||||
|
inp4="$timeDir/x_5000mCell_$items.xy"
|
||||||
|
inp5="$timeDir/x_5000mPatch_$items.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/epsilon-HW-RH-Fig6c" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/epsilon-HW-RH-Fig6c" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/epsilon-HW-RH-Fig6c" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp0 u 2:((\$1-$zMin)/zRef) t "OF, x=0m (Patch)" w l lw 2 lc rgb "#009E73", \
|
||||||
|
inp1 u 2:((\$1-$zMin)/zRef) t "OF, x=0m (Cell)" w l lw 2 lc rgb "#F0E440", \
|
||||||
|
inp2 u 2:((\$1-$zMin)/zRef) t "OF, x=2500m" w l lw 2 lc rgb "#0072B2", \
|
||||||
|
inp3 u 2:((\$1-$zMin)/zRef) t "OF, x=4000m" w l lw 2 lc rgb "#D55E00", \
|
||||||
|
inp4 u 2:((\$1-$zMin)/zRef) t "OF, x=5000m (Cell)" w l lw 2 lc rgb "#CC79A7", \
|
||||||
|
inp5 u 2:((\$1-$zMin)/zRef) t "OF, x=5000m (Patch)" w l lw 2 lc rgb "#440154"
|
||||||
|
PLT_EPSILON
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotOmega() {
|
||||||
|
timeDir=$1
|
||||||
|
items=$2
|
||||||
|
zMin=$3
|
||||||
|
echo " Plotting the ground-normal specific dissipation rate profile."
|
||||||
|
|
||||||
|
outName="plots/omega.png"
|
||||||
|
gnuplot<<PLT_OMEGA
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [0.001:10]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key top right
|
||||||
|
set xlabel "omega [s^{-1}]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set logscale x
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp0="$timeDir/x_0mCell_$items.xy"
|
||||||
|
inp1="$timeDir/x_0mPatch_$items.xy"
|
||||||
|
inp2="$timeDir/x_2500m_$items.xy"
|
||||||
|
inp3="$timeDir/x_4000m_$items.xy"
|
||||||
|
inp4="$timeDir/x_5000mCell_$items.xy"
|
||||||
|
inp5="$timeDir/x_5000mPatch_$items.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
inp0 u 4:((\$1-$zMin)/zRef) t "OF, x=0m (Patch)" w l lw 2 lc rgb "#009E73", \
|
||||||
|
inp1 u 4:((\$1-$zMin)/zRef) t "OF, x=0m (Cell)" w l lw 2 lc rgb "#F0E440", \
|
||||||
|
inp2 u 4:((\$1-$zMin)/zRef) t "OF, x=2500m" w l lw 2 lc rgb "#0072B2", \
|
||||||
|
inp3 u 4:((\$1-$zMin)/zRef) t "OF, x=4000m" w l lw 2 lc rgb "#D55E00", \
|
||||||
|
inp4 u 4:((\$1-$zMin)/zRef) t "OF, x=5000m (Cell)" w l lw 2 lc rgb "#CC79A7", \
|
||||||
|
inp5 u 4:((\$1-$zMin)/zRef) t "OF, x=5000m (Patch)" w l lw 2 lc rgb "#440154"
|
||||||
|
PLT_OMEGA
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
plotMut() {
|
||||||
|
timeDir=$1
|
||||||
|
items=$2
|
||||||
|
seq=$3
|
||||||
|
zMin=$4
|
||||||
|
echo " Plotting the ground-normal turbulent viscosity profile."
|
||||||
|
|
||||||
|
outName="plots/mut.png"
|
||||||
|
gnuplot<<PLT_MUT
|
||||||
|
set terminal pngcairo font "helvetica,20" size 1000, 800
|
||||||
|
set xrange [0:120]
|
||||||
|
set yrange [0:50]
|
||||||
|
set grid
|
||||||
|
set key bottom right
|
||||||
|
set xlabel "mu_t [Pa.s]"
|
||||||
|
set ylabel "Non-dimensionalised height, z/z_{ref}"
|
||||||
|
set offset .05, .05
|
||||||
|
set output "$outName"
|
||||||
|
|
||||||
|
zRef = 6
|
||||||
|
inp0="$timeDir/x_0mCell_$items.xy"
|
||||||
|
inp1="$timeDir/x_0mPatch_$items.xy"
|
||||||
|
inp2="$timeDir/x_2500m_$items.xy"
|
||||||
|
inp3="$timeDir/x_4000m_$items.xy"
|
||||||
|
inp4="$timeDir/x_5000mCell_$items.xy"
|
||||||
|
inp5="$timeDir/x_5000mPatch_$items.xy"
|
||||||
|
|
||||||
|
plot \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/mut-RH-Fig6d" \
|
||||||
|
u 1:2 t "RH" w p ps 2 pt 6 lc rgb "#000000", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/mut-HW-Fig6d-2500" \
|
||||||
|
u 1:2 t "HW, x=2500m" w p ps 1 pt 5 lc rgb "#E69F00", \
|
||||||
|
"system/benchmark-data-HargreavesWright2007/mut-HW-Fig6d-4000" \
|
||||||
|
u 1:2 t "HW, x=4000m" w p ps 0.5 pt 4 lc rgb "#56B4E9", \
|
||||||
|
inp0 u $seq:((\$1-$zMin)/zRef) t "OF, x=0m (Patch)" w l lw 2 lc rgb "#009E73", \
|
||||||
|
inp1 u $seq:((\$1-$zMin)/zRef) t "OF, x=0m (Cell)" w l lw 2 lc rgb "#F0E440", \
|
||||||
|
inp2 u $seq:((\$1-$zMin)/zRef) t "OF, x=2500m" w l lw 2 lc rgb "#0072B2", \
|
||||||
|
inp3 u $seq:((\$1-$zMin)/zRef) t "OF, x=4000m" w l lw 2 lc rgb "#D55E00", \
|
||||||
|
inp4 u $seq:((\$1-$zMin)/zRef) t "OF, x=5000m (Cell)" w l lw 2 lc rgb "#CC79A7", \
|
||||||
|
inp5 u $seq:((\$1-$zMin)/zRef) t "OF, x=5000m (Patch)" w l lw 2 lc rgb "#440154"
|
||||||
|
PLT_MUT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Require gnuplot
|
||||||
|
command -v gnuplot >/dev/null || {
|
||||||
|
echo "gnuplot not found - skipping graph creation" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# The latestTime in postProcessing/samples
|
||||||
|
timeDir=$(foamListTimes -case postProcessing/samples -latestTime 2>/dev/null)
|
||||||
|
[ -n "$timeDir" ] || {
|
||||||
|
echo "No postProcessing/samples found - skipping graph creation" 1>&2
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
timeDir="postProcessing/samples/$timeDir"
|
||||||
|
zMin=0
|
||||||
|
mkdir -p plots
|
||||||
|
|
||||||
|
|
||||||
|
# Postprocess flow speed
|
||||||
|
plotUxUpstream $timeDir $zMin
|
||||||
|
plotUxMid $timeDir $zMin
|
||||||
|
plotUxDownstream $timeDir $zMin
|
||||||
|
|
||||||
|
# Postprocess turbulence quantities
|
||||||
|
if [ $baseEpsilonOrOmega == "epsilon" ]
|
||||||
|
then
|
||||||
|
items="epsilon_k_nut"
|
||||||
|
|
||||||
|
plotEpsilon $timeDir $items $zMin
|
||||||
|
plotK $timeDir $items 3 $zMin
|
||||||
|
plotMut $timeDir $items 4 $zMin
|
||||||
|
|
||||||
|
elif [ $baseEpsilonOrOmega == "omega" ]
|
||||||
|
then
|
||||||
|
items="k_nut_omega"
|
||||||
|
|
||||||
|
plotK $timeDir $items 2 $zMin
|
||||||
|
plotMut $timeDir $items 3 $zMin
|
||||||
|
plotOmega $timeDir $items $zMin
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Chosen turbulence model is neither epsilon nor omega based." 1>&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,111 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object blockMeshDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
scale 1;
|
||||||
|
|
||||||
|
// x = streamwise
|
||||||
|
// y = spanwise
|
||||||
|
// z = wall-normal
|
||||||
|
|
||||||
|
nx 500;
|
||||||
|
ny 5;
|
||||||
|
nz 50;
|
||||||
|
xMin 0;
|
||||||
|
xMax 5000.0;
|
||||||
|
yMin 0;
|
||||||
|
yMax 100.0;
|
||||||
|
zMin 0.0;
|
||||||
|
zMax 500.0;
|
||||||
|
// blockMesh calculator input:
|
||||||
|
// width of start cell = 1.0 (HW:p. 359)
|
||||||
|
// number of cells = 50
|
||||||
|
// total length = 500
|
||||||
|
// blockMesh calculator output:
|
||||||
|
// cell-to-cell expansion ratio = 1.076030437 (consistent with 1.076 (HW:Fig.1))
|
||||||
|
zTotalExpansion 36.25795062;
|
||||||
|
|
||||||
|
vertices
|
||||||
|
(
|
||||||
|
($xMin $yMin $zMin)
|
||||||
|
($xMax $yMin $zMin)
|
||||||
|
($xMax $yMax $zMin)
|
||||||
|
($xMin $yMax $zMin)
|
||||||
|
($xMin $yMin $zMax)
|
||||||
|
($xMax $yMin $zMax)
|
||||||
|
($xMax $yMax $zMax)
|
||||||
|
($xMin $yMax $zMax)
|
||||||
|
);
|
||||||
|
|
||||||
|
blocks
|
||||||
|
(
|
||||||
|
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) simpleGrading (1 1 $zTotalExpansion)
|
||||||
|
);
|
||||||
|
|
||||||
|
edges
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
boundary
|
||||||
|
(
|
||||||
|
inlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(0 4 7 3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
ground
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(0 3 2 1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
top
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(4 5 6 7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
sides
|
||||||
|
{
|
||||||
|
type symmetry;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(1 5 4 0)
|
||||||
|
(3 7 6 2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
outlet
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(2 6 5 1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
mergePatchPairs
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application simpleFoam;
|
||||||
|
|
||||||
|
startFrom latestTime;
|
||||||
|
|
||||||
|
startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 5000;
|
||||||
|
|
||||||
|
deltaT 1;
|
||||||
|
|
||||||
|
writeControl timeStep;
|
||||||
|
|
||||||
|
writeInterval 500;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat ascii;
|
||||||
|
|
||||||
|
writePrecision 12;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
runTimeModifiable yes;
|
||||||
|
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
#include "sampleDict"
|
||||||
|
|
||||||
|
minMax
|
||||||
|
{
|
||||||
|
type fieldMinMax;
|
||||||
|
libs (fieldFunctionObjects);
|
||||||
|
writeControl writeTime;
|
||||||
|
fields (U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object decomposeParDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
numberOfSubdomains 8;
|
||||||
|
|
||||||
|
method hierarchical;
|
||||||
|
|
||||||
|
coeffs
|
||||||
|
{
|
||||||
|
n (8 1 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
default steadyState;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
div(phi,U) bounded Gauss linear;
|
||||||
|
div(phi,epsilon) bounded Gauss limitedLinear 1;
|
||||||
|
div(phi,omega) bounded Gauss limitedLinear 1;
|
||||||
|
div(phi,k) bounded Gauss limitedLinear 1;
|
||||||
|
div((nuEff*dev2(T(grad(U))))) Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear uncorrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
default linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
default uncorrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
wallDist
|
||||||
|
{
|
||||||
|
method meshWave;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
solvers
|
||||||
|
{
|
||||||
|
p
|
||||||
|
{
|
||||||
|
solver GAMG;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
tolerance 1e-8;
|
||||||
|
relTol 0.01;
|
||||||
|
}
|
||||||
|
|
||||||
|
"(U|k|epsilon|omega)"
|
||||||
|
{
|
||||||
|
solver smoothSolver;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
tolerance 1e-8;
|
||||||
|
relTol 0.01;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SIMPLE
|
||||||
|
{
|
||||||
|
nNonOrthogonalCorrectors 0;
|
||||||
|
consistent true;
|
||||||
|
pRefCell 0;
|
||||||
|
pRefValue 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
relaxationFactors
|
||||||
|
{
|
||||||
|
equations
|
||||||
|
{
|
||||||
|
U 0.9;
|
||||||
|
"(k|epsilon|omega)" 0.7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cache
|
||||||
|
{
|
||||||
|
grad(U);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,79 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v1912 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location system;
|
||||||
|
object sampleDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// The locations of the sample profiles correspond to:
|
||||||
|
// Hargreaves-Wright (2007), Fig.6
|
||||||
|
// DOI:10.1016/j.jweia.2006.08.002
|
||||||
|
|
||||||
|
samples
|
||||||
|
{
|
||||||
|
type sets;
|
||||||
|
libs (sampling);
|
||||||
|
setFormat raw;
|
||||||
|
interpolationScheme cell;
|
||||||
|
fields (U k epsilon nut omega);
|
||||||
|
writeControl writeTime;
|
||||||
|
|
||||||
|
sets
|
||||||
|
(
|
||||||
|
x_0mPatch // inlet patch face centres
|
||||||
|
{
|
||||||
|
type face;
|
||||||
|
axis z;
|
||||||
|
start (0 50 0);
|
||||||
|
end (0 50 500);
|
||||||
|
}
|
||||||
|
x_0mCell // inlet-first cell centres
|
||||||
|
{
|
||||||
|
type midPoint;
|
||||||
|
axis z;
|
||||||
|
start (5.0 50 0);
|
||||||
|
end (5.0 50 500);
|
||||||
|
}
|
||||||
|
x_2500m
|
||||||
|
{
|
||||||
|
type face;
|
||||||
|
axis z;
|
||||||
|
start (2500 50 0);
|
||||||
|
end (2500 50 500);
|
||||||
|
}
|
||||||
|
x_4000m
|
||||||
|
{
|
||||||
|
type face;
|
||||||
|
axis z;
|
||||||
|
start (4000 50 0);
|
||||||
|
end (4000 50 500);
|
||||||
|
}
|
||||||
|
x_5000mCell // outlet patch face centres
|
||||||
|
{
|
||||||
|
type face;
|
||||||
|
axis z;
|
||||||
|
start (4995 50 0);
|
||||||
|
end (4995 50 500);
|
||||||
|
}
|
||||||
|
x_5000mPatch // outlet-first cell centres
|
||||||
|
{
|
||||||
|
type face;
|
||||||
|
axis z;
|
||||||
|
start (5000 50 0);
|
||||||
|
end (5000 50 500);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// *********************************************************************** //
|
||||||
Reference in New Issue
Block a user