From 1115c18a8140c83894bcbf9d739dee0b7ac4feb5 Mon Sep 17 00:00:00 2001 From: william Date: Tue, 15 Apr 2014 16:38:06 +0100 Subject: [PATCH] BUG: Mantis #1259: created lagrangian turbulence library for new turbulent structure --- .../lagrangian/DPMFoam/MPPICFoam/Make/options | 1 + .../solvers/lagrangian/DPMFoam/Make/options | 1 + src/lagrangian/Allwmake | 1 + src/lagrangian/Turbulence/Make/files | 10 + src/lagrangian/Turbulence/Make/options | 45 ++++ ...keBasicKinematicCollidingParcelSubmodels.C | 37 ++++ .../makeBasicKinematicMPPICParcelSubmodels.C | 37 ++++ .../makeParcelTurbulenceDispersionModels.H | 53 +++++ .../DispersionRASModel/DispersionRASModel.C | 201 ++++++++++++++++++ .../DispersionRASModel/DispersionRASModel.H | 135 ++++++++++++ .../GradientDispersionRAS.C | 169 +++++++++++++++ .../GradientDispersionRAS.H | 126 +++++++++++ .../StochasticDispersionRAS.C | 127 +++++++++++ .../StochasticDispersionRAS.H | 110 ++++++++++ 14 files changed, 1053 insertions(+) create mode 100644 src/lagrangian/Turbulence/Make/files create mode 100644 src/lagrangian/Turbulence/Make/options create mode 100644 src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C create mode 100644 src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C create mode 100644 src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C create mode 100644 src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H diff --git a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options index 948df098..4a0c3a56 100644 --- a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options +++ b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options @@ -22,6 +22,7 @@ EXE_LIBS = \ -lmeshTools \ -llagrangian \ -llagrangianIntermediate \ + -llagrangianTurbulentSubModels \ -lthermophysicalFunctions \ -lspecie \ -lradiationModels \ diff --git a/applications/solvers/lagrangian/DPMFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/Make/options index e9524dfc..83684e57 100644 --- a/applications/solvers/lagrangian/DPMFoam/Make/options +++ b/applications/solvers/lagrangian/DPMFoam/Make/options @@ -21,6 +21,7 @@ EXE_LIBS = \ -lmeshTools \ -llagrangian \ -llagrangianIntermediate \ + -llagrangianTurbulentSubModels \ -lthermophysicalFunctions \ -lspecie \ -lradiationModels \ diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake index 5310b3c8..104d3723 100755 --- a/src/lagrangian/Allwmake +++ b/src/lagrangian/Allwmake @@ -8,6 +8,7 @@ wmake $makeType basic wmake $makeType solidParticle wmake $makeType intermediate wmake $makeType turbulence +wmake $makeType Turbulence wmake $makeType spray wmake $makeType dsmc wmake $makeType coalCombustion diff --git a/src/lagrangian/Turbulence/Make/files b/src/lagrangian/Turbulence/Make/files new file mode 100644 index 00000000..72a84068 --- /dev/null +++ b/src/lagrangian/Turbulence/Make/files @@ -0,0 +1,10 @@ +PARCELS=parcels +DERIVEDPARCELS=$(PARCELS)/derived + +KINEMATICCOLLIDINGPARCEL=$(DERIVEDPARCELS)/basicKinematicCollidingParcel +$(KINEMATICCOLLIDINGPARCEL)/makeBasicKinematicCollidingParcelSubmodels.C + +KINEMATICMPPICPARCEL=$(DERIVEDPARCELS)/basicKinematicMPPICParcel +$(KINEMATICMPPICPARCEL)/makeBasicKinematicMPPICParcelSubmodels.C + +LIB = $(FOAM_LIBBIN)/liblagrangianTurbulentSubModels diff --git a/src/lagrangian/Turbulence/Make/options b/src/lagrangian/Turbulence/Make/options new file mode 100644 index 00000000..504394bf --- /dev/null +++ b/src/lagrangian/Turbulence/Make/options @@ -0,0 +1,45 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ + -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ + -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude + +LIB_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -llagrangian \ + -llagrangianIntermediate \ + -ldistributionModels \ + -lspecie \ + -lfluidThermophysicalModels \ + -lliquidProperties \ + -lliquidMixtureProperties \ + -lsolidProperties \ + -lsolidMixtureProperties \ + -lreactionThermophysicalModels \ + -lSLGThermo \ + -lradiationModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ + -lincompressibleTransportModels \ + -lregionModels \ + -lsurfaceFilmModels \ + -ldynamicFvMesh \ + -lsampling diff --git a/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C b/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C new file mode 100644 index 00000000..c0d2f76c --- /dev/null +++ b/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "basicKinematicCollidingCloud.H" +#include "makeParcelTurbulenceDispersionModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeParcelTurbulenceDispersionModels(basicKinematicCollidingCloud); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C b/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C new file mode 100644 index 00000000..60ed0310 --- /dev/null +++ b/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "basicKinematicMPPICCloud.H" +#include "makeParcelTurbulenceDispersionModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeParcelTurbulenceDispersionModels(basicKinematicMPPICCloud); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H b/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H new file mode 100644 index 00000000..d2428ba4 --- /dev/null +++ b/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelTurbulenceDispersionModels_h +#define makeParcelTurbulenceDispersionModels_h + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "GradientDispersionRAS.H" +#include "StochasticDispersionRAS.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelTurbulenceDispersionModels(CloudType) \ + \ + typedef CloudType::kinematicCloudType kinematicCloudType; \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + DispersionRASModel, \ + 0 \ + ); \ + \ + makeDispersionModelType(GradientDispersionRAS, CloudType); \ + makeDispersionModelType(StochasticDispersionRAS, CloudType); \ + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C new file mode 100644 index 00000000..43b1b366 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C @@ -0,0 +1,201 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "DispersionRASModel.H" +#include "demandDrivenData.H" +#include "turbulenceModel.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template +Foam::tmp +Foam::DispersionRASModel::kModel() const +{ + const objectRegistry& obr = this->owner().mesh(); + const word turbName = + IOobject::groupName + ( + turbulenceModel::propertiesName, + this->owner().U().group() + ); + + if (obr.foundObject(turbName)) + { + const turbulenceModel& model = + obr.lookupObject(turbName); + return model.k(); + } + else + { + FatalErrorIn + ( + "Foam::tmp" + "Foam::DispersionRASModel::kModel() const" + ) + << "Turbulence model not found in mesh database" << nl + << "Database objects include: " << obr.sortedToc() + << abort(FatalError); + + return tmp(NULL); + } +} + + +template +Foam::tmp +Foam::DispersionRASModel::epsilonModel() const +{ + const objectRegistry& obr = this->owner().mesh(); + const word turbName = + IOobject::groupName + ( + turbulenceModel::propertiesName, + this->owner().U().group() + ); + + if (obr.foundObject(turbName)) + { + const turbulenceModel& model = + obr.lookupObject(turbName); + return model.epsilon(); + } + else + { + FatalErrorIn + ( + "Foam::tmp" + "Foam::DispersionRASModel::epsilonModel() const" + ) + << "Turbulence model not found in mesh database" << nl + << "Database objects include: " << obr.sortedToc() + << abort(FatalError); + + return tmp(NULL); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::DispersionRASModel::DispersionRASModel +( + const dictionary&, + CloudType& owner +) +: + DispersionModel(owner), + kPtr_(NULL), + ownK_(false), + epsilonPtr_(NULL), + ownEpsilon_(false) +{} + + +template +Foam::DispersionRASModel::DispersionRASModel +( + DispersionRASModel& dm +) +: + DispersionModel(dm), + kPtr_(dm.kPtr_), + ownK_(dm.ownK_), + epsilonPtr_(dm.epsilonPtr_), + ownEpsilon_(dm.ownEpsilon_) +{ + dm.ownK_ = false; + dm.ownEpsilon_ = false; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::DispersionRASModel::~DispersionRASModel() +{ + cacheFields(false); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::DispersionRASModel::cacheFields(const bool store) +{ + if (store) + { + tmp tk = this->kModel(); + if (tk.isTmp()) + { + kPtr_ = tk.ptr(); + ownK_ = true; + } + else + { + kPtr_ = tk.operator->(); + ownK_ = false; + } + + tmp tepsilon = this->epsilonModel(); + if (tepsilon.isTmp()) + { + epsilonPtr_ = tepsilon.ptr(); + ownEpsilon_ = true; + } + else + { + epsilonPtr_ = tepsilon.operator->(); + ownEpsilon_ = false; + } + } + else + { + if (ownK_ && kPtr_) + { + deleteDemandDrivenData(kPtr_); + ownK_ = false; + } + if (ownEpsilon_ && epsilonPtr_) + { + deleteDemandDrivenData(epsilonPtr_); + ownEpsilon_ = false; + } + } +} + + +template +void Foam::DispersionRASModel::write(Ostream& os) const +{ + DispersionModel::write(os); + + os.writeKeyword("ownK") << ownK_ << token::END_STATEMENT << endl; + os.writeKeyword("ownEpsilon") << ownEpsilon_ << token::END_STATEMENT + << endl; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H new file mode 100644 index 00000000..84967663 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +Class + Foam::DispersionRASModel + +Description + Base class for particle dispersion models based on RAS turbulence. + +\*---------------------------------------------------------------------------*/ + +#ifndef DispersionRASModel_H +#define DispersionRASModel_H + +#include "DispersionModel.H" + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class DispersionRASModel Declaration +\*---------------------------------------------------------------------------*/ + +template +class DispersionRASModel +: + public DispersionModel +{ +protected: + + // Protected data + + // Locally cached turbulence fields + + //- Turbulence k + const volScalarField* kPtr_; + + //- Take ownership of the k field + bool ownK_; + + //- Turbulence epsilon + const volScalarField* epsilonPtr_; + + //- Take ownership of the epsilon field + bool ownEpsilon_; + + + // Protected Functions + + //- Return the k field from the turbulence model + tmp kModel() const; + + //- Return the epsilon field from the turbulence model + tmp epsilonModel() const; + + +public: + + //- Runtime type information + TypeName("dispersionRASModel"); + + + // Constructors + + //- Construct from components + DispersionRASModel(const dictionary& dict, CloudType& owner); + + //- Construct copy + DispersionRASModel(DispersionRASModel& dm); + + //- Construct and return a clone + virtual autoPtr > clone() + { + return autoPtr > + ( + new DispersionRASModel(*this) + ); + } + + + //- Destructor + virtual ~DispersionRASModel(); + + + // Member Functions + + //- Cache carrier fields + virtual void cacheFields(const bool store); + + + // I-O + + //- Write + virtual void write(Ostream& os) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "DispersionRASModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C new file mode 100644 index 00000000..06fa810a --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "GradientDispersionRAS.H" +#include "demandDrivenData.H" +#include "fvcGrad.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::GradientDispersionRAS::GradientDispersionRAS +( + const dictionary& dict, + CloudType& owner +) +: + DispersionRASModel(dict, owner), + gradkPtr_(NULL), + ownGradK_(false) +{} + + +template +Foam::GradientDispersionRAS::GradientDispersionRAS +( + GradientDispersionRAS& dm +) +: + DispersionRASModel(dm), + gradkPtr_(dm.gradkPtr_), + ownGradK_(dm.ownGradK_) +{ + dm.ownGradK_ = false; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::GradientDispersionRAS::~GradientDispersionRAS() +{ + cacheFields(false); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::GradientDispersionRAS::cacheFields(const bool store) +{ + DispersionRASModel::cacheFields(store); + + if (store) + { + gradkPtr_ = fvc::grad(*this->kPtr_).ptr(); + ownGradK_ = true; + } + else + { + if (ownGradK_) + { + deleteDemandDrivenData(gradkPtr_); + gradkPtr_ = NULL; + ownGradK_ = false; + } + } +} + + +template +Foam::vector Foam::GradientDispersionRAS::update +( + const scalar dt, + const label cellI, + const vector& U, + const vector& Uc, + vector& UTurb, + scalar& tTurb +) +{ + cachedRandom& rnd = this->owner().rndGen(); + + const scalar cps = 0.16432; + + const scalar k = this->kPtr_->internalField()[cellI]; + const scalar epsilon = + this->epsilonPtr_->internalField()[cellI] + ROOTVSMALL; + const vector& gradk = this->gradkPtr_->internalField()[cellI]; + + const scalar UrelMag = mag(U - Uc - UTurb); + + const scalar tTurbLoc = + min(k/epsilon, cps*pow(k, 1.5)/epsilon/(UrelMag + SMALL)); + + + // Parcel is perturbed by the turbulence + if (dt < tTurbLoc) + { + tTurb += dt; + + if (tTurb > tTurbLoc) + { + tTurb = 0.0; + + scalar sigma = sqrt(2.0*k/3.0); + vector dir = -gradk/(mag(gradk) + SMALL); + + // Numerical Recipes... Ch. 7. Random Numbers... + scalar x1 = 0.0; + scalar x2 = 0.0; + scalar rsq = 10.0; + while ((rsq > 1.0) || (rsq == 0.0)) + { + x1 = 2.0*rnd.sample01() - 1.0; + x2 = 2.0*rnd.sample01() - 1.0; + rsq = x1*x1 + x2*x2; + } + + scalar fac = sqrt(-2.0*log(rsq)/rsq); + + // In 2D calculations the -grad(k) is always + // away from the axis of symmetry + // This creates a 'hole' in the spray and to + // prevent this we let x1 be both negative/positive + if (this->owner().mesh().nSolutionD() == 2) + { + fac *= x1; + } + else + { + fac *= mag(x1); + } + + UTurb = sigma*fac*dir; + } + } + else + { + tTurb = GREAT; + UTurb = vector::zero; + } + + return Uc + UTurb; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H new file mode 100644 index 00000000..b9ccfac5 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H @@ -0,0 +1,126 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +Class + Foam::GradientDispersionRAS + +Description + The velocity is perturbed in the direction of -grad(k), with a + Gaussian random number distribution with variance sigma. + where sigma is defined below + +\*---------------------------------------------------------------------------*/ + +#ifndef GradientDispersionRAS_H +#define GradientDispersionRAS_H + +#include "DispersionRASModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class GradientDispersionRAS Declaration +\*---------------------------------------------------------------------------*/ + +template +class GradientDispersionRAS +: + public DispersionRASModel +{ +protected: + + // Protected data + + // Locally cached turbulence fields + + //- Gradient of k + const volVectorField* gradkPtr_; + + //- Take ownership of the grad(k) + bool ownGradK_; + + +public: + + //- Runtime type information + TypeName("gradientDispersionRAS"); + + + // Constructors + + //- Construct from components + GradientDispersionRAS(const dictionary& dict, CloudType& owner); + + //- Construct copy + GradientDispersionRAS(GradientDispersionRAS& dm); + + //- Construct and return a clone + virtual autoPtr > clone() + { + return autoPtr > + ( + new GradientDispersionRAS(*this) + ); + } + + + //- Destructor + virtual ~GradientDispersionRAS(); + + + // Member Functions + + //- Cache carrier fields + virtual void cacheFields(const bool store); + + //- Update (disperse particles) + virtual vector update + ( + const scalar dt, + const label cellI, + const vector& U, + const vector& Uc, + vector& UTurb, + scalar& tTurb + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "GradientDispersionRAS.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C new file mode 100644 index 00000000..badebbc1 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "StochasticDispersionRAS.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::StochasticDispersionRAS::StochasticDispersionRAS +( + const dictionary& dict, + CloudType& owner +) +: + DispersionRASModel(dict, owner) +{} + + +template +Foam::StochasticDispersionRAS::StochasticDispersionRAS +( + StochasticDispersionRAS& dm +) +: + DispersionRASModel(dm) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::StochasticDispersionRAS::~StochasticDispersionRAS() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +Foam::vector Foam::StochasticDispersionRAS::update +( + const scalar dt, + const label cellI, + const vector& U, + const vector& Uc, + vector& UTurb, + scalar& tTurb +) +{ + cachedRandom& rnd = this->owner().rndGen(); + + const scalar cps = 0.16432; + + const scalar k = this->kPtr_->internalField()[cellI]; + const scalar epsilon = + this->epsilonPtr_->internalField()[cellI] + ROOTVSMALL; + + const scalar UrelMag = mag(U - Uc - UTurb); + + const scalar tTurbLoc = + min(k/epsilon, cps*pow(k, 1.5)/epsilon/(UrelMag + SMALL)); + + + // Parcel is perturbed by the turbulence + if (dt < tTurbLoc) + { + tTurb += dt; + + if (tTurb > tTurbLoc) + { + tTurb = 0.0; + + scalar sigma = sqrt(2.0*k/3.0); + vector dir = 2.0*rnd.sample01() - vector::one; + dir /= mag(dir) + SMALL; + + // Numerical Recipes... Ch. 7. Random Numbers... + scalar x1 = 0.0; + scalar x2 = 0.0; + scalar rsq = 10.0; + while ((rsq > 1.0) || (rsq == 0.0)) + { + x1 = 2.0*rnd.sample01() - 1.0; + x2 = 2.0*rnd.sample01() - 1.0; + rsq = x1*x1 + x2*x2; + } + + scalar fac = sqrt(-2.0*log(rsq)/rsq); + + fac *= mag(x1); + + UTurb = sigma*fac*dir; + + } + } + else + { + tTurb = GREAT; + UTurb = vector::zero; + } + + return Uc + UTurb; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H new file mode 100644 index 00000000..d1c87d04 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H @@ -0,0 +1,110 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ 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, see . + +Class + Foam::StochasticDispersionRAS + +Description + The velocity is perturbed in random direction, with a + Gaussian random number distribution with variance sigma. + where sigma is defined below + +\*---------------------------------------------------------------------------*/ + +#ifndef StochasticDispersionRAS_H +#define StochasticDispersionRAS_H + +#include "DispersionRASModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class StochasticDispersionRAS Declaration +\*---------------------------------------------------------------------------*/ + +template +class StochasticDispersionRAS +: + public DispersionRASModel +{ +public: + + //- Runtime type information + TypeName("stochasticDispersionRAS"); + + + // Constructors + + //- Construct from components + StochasticDispersionRAS(const dictionary& dict, CloudType& owner); + + //- Construct copy + StochasticDispersionRAS(StochasticDispersionRAS& dm); + + //- Construct and return a clone + virtual autoPtr > clone() + { + return autoPtr > + ( + new StochasticDispersionRAS(*this) + ); + } + + + //- Destructor + virtual ~StochasticDispersionRAS(); + + + // Member Functions + + //- Update (disperse particles) + virtual vector update + ( + const scalar dt, + const label cellI, + const vector& U, + const vector& Uc, + vector& UTurb, + scalar& tTurb + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "StochasticDispersionRAS.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //