30 const Foam::scalar Foam::atmBoundaryLayer::kappaDefault_ = 0.41;
32 const Foam::scalar Foam::atmBoundaryLayer::CmuDefault_ = 0.09;
37 void Foam::atmBoundaryLayer::init()
39 if (
mag(flowDir_) < small ||
mag(zDir_) < small)
42 <<
"magnitude of n or z must be greater than zero"
47 flowDir_ /=
mag(flowDir_);
50 Ustar_ = kappa_*Uref_/(
log((Zref_ + z0_)/z0_));
86 const scalar epsilonLower
101 epsilonLower_(epsilonLower)
113 flowDir_(
dict.lookup(
"flowDir")),
114 zDir_(
dict.lookup(
"zDir")),
115 kappa_(
dict.lookupOrDefault<scalar>(
"kappa", kappaDefault_)),
116 Cmu_(
dict.lookupOrDefault<scalar>(
"Cmu", CmuDefault_)),
117 Uref_(
dict.lookup<scalar>(
"Uref")),
118 Zref_(
dict.lookup<scalar>(
"Zref")),
119 z0_(
"z0",
dict,
p.size()),
120 zGround_(
"zGround",
dict,
p.size()),
123 Ulower_(
dict.lookupOrDefault<scalar>(
"Ulower", 0)),
124 kLower_(
dict.lookupOrDefault<scalar>(
"kLower", 0)),
125 epsilonLower_(
dict.lookupOrDefault<scalar>(
"epsilonLower", 0))
137 flowDir_(abl.flowDir_),
143 z0_(mapper(abl.z0_)),
144 zGround_(mapper(abl.zGround_)),
145 Ustar_(mapper(abl.Ustar_)),
146 offset_(abl.offset_),
147 Ulower_(abl.Ulower_),
148 kLower_(abl.kLower_),
149 epsilonLower_(abl.epsilonLower_)
155 flowDir_(abl.flowDir_),
162 zGround_(abl.zGround_),
164 offset_(abl.offset_),
165 Ulower_(abl.Ulower_),
166 kLower_(abl.kLower_),
167 epsilonLower_(abl.epsilonLower_)
179 mapper(z0_, blptf.z0_);
180 mapper(zGround_, blptf.zGround_);
181 mapper(Ustar_, blptf.Ustar_);
187 z0_.reset(blptf.z0_);
188 zGround_.reset(blptf.zGround_);
189 Ustar_.reset(blptf.Ustar_);
201 *
log(
max((zDir_ &
p) - zGround_ + z0_, z0_)/z0_)
206 return flowDir_*Un + flowDir_*Ulower_;
242 pow3(Ustar_)/(kappa_*((zDir_ &
p) - zGround_ + z0_))
248 tepsilon.
ref() =
pos0(z)*tepsilon() +
neg(z)*epsilonLower_;
269 writeEntry(os,
"epsilonLower", epsilonLower_);
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
This class provides functions to evaluate the velocity and turbulence distributions appropriate for a...
void reset(const atmBoundaryLayer &)
Reset the atmBoundaryLayer to the given atmBoundaryLayer.
void write(Ostream &) const
Write.
tmp< vectorField > U(const vectorField &p) const
Return the velocity distribution for the ATM.
atmBoundaryLayer()
Construct null.
tmp< scalarField > k(const vectorField &p) const
Return the turbulent kinetic energy distribution for the ATM.
void map(const atmBoundaryLayer &, const fvPatchFieldMapper &)
Map the given atmBoundaryLayer onto this atmBoundaryLayer.
tmp< scalarField > epsilon(const vectorField &p) const
Return the turbulent dissipation rate distribution for the ATM.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Foam::fvPatchFieldMapper.
A class for managing temporary objects.
T & ref() const
Return non-const reference or generate a fatal error.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const dimensionedScalar kappa
Coulomb constant: default SI units: [N.m2/C2].
dimensionedScalar pos0(const dimensionedScalar &ds)
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar pow3(const dimensionedScalar &ds)
errorManip< error > abort(error &err)
dimensionedScalar log(const dimensionedScalar &ds)
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
dimensionedScalar sqrt(const dimensionedScalar &ds)
dimensioned< scalar > mag(const dimensioned< Type > &)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
dimensionedScalar neg(const dimensionedScalar &ds)