diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 1a7ba970846633df957532fa649a91b5eebd2043..e2dd07acf1ea8106931ed523afe68fece1e24bce 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -173,9 +173,32 @@ void Foam::KinematicCloud<ParcelType>::resetSourceTerms() } +template<class ParcelType> +void Foam::KinematicCloud<ParcelType>::preEvolve() +{ + this->dispersion().cacheFields(true); +} + + +template<class ParcelType> +void Foam::KinematicCloud<ParcelType>::postEvolve() +{ + if (debug) + { + this->writePositions(); + } + + this->dispersion().cacheFields(false); + + this->postProcessing().post(); +} + + template<class ParcelType> void Foam::KinematicCloud<ParcelType>::evolve() { + preEvolve(); + autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New ( @@ -209,11 +232,6 @@ void Foam::KinematicCloud<ParcelType>::evolve() this->injection().inject(td); - if (debug) - { - this->writePositions(); - } - if (coupled_) { resetSourceTerms(); @@ -221,7 +239,7 @@ void Foam::KinematicCloud<ParcelType>::evolve() Cloud<ParcelType>::move(td); - this->postProcessing().post(); + postEvolve(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 538975a912e705f1f4f3f029e23c71d213cc8e1f..077067a97221fa51a0257501ea994d8195f878d9 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -184,6 +184,15 @@ protected: DimensionedField<vector, volMesh> UTrans_; + // Cloud evolution functions + + //- Pre-evolve + void preEvolve(); + + //- Post-evolve + void postEvolve(); + + public: // Constructors diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index d4f4f10c9abe7823f6c99a8fc6605fa8e17ed07b..1e58d2876cc52a74661e11277a2b933524e1d475 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -175,9 +175,25 @@ void Foam::ReactingCloud<ParcelType>::resetSourceTerms() } +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::preEvolve() +{ + ThermoCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::postEvolve() +{ + ThermoCloud<ParcelType>::postEvolve(); +} + + template<class ParcelType> void Foam::ReactingCloud<ParcelType>::evolve() { + preEvolve(); + const volScalarField& T = this->carrierThermo().T(); const volScalarField cp = this->carrierThermo().Cp(); const volScalarField& p = this->carrierThermo().p(); @@ -233,11 +249,6 @@ void Foam::ReactingCloud<ParcelType>::evolve() this->injection().inject(td); - if (debug) - { - this->writePositions(); - } - if (this->coupled()) { resetSourceTerms(); @@ -245,7 +256,7 @@ void Foam::ReactingCloud<ParcelType>::evolve() Cloud<ParcelType>::move(td); - this->postProcessing().post(); + postEvolve(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H index 4a79c03b6f42ca3ec614c5f782bffcff2bd26c44..74b75ea4162ed61c921b4a3eaf329ed0349fe3f3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H @@ -132,6 +132,15 @@ protected: ); + // Cloud evolution functions + + //- Pre-evolve + void preEvolve(); + + //- Post-evolve + void postEvolve(); + + public: // Constructors diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C index d07db7ed622a5b6efb51f27c2436da58b6f9e478..5e7dee64bcf6f593cde895c9e3f5d34220c269c7 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C @@ -129,9 +129,25 @@ void Foam::ReactingMultiphaseCloud<ParcelType>::resetSourceTerms() } +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::preEvolve() +{ + ReactingCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::postEvolve() +{ + ReactingCloud<ParcelType>::postEvolve(); +} + + template<class ParcelType> void Foam::ReactingMultiphaseCloud<ParcelType>::evolve() { + preEvolve(); + const volScalarField& T = this->carrierThermo().T(); const volScalarField cp = this->carrierThermo().Cp(); const volScalarField& p = this->carrierThermo().p(); @@ -187,11 +203,6 @@ void Foam::ReactingMultiphaseCloud<ParcelType>::evolve() this->injection().inject(td); - if (debug) - { - this->writePositions(); - } - if (this->coupled()) { resetSourceTerms(); @@ -199,7 +210,7 @@ void Foam::ReactingMultiphaseCloud<ParcelType>::evolve() Cloud<ParcelType>::move(td); - this->postProcessing().post(); + postEvolve(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H index 525b03983cabf044fbd7ec87ceb5d43d4e151005..b073308407451d7655177fa454a2e770a5c19565 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H @@ -68,7 +68,7 @@ class ReactingMultiphaseCloud public ReactingCloud<ParcelType>, public reactingMultiphaseCloud { - // Private Member Functions + // Private member functions //- Disallow default bitwise copy construct ReactingMultiphaseCloud(const ReactingMultiphaseCloud&); @@ -112,6 +112,17 @@ protected: scalar dMassSurfaceReaction_; + // Protected member functions + + // Cloud evolution functions + + //- Pre-evolve + void preEvolve(); + + //- Post-evolve + void postEvolve(); + + public: // Constructors diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 19428d38a1936f8ad0fa6d764657ec422f4db4ea..0585629246ec074406f04a9d4a11c6ce077deb8c 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -142,9 +142,25 @@ void Foam::ThermoCloud<ParcelType>::resetSourceTerms() } +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::preEvolve() +{ + KinematicCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::postEvolve() +{ + KinematicCloud<ParcelType>::postEvolve(); +} + + template<class ParcelType> void Foam::ThermoCloud<ParcelType>::evolve() { + preEvolve(); + const volScalarField& T = carrierThermo_.T(); const volScalarField cp = carrierThermo_.Cp(); @@ -192,11 +208,6 @@ void Foam::ThermoCloud<ParcelType>::evolve() this->injection().inject(td); - if (debug) - { - this->writePositions(); - } - if (this->coupled()) { resetSourceTerms(); @@ -204,7 +215,7 @@ void Foam::ThermoCloud<ParcelType>::evolve() Cloud<ParcelType>::move(td); - this->postProcessing().post(); + postEvolve(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H index cc8f0fadc8e1d313cf5e1b74fef6eb5ab97ad490..151b0764117334be96ac1df2b4eb8376d0724349 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H @@ -118,6 +118,17 @@ protected: DimensionedField<scalar, volMesh> hcTrans_; + // Protected member functions + + // Cloud evolution functions + + //- Pre-evolve + void preEvolve(); + + //- Post-evolve + void postEvolve(); + + public: // Constructors diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H index 74131b6fff2592735c594ac5d6fdd2cd83245fca..8587eacccadd6df46244adbdda9403627d604417 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H @@ -121,6 +121,9 @@ public: //- Flag to indicate whether model activates injection model virtual bool active() const = 0; + //- Cache carrier fields + virtual void cacheFields(const bool store) = 0; + //- Update (disperse particles) virtual vector update ( diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C index 6c028d0205602a984a591810be5a2b14d8886e8a..3689acf8f4783b985f7e77f8ef37adf591d3f99d 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C @@ -42,7 +42,11 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel ( "RASProperties" ) - ) + ), + kPtr_(NULL), + ownK_(false), + epsilonPtr_(NULL), + ownEpsilon_(false) {} @@ -50,7 +54,56 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel template<class CloudType> Foam::DispersionRASModel<CloudType>::~DispersionRASModel() -{} +{ + cacheFields(false); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +void Foam::DispersionRASModel<CloudType>::cacheFields(const bool store) +{ + if (store) + { + tmp<volScalarField> tk = this->turbulence().k(); + if (tk.isTmp()) + { + kPtr_ = tk.ptr(); + ownK_ = true; + } + else + { + kPtr_ = tk.operator->(); + ownK_ = false; + } + + tmp<volScalarField> tepsilon = this->turbulence().epsilon(); + if (tepsilon.isTmp()) + { + epsilonPtr_ = tepsilon.ptr(); + ownEpsilon_ = true; + } + else + { + epsilonPtr_ = tepsilon.operator->(); + ownEpsilon_ = false; + } + } + else + { + if (ownK_ && kPtr_) + { + delete kPtr_; + ownK_ = false; + } + if (ownEpsilon_ && epsilonPtr_) + { + delete epsilonPtr_; + ownEpsilon_ = false; + } + } +} // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H index ecda55be49f4a0135752b3e0eb741192ff12ea62..f95ab368854df24e0dca1a23b12a99d66f23d1d4 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H @@ -50,11 +50,27 @@ class DispersionRASModel : public DispersionModel<CloudType> { - // Private data +protected: + + // Protected data //- Reference to the compressible turbulence model const compressible::RASModel& turbulence_; + // 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_; + public: @@ -78,6 +94,9 @@ public: // Member Functions + //- Cache carrier fields + virtual void cacheFields(const bool store); + //- Return const access to the turbulence model const compressible::RASModel& turbulence() const { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C index 8a0fdd898e37f6a826a3d8a220cb4c608ea1f927..7877af745e61c6f51b427b1e9ae39963773414f3 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C @@ -35,7 +35,8 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS CloudType& owner ) : - DispersionRASModel<CloudType>(dict, owner) + DispersionRASModel<CloudType>(dict, owner), + gradkPtr_(NULL) {} @@ -43,7 +44,9 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS template<class CloudType> Foam::GradientDispersionRAS<CloudType>::~GradientDispersionRAS() -{} +{ + cacheFields(false); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -55,6 +58,25 @@ bool Foam::GradientDispersionRAS<CloudType>::active() const } +template<class CloudType> +void Foam::GradientDispersionRAS<CloudType>::cacheFields(const bool store) +{ + DispersionRASModel<CloudType>::cacheFields(store); + + if (store) + { + gradkPtr_ = fvc::grad(*this->kPtr_).ptr(); + } + else + { + if (gradkPtr_) + { + delete gradkPtr_; + } + } +} + + template<class CloudType> Foam::vector Foam::GradientDispersionRAS<CloudType>::update ( @@ -68,12 +90,9 @@ Foam::vector Foam::GradientDispersionRAS<CloudType>::update { const scalar cps = 0.16432; - const tmp<volScalarField> tk = this->turbulence().k(); - const volScalarField& k = tk(); - const tmp<volScalarField> tepsilon = this->turbulence().epsilon(); - const volScalarField& epsilon = tepsilon(); - - const volVectorField gradk = fvc::grad(k); + const volScalarField& k = *this->kPtr_; + const volScalarField& epsilon = *this->epsilonPtr_; + const volVectorField& gradk = *this->gradkPtr_; const scalar UrelMag = mag(U - Uc - UTurb); diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H index 9cf99ecc20256ad2005899279b59b4aad12ec719..18391f4eead858e2aa42ba7e55a22f4d634b803a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H @@ -51,6 +51,14 @@ class GradientDispersionRAS : public DispersionRASModel<CloudType> { +protected: + + // Locally cached turbulence fields + + //- Gradient of k + const volVectorField* gradkPtr_; + + public: //- Runtime type information @@ -76,8 +84,11 @@ public: //- Flag to indicate whether model activates injection model bool active() const; + //- Cache carrier fields + virtual void cacheFields(const bool store); + //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C index 56745ef686818ab433e3b3e11c0df6320ea4c0bd..a1927dfcd48e1e9e14fafeaf163c290a9cb34031 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C @@ -55,6 +55,13 @@ bool Foam::NoDispersion<CloudType>::active() const } +template<class CloudType> +void Foam::NoDispersion<CloudType>::cacheFields(const bool) +{ +// do nothing +} + + template<class CloudType> Foam::vector Foam::NoDispersion<CloudType>::update ( diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H index 48e938cc03e767e2e1ad4966457074f849f5ca60..93482c49ae9a164ff617f13d2ed27ae04c50536a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H @@ -72,10 +72,13 @@ public: // Member Functions //- Flag to indicate whether model activates injection model - bool active() const; + virtual bool active() const; + + //- Cache carrier fields + virtual void cacheFields(const bool store); //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C index d1999cba4de57d4e8fdb7820e269d509e2f3bec8..ffd3fd974a0fb98b3fe17b20ef5ed70810d1f343 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C @@ -68,10 +68,8 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update { const scalar cps = 0.16432; - const tmp<volScalarField> tk = this->turbulence().k(); - const volScalarField& k = tk(); - const tmp<volScalarField> tepsilon = this->turbulence().epsilon(); - const volScalarField& epsilon = tepsilon(); + const volScalarField& k = *this->kPtr_; + const volScalarField& epsilon = *this->epsilonPtr_; const scalar UrelMag = mag(U - Uc - UTurb); diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H index 46059d4e83c5af162c1f11acf8b8b5ad297636b3..17c70b7814c9b3da80c891b091b82f2c25e31d5a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H @@ -74,10 +74,10 @@ public: // Member Functions //- Flag to indicate whether model activates injection model - bool active() const; + virtual bool active() const; //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli,