diff --git a/src/turbulenceModels/incompressible/RAS/Make/files b/src/turbulenceModels/incompressible/RAS/Make/files index f6107822dfbc1cee80f472537f5ef4448d187c6d..9b95469a648584e4b3311e46e01119a2abc09a49 100644 --- a/src/turbulenceModels/incompressible/RAS/Make/files +++ b/src/turbulenceModels/incompressible/RAS/Make/files @@ -44,6 +44,8 @@ derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFv derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C +derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.C +derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.C backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.C new file mode 100644 index 0000000000000000000000000000000000000000..a69a36f140c85afe0aa2fa26a988aa954e9aab86 --- /dev/null +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.C @@ -0,0 +1,147 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ABLInletEpsilonFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +ABLInletEpsilonFvPatchScalarField::ABLInletEpsilonFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF +) +: + fixedValueFvPatchScalarField(p, iF), + Ustar_(0), + z_(pTraits<vector>::zero), + z0_(0), + kappa_(0.41) +{} + + +ABLInletEpsilonFvPatchScalarField::ABLInletEpsilonFvPatchScalarField +( + const ABLInletEpsilonFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchScalarField(ptf, p, iF, mapper), + Ustar_(ptf.Ustar_), + z_(ptf.z_), + z0_(ptf.z0_), + kappa_(ptf.kappa_) +{} + + +ABLInletEpsilonFvPatchScalarField::ABLInletEpsilonFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const dictionary& dict +) +: + fixedValueFvPatchScalarField(p, iF), + Ustar_(readScalar(dict.lookup("Ustar"))), + z_(dict.lookup("z")), + z0_(readScalar(dict.lookup("z0"))), + kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)) +{ + if (mag(z_) < SMALL) + { + FatalErrorIn("ABLInletEpsilonFvPatchScalarField(dict)") + << "z is not correct" + << abort(FatalError); + } + + z_ /= mag(z_); + + evaluate(); +} + + +ABLInletEpsilonFvPatchScalarField::ABLInletEpsilonFvPatchScalarField +( + const ABLInletEpsilonFvPatchScalarField& fcvpvf, + const DimensionedField<scalar, volMesh>& iF +) +: + fixedValueFvPatchScalarField(fcvpvf, iF), + Ustar_(fcvpvf.Ustar_), + z_(fcvpvf.z_), + z0_(fcvpvf.z0_), + kappa_(fcvpvf.kappa_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void ABLInletEpsilonFvPatchScalarField::updateCoeffs() +{ + const vectorField& c = patch().Cf(); + scalarField coord = (c & z_); + scalarField::operator=(pow(Ustar_, 3.0)/(kappa_*(coord + z0_))); +} + + +// Write +void ABLInletEpsilonFvPatchScalarField::write(Ostream& os) const +{ + fvPatchScalarField::write(os); + os.writeKeyword("Ustar") + << Ustar_ << token::END_STATEMENT << nl; + os.writeKeyword("z") + << z_ << token::END_STATEMENT << nl; + os.writeKeyword("z0") + << z0_ << token::END_STATEMENT << nl; + os.writeKeyword("kappa") + << kappa_ << token::END_STATEMENT << nl; + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePatchTypeField(fvPatchScalarField, ABLInletEpsilonFvPatchScalarField); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.H new file mode 100644 index 0000000000000000000000000000000000000000..39560879aa929566299c32045848f7660db21514 --- /dev/null +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletEpsilon/ABLInletEpsilonFvPatchScalarField.H @@ -0,0 +1,184 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + ABLInletEpsilonFvPatchScalarField + +Description + Boundary condition specifies a epsilon inlet for the atmospheric boundary + layer (ABL). This boundaty is to be used in conjunction with + ABLInletVelocity. + + @verbatim + epsilon = Ustar^3 / (K(z + z0)) + + where: + + Ustar is the frictional velocity + K is karman's constant + z is the verical coordinate + z0 is the surface roughness lenght + + @endverbatim + + Reference: + D.M. Hargreaves and N.G. Wright + "On the use of the k-epsilon model in commercial CFD software to model the + neutral atmospheric boundary layer" + Journal of Wind Engineering and Industrial Aerodynamics 95(2007) 355-369. + +SourceFiles + ABLInletEpsilonFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ABLInletEpsilonFvPatchScalarField_H +#define ABLInletEpsilonFvPatchScalarField_H + +#include "fvPatchFields.H" +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ + +/*---------------------------------------------------------------------------*\ + Class ABLInletEpsilonFvPatchScalarField Declaration +\*---------------------------------------------------------------------------*/ + +class ABLInletEpsilonFvPatchScalarField +: + public fixedValueFvPatchScalarField +{ + // Private data + + //- Peak velocity magnitude + scalar Ustar_; + + //- Direction of the z-coordinate + vector z_; + + //- Surface roughness lenght + scalar z0_; + + //- Von Karman constant + scalar kappa_; + +public: + + //- Runtime type information + TypeName("ABLInletEpsilon"); + + + // Constructors + + //- Construct from patch and internal field + ABLInletEpsilonFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + ABLInletEpsilonFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given ABLInletEpsilonFvPatchScalarField + // onto a new patch + ABLInletEpsilonFvPatchScalarField + ( + const ABLInletEpsilonFvPatchScalarField&, + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct and return a clone + virtual tmp<fvPatchScalarField> clone() const + { + return tmp<fvPatchScalarField> + ( + new ABLInletEpsilonFvPatchScalarField(*this) + ); + } + + //- Construct as copy setting internal field reference + ABLInletEpsilonFvPatchScalarField + ( + const ABLInletEpsilonFvPatchScalarField&, + 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 ABLInletEpsilonFvPatchScalarField(*this, iF) + ); + } + + + // Member functions + + //- Return max value + scalar& Ustar() + { + return Ustar_; + } + + //- Return z direction + vector& z() + { + return z_; + } + + //- Update coefficients + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..d8e7ae4639bcfa5f896692aa373805a85d480fac --- /dev/null +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.C @@ -0,0 +1,154 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ABLInletVelocityFvPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +ABLInletVelocityFvPatchVectorField::ABLInletVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchVectorField(p, iF), + Ustar_(0), + n_(pTraits<vector>::zero), + z_(pTraits<vector>::zero), + z0_(0), + kappa_(0.41) +{} + + +ABLInletVelocityFvPatchVectorField::ABLInletVelocityFvPatchVectorField +( + const ABLInletVelocityFvPatchVectorField& ptf, + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchVectorField(ptf, p, iF, mapper), + Ustar_(ptf.Ustar_), + n_(ptf.n_), + z_(ptf.z_), + z0_(ptf.z0_), + kappa_(ptf.kappa_) +{} + + +ABLInletVelocityFvPatchVectorField::ABLInletVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const dictionary& dict +) +: + fixedValueFvPatchVectorField(p, iF), + Ustar_(readScalar(dict.lookup("Ustar"))), + n_(dict.lookup("n")), + z_(dict.lookup("z")), + z0_(readScalar(dict.lookup("z0"))), + kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)) +{ + if (mag(n_) < SMALL || mag(z_) < SMALL) + { + FatalErrorIn("ABLInletVelocityFvPatchVectorField(dict)") + << "n or z given with zero size not correct" + << abort(FatalError); + } + + n_ /= mag(n_); + z_ /= mag(z_); + + evaluate(); +} + + +ABLInletVelocityFvPatchVectorField::ABLInletVelocityFvPatchVectorField +( + const ABLInletVelocityFvPatchVectorField& fcvpvf, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchVectorField(fcvpvf, iF), + Ustar_(fcvpvf.Ustar_), + n_(fcvpvf.n_), + z_(fcvpvf.z_), + z0_(fcvpvf.z0_), + kappa_(fcvpvf.kappa_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void ABLInletVelocityFvPatchVectorField::updateCoeffs() +{ + const vectorField& c = patch().Cf(); + scalarField coord = (c & z_); + vectorField::operator=(n_*(Ustar_/kappa_)*log((coord + z0_)/z0_)); +} + + +// Write +void ABLInletVelocityFvPatchVectorField::write(Ostream& os) const +{ + fvPatchVectorField::write(os); + os.writeKeyword("Ustar") + << Ustar_ << token::END_STATEMENT << nl; + os.writeKeyword("z0") + << z0_ << token::END_STATEMENT << nl; + os.writeKeyword("n") + << n_ << token::END_STATEMENT << nl; + os.writeKeyword("z") + << z_ << token::END_STATEMENT << nl; + os.writeKeyword("kappa") + << kappa_ << token::END_STATEMENT << nl; + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePatchTypeField(fvPatchVectorField, ABLInletVelocityFvPatchVectorField); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..0e7a9167cdb4395f7346339e59666bf0f1a01243 --- /dev/null +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/ABLInletVelocity/ABLInletVelocityFvPatchVectorField.H @@ -0,0 +1,207 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + ABLInletVelocityFvPatchVectorField + +Description + Boundary condition specifies a atmospheric boundary layer (ABL) + velocity inlet profile given the friction velocity value, + flow direction n and direction of the parabolic coordinate z. + + @verbatim + U = (Ustar/K) ln((z + z0)/z0) + + where: + + Ustar is the frictional velocity + K is karman's constant + z0 is the surface roughness lenght + z is the verical coordinate + + and: + + Ustar = K Uref/ln((Zref + z0)/z0) + + where: + + Uref is the reference velocity at Zref + Zref is the reference height. + + @endverbatim + + Reference: + D.M. Hargreaves and N.G. Wright + "On the use of the k-epsilon model in commercial CFD software to model the + neutral atmospheric boundary layer" + Journal of Wind Engineering and Industrial Aerodynamics 95(2007) 355-369. + +NOTE: D.M. Hargreaves and N.G. Wright recommend Gamma epsilon in the k-epsilon + model should be changed from 1.3 to 1.11 for consistency. + The roughness height (Er) is given by Er = 20 z0 following the same + reference + +SourceFiles + ABLInletVelocityFvPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ABLInletVelocityFvPatchVectorField_H +#define ABLInletVelocityFvPatchVectorField_H + +#include "fvPatchFields.H" +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ + +/*---------------------------------------------------------------------------*\ + Class ABLInletVelocityFvPatchVectorField Declaration +\*---------------------------------------------------------------------------*/ + +class ABLInletVelocityFvPatchVectorField +: + public fixedValueFvPatchVectorField +{ + // Private data + + //- Friction velocity + scalar Ustar_; + + //- Flow direction + vector n_; + + //- Direction of the z-coordinate + vector z_; + + //- Surface roughness lenght + scalar z0_; + + //- Von Karman constant + scalar kappa_; + +public: + + //- Runtime type information + TypeName("ABLInletVelocity"); + + + // Constructors + + //- Construct from patch and internal field + ABLInletVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + ABLInletVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given ABLInletVelocityFvPatchVectorField + // onto a new patch + ABLInletVelocityFvPatchVectorField + ( + const ABLInletVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct and return a clone + virtual tmp<fvPatchVectorField> clone() const + { + return tmp<fvPatchVectorField> + ( + new ABLInletVelocityFvPatchVectorField(*this) + ); + } + + //- Construct as copy setting internal field reference + ABLInletVelocityFvPatchVectorField + ( + const ABLInletVelocityFvPatchVectorField&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchVectorField> clone + ( + const DimensionedField<vector, volMesh>& iF + ) const + { + return tmp<fvPatchVectorField> + ( + new ABLInletVelocityFvPatchVectorField(*this, iF) + ); + } + + + // Member functions + + //- Return max value + scalar& Ustar() + { + return Ustar_; + } + + //- Return flow direction + vector& n() + { + return n_; + } + + //- Return y direction + vector& z() + { + return z_; + } + + //- Update coefficients + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //