diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 63bb2eb7c2..b7d6d49e4a 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -104,7 +104,7 @@ void Foam::KinematicCloud::solve { cloud.storeState(); - cloud.preEvolve(); + cloud.preEvolve(td); evolveCloud(cloud, td); @@ -115,7 +115,7 @@ void Foam::KinematicCloud::solve } else { - cloud.preEvolve(); + cloud.preEvolve(td); evolveCloud(cloud, td); @@ -127,7 +127,7 @@ void Foam::KinematicCloud::solve cloud.info(); - cloud.postEvolve(); + cloud.postEvolve(td); if (solution_.steadyState()) { @@ -230,7 +230,10 @@ void Foam::KinematicCloud::evolveCloud template -void Foam::KinematicCloud::postEvolve() +void Foam::KinematicCloud::postEvolve +( + const typename parcelType::trackingData& td +) { Info<< endl; @@ -243,7 +246,7 @@ void Foam::KinematicCloud::postEvolve() forces_.cacheFields(false); - functions_.postEvolve(); + functions_.postEvolve(td); solution_.nextIter(); @@ -306,8 +309,8 @@ Foam::KinematicCloud::KinematicCloud IOobject ( cloudName + "Properties", - rho.mesh().time().constant(), - rho.mesh(), + mesh_.time().constant(), + mesh_, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) @@ -506,8 +509,8 @@ Foam::KinematicCloud::KinematicCloud IOobject ( name + "Properties", - mesh.time().constant(), - mesh, + mesh_.time().constant(), + mesh_, IOobject::NO_READ, IOobject::NO_WRITE, false @@ -657,7 +660,10 @@ void Foam::KinematicCloud::scaleSources() template -void Foam::KinematicCloud::preEvolve() +void Foam::KinematicCloud::preEvolve +( + const typename parcelType::trackingData& td +) { // force calculation of mesh dimensions - needed for parallel runs // with topology change due to lazy evaluation of valid mesh dimensions @@ -672,7 +678,7 @@ void Foam::KinematicCloud::preEvolve() pAmbient_ = constProps_.dict().template getOrDefault("pAmbient", pAmbient_); - functions_.preEvolve(); + functions_.preEvolve(td); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 2d71032dbb..4534c2a36a 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -273,7 +273,7 @@ protected: ); //- Post-evolve - void postEvolve(); + void postEvolve(const typename parcelType::trackingData& td); //- Reset state of cloud void cloudReset(KinematicCloud& c); @@ -590,7 +590,7 @@ public: void scaleSources(); //- Pre-evolve - void preEvolve(); + void preEvolve(const typename parcelType::trackingData& td); //- Evolve the cloud void evolve(); diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index a889876ed1..35a0e140b3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -446,9 +447,12 @@ void Foam::ThermoCloud::scaleSources() template -void Foam::ThermoCloud::preEvolve() +void Foam::ThermoCloud::preEvolve +( + const typename parcelType::trackingData& td +) { - CloudType::preEvolve(); + CloudType::preEvolve(td); this->pAmbient() = thermo_.thermo().p().average().value(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H index 158e80594e..47dfcb3949 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -358,7 +359,7 @@ public: void scaleSources(); //- Pre-evolve - void preEvolve(); + void preEvolve(const typename parcelType::trackingData& td); //- Evolve the cloud void evolve(); diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H index 6a4a61b647..3ece75e178 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -339,6 +339,18 @@ public: //- Return const access to mass fractions of mixture [] inline const scalarField& Y() const; + //- Return const access to mass fractions of gases + // Note: for compatibilty only - returns Y() + inline const scalarField& YGas() const; + + //- Return const access to mass fractions of liquids + // Note: for compatibilty only - returns Y() + inline const scalarField& YLiquid() const; + + //- Return const access to mass fractions of solids + // Note: for compatibilty only - returns Y() + inline const scalarField& YSolid() const; + // Edit diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H index 45a0ef0900..b8beb3ed16 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -170,6 +171,29 @@ inline const Foam::scalarField& Foam::ReactingParcel::Y() const } +template +inline const Foam::scalarField& Foam::ReactingParcel::YGas() const +{ + return Y_; +} + + +template +inline const Foam::scalarField& +Foam::ReactingParcel::YLiquid() const +{ + return Y_; +} + + +template +inline const Foam::scalarField& +Foam::ReactingParcel::YSolid() const +{ + return Y_; +} + + template inline Foam::scalar& Foam::ReactingParcel::mass0() { diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C index 9b5db0fc48..dc329d3927 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2015 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +28,7 @@ License #include "basicReactingMultiphaseCloud.H" -#include "makeParcelCloudFunctionObjects.H" +#include "makeReactingParcelCloudFunctionObjects.H" // Reacting variant // Kinematic #include "makeThermoParcelForces.H" // thermo variant diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C index b0d8029d75..09f7f95d28 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2015 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +28,7 @@ License #include "basicReactingCloud.H" -#include "makeParcelCloudFunctionObjects.H" +#include "makeReactingParcelCloudFunctionObjects.H" // Reacting variant // Kinematic #include "makeThermoParcelForces.H" // thermo variant diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H new file mode 100644 index 0000000000..ca86c65d63 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H @@ -0,0 +1,65 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2011-2018 OpenFOAM Foundation + 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 . + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelCloudFunctionObjects_H +#define makeReactingParcelCloudFunctionObjects_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "FacePostProcessing.H" +#include "ParticleCollector.H" +#include "ParticleErosion.H" +#include "ParticleTracks.H" +#include "ParticleTrap.H" +#include "PatchCollisionDensity.H" +#include "PatchPostProcessing.H" +#include "VoidFraction.H" +#include "WeberNumberReacting.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelCloudFunctionObjects(CloudType) \ + \ + makeCloudFunctionObject(CloudType); \ + \ + makeCloudFunctionObjectType(FacePostProcessing, CloudType); \ + makeCloudFunctionObjectType(ParticleCollector, CloudType); \ + makeCloudFunctionObjectType(ParticleErosion, CloudType); \ + makeCloudFunctionObjectType(ParticleTracks, CloudType); \ + makeCloudFunctionObjectType(ParticleTrap, CloudType); \ + makeCloudFunctionObjectType(PatchCollisionDensity, CloudType); \ + makeCloudFunctionObjectType(PatchPostProcessing, CloudType); \ + makeCloudFunctionObjectType(VoidFraction, CloudType); \ + makeCloudFunctionObjectType(WeberNumberReacting, CloudType); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C index ed89fc43e4..57bca3973f 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2019 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -84,22 +85,21 @@ Foam::CloudFunctionObject::CloudFunctionObject {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::CloudFunctionObject::~CloudFunctionObject() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::CloudFunctionObject::preEvolve() +void Foam::CloudFunctionObject::preEvolve +( + const typename parcelType::trackingData& td +) {} template -void Foam::CloudFunctionObject::postEvolve() +void Foam::CloudFunctionObject::postEvolve +( + const typename parcelType::trackingData& td +) { if (this->owner().time().writeTime()) { @@ -111,7 +111,7 @@ void Foam::CloudFunctionObject::postEvolve() template void Foam::CloudFunctionObject::postMove ( - typename CloudType::parcelType&, + parcelType&, const scalar, const point&, bool& @@ -122,7 +122,7 @@ void Foam::CloudFunctionObject::postMove template void Foam::CloudFunctionObject::postPatch ( - const typename CloudType::parcelType&, + const parcelType&, const polyPatch&, bool& ) @@ -132,7 +132,7 @@ void Foam::CloudFunctionObject::postPatch template void Foam::CloudFunctionObject::postFace ( - const typename CloudType::parcelType&, + const parcelType&, bool& ) {} diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H index 746f03947c..0949a2ffe1 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -63,6 +64,11 @@ class CloudFunctionObject : public CloudSubModelBase { +private: + + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + // Private data //- Output path @@ -126,7 +132,7 @@ public: //- Destructor - virtual ~CloudFunctionObject(); + virtual ~CloudFunctionObject() = default; //- Selector @@ -144,15 +150,18 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve(const typename parcelType::trackingData& td); //- Post-evolve hook - virtual void postEvolve(); + virtual void postEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-move hook virtual void postMove ( - typename CloudType::parcelType& p, + parcelType& p, const scalar dt, const point& position0, bool& keepParticle @@ -161,7 +170,7 @@ public: //- Post-patch hook virtual void postPatch ( - const typename CloudType::parcelType& p, + const parcelType& p, const polyPatch& pp, bool& keepParticle ); @@ -169,7 +178,7 @@ public: //- Post-face hook virtual void postFace ( - const typename CloudType::parcelType& p, + const parcelType& p, bool& keepParticle ); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C index de2822ed1c..17130ec921 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -103,31 +104,30 @@ Foam::CloudFunctionObjectList::CloudFunctionObjectList {} -// * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // - -template -Foam::CloudFunctionObjectList::~CloudFunctionObjectList() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::CloudFunctionObjectList::preEvolve() +void Foam::CloudFunctionObjectList::preEvolve +( + const typename parcelType::trackingData& td +) { forAll(*this, i) { - this->operator[](i).preEvolve(); + this->operator[](i).preEvolve(td); } } template -void Foam::CloudFunctionObjectList::postEvolve() +void Foam::CloudFunctionObjectList::postEvolve +( + const typename parcelType::trackingData& td +) { forAll(*this, i) { - this->operator[](i).postEvolve(); + this->operator[](i).postEvolve(td); } } @@ -135,7 +135,7 @@ void Foam::CloudFunctionObjectList::postEvolve() template void Foam::CloudFunctionObjectList::postMove ( - typename CloudType::parcelType& p, + parcelType& p, const scalar dt, const point& position0, bool& keepParticle @@ -156,7 +156,7 @@ void Foam::CloudFunctionObjectList::postMove template void Foam::CloudFunctionObjectList::postPatch ( - const typename CloudType::parcelType& p, + const parcelType& p, const polyPatch& pp, bool& keepParticle ) @@ -176,7 +176,7 @@ void Foam::CloudFunctionObjectList::postPatch template void Foam::CloudFunctionObjectList::postFace ( - const typename CloudType::parcelType& p, + const parcelType& p, bool& keepParticle ) { diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H index 4354bf451c..41e0a28df4 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -55,6 +56,12 @@ class CloudFunctionObjectList : public PtrList> { +private: + + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + + protected: // Protected Data @@ -86,7 +93,7 @@ public: //- Destructor - virtual ~CloudFunctionObjectList(); + virtual ~CloudFunctionObjectList() = default; // Member Functions @@ -106,15 +113,21 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-evolve hook - virtual void postEvolve(); + virtual void postEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-move hook virtual void postMove ( - typename CloudType::parcelType& p, + parcelType& p, const scalar dt, const point& position0, bool& keepParticle @@ -123,7 +136,7 @@ public: //- Post-patch hook virtual void postPatch ( - const typename CloudType::parcelType& p, + const parcelType& p, const polyPatch& pp, bool& keepParticle ); @@ -131,7 +144,7 @@ public: //- Post-face hook virtual void postFace ( - const typename CloudType::parcelType& p, + const parcelType& p, bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C index ba9b0ffc9b..a5e187ca06 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C @@ -347,13 +347,6 @@ Foam::FacePostProcessing::FacePostProcessing {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::FacePostProcessing::~FacePostProcessing() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H index 5c8c81f3bd..087b116d40 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H @@ -149,19 +149,14 @@ public: //- Destructor - virtual ~FacePostProcessing(); + virtual ~FacePostProcessing() = default; // Member Functions - // Access - //- Should data be reset on write? inline bool resetOnWrite() const; - - // Evaluation - //- Post-face hook virtual void postFace(const parcelType& p, bool& keepParticle); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C index 94b5b2a506..3764a682ac 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C @@ -636,13 +636,6 @@ Foam::ParticleCollector::ParticleCollector {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::ParticleCollector::~ParticleCollector() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H index afd837efa2..b4bdd2ce3e 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H @@ -273,19 +273,14 @@ public: //- Destructor - virtual ~ParticleCollector(); + virtual ~ParticleCollector() = default; // Member Functions - // Access - //- Should data be reset on write? inline bool resetOnWrite() const; - - // Evaluation - //- Post-move hook virtual void postMove ( diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C index 289fc93fde..a0aaae3202 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C @@ -30,6 +30,37 @@ License // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // +template +void Foam::ParticleErosion::resetQ() +{ + if (QPtr_.valid()) + { + QPtr_->primitiveFieldRef() = 0.0; + } + else + { + const fvMesh& mesh = this->owner().mesh(); + + QPtr_.reset + ( + new volScalarField + ( + IOobject + ( + this->owner().name() + "Q", + mesh.time().timeName(), + mesh, + IOobject::READ_IF_PRESENT, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar(dimVolume, Zero) + ) + ); + } +} + + template Foam::label Foam::ParticleErosion::applyToPatch ( @@ -103,8 +134,8 @@ Foam::ParticleErosion::ParticleErosion patchIDs_ = uniqIds.sortedToc(); - // trigger creation of the Q field - preEvolve(); + // Trigger creation of the Q field + resetQ(); } @@ -126,33 +157,12 @@ Foam::ParticleErosion::ParticleErosion // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticleErosion::preEvolve() +void Foam::ParticleErosion::preEvolve +( + const typename parcelType::trackingData& td +) { - if (QPtr_.valid()) - { - QPtr_->primitiveFieldRef() = 0.0; - } - else - { - const fvMesh& mesh = this->owner().mesh(); - - QPtr_.reset - ( - new volScalarField - ( - IOobject - ( - this->owner().name() + "Q", - mesh.time().timeName(), - mesh, - IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE - ), - mesh, - dimensionedScalar(dimVolume, Zero) - ) - ); - } + resetQ(); } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H index a9b54bf79b..2a818fa7d9 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -85,6 +86,9 @@ protected: // Protected Member Functions + //- Create|read|reset the Q field + void resetQ(); + //- Returns local patchi if patch is in patchIds_ list label applyToPatch(const label globalPatchi) const; @@ -130,7 +134,10 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-patch hook virtual void postPatch diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C index 2730359b5e..52f75c099a 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -86,17 +86,13 @@ Foam::ParticleTracks::ParticleTracks {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::ParticleTracks::~ParticleTracks() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticleTracks::preEvolve() +void Foam::ParticleTracks::preEvolve +( + const typename parcelType::trackingData& td +) { if (!cloudPtr_.valid()) { diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H index 05b156554d..3bd704aeb0 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -118,7 +118,7 @@ public: //- Destructor - virtual ~ParticleTracks(); + virtual ~ParticleTracks() = default; // Member Functions @@ -144,7 +144,10 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-face hook virtual void postFace(const parcelType& p, bool& keepParticle); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C index e0c5c2e462..6e4f0b4d2f 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C @@ -64,17 +64,13 @@ Foam::ParticleTrap::ParticleTrap {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::ParticleTrap::~ParticleTrap() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticleTrap::preEvolve() +void Foam::ParticleTrap::preEvolve +( + const typename parcelType::trackingData& td +) { if (alphaPtr_ == nullptr) { @@ -97,7 +93,10 @@ void Foam::ParticleTrap::preEvolve() template -void Foam::ParticleTrap::postEvolve() +void Foam::ParticleTrap::postEvolve +( + const typename parcelType::trackingData& td +) { gradAlphaPtr_.clear(); } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H index 3a02c963e2..500dd9d595 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -119,7 +120,7 @@ public: //- Destructor - virtual ~ParticleTrap(); + virtual ~ParticleTrap() = default; // Member Functions @@ -127,15 +128,21 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-evolve hook - virtual void postEvolve(); + virtual void postEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-move hook virtual void postMove ( - typename CloudType::parcelType& p, + parcelType& p, const scalar dt, const point& position0, bool& keepParticle diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C index 9b7665d7c1..e61404fb01 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C @@ -136,13 +136,6 @@ Foam::PatchCollisionDensity::PatchCollisionDensity {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::PatchCollisionDensity::~PatchCollisionDensity() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H index 5e97b8811f..f9ae499115 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H @@ -120,20 +120,18 @@ public: //- Destructor - virtual ~PatchCollisionDensity(); + virtual ~PatchCollisionDensity() = default; // Member Functions - // Evaluation - - //- Post-patch hook - virtual void postPatch - ( - const parcelType& p, - const polyPatch& pp, - bool& keepParticle - ); + //- Post-patch hook + virtual void postPatch + ( + const parcelType& p, + const polyPatch& pp, + bool& keepParticle + ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C index c5a8c56d3d..67028c47e6 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -70,17 +71,13 @@ Foam::VoidFraction::VoidFraction {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::VoidFraction::~VoidFraction() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::VoidFraction::preEvolve() +void Foam::VoidFraction::preEvolve +( + const typename parcelType::trackingData& td +) { if (thetaPtr_.valid()) { @@ -111,7 +108,10 @@ void Foam::VoidFraction::preEvolve() template -void Foam::VoidFraction::postEvolve() +void Foam::VoidFraction::postEvolve +( + const typename parcelType::trackingData& td +) { volScalarField& theta = thetaPtr_(); @@ -119,7 +119,7 @@ void Foam::VoidFraction::postEvolve() theta.primitiveFieldRef() /= mesh.time().deltaTValue()*mesh.V(); - CloudFunctionObject::postEvolve(); + CloudFunctionObject::postEvolve(td); } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H index 79590532e9..b876106683 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -107,7 +108,7 @@ public: //- Destructor - virtual ~VoidFraction(); + virtual ~VoidFraction() = default; // Member Functions @@ -115,10 +116,16 @@ public: // Evaluation //- Pre-evolve hook - virtual void preEvolve(); + virtual void preEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-evolve hook - virtual void postEvolve(); + virtual void postEvolve + ( + const typename parcelType::trackingData& td + ); //- Post-move hook virtual void postMove diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.C new file mode 100644 index 0000000000..f5a72900e8 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.C @@ -0,0 +1,124 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "WeberNumberReacting.H" +#include "SLGThermo.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::WeberNumberReacting::WeberNumberReacting +( + const dictionary& dict, + CloudType& owner, + const word& modelName +) +: + CloudFunctionObject(dict, owner, modelName, typeName) +{} + + +template +Foam::WeberNumberReacting::WeberNumberReacting +( + const WeberNumberReacting& we +) +: + CloudFunctionObject(we) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::WeberNumberReacting::postEvolve +( + const typename parcelType::trackingData& td +) +{ + const auto& c = this->owner(); + + if (!c.template foundObject>("We")) + { + IOField* WePtr = + new IOField + ( + IOobject + ( + "We", + c.time().timeName(), + c, + IOobject::NO_READ + ) + ); + + WePtr->store(); + } + + auto& We = c.template lookupObjectRef>("We"); + We.setSize(c.size()); + + const auto& thermo = c.db().template lookupObject("SLGThermo"); + const auto& liquids = thermo.liquids(); + + const auto& UInterp = td.UInterp(); + const auto& pInterp = td.pInterp(); + const auto& rhoInterp = td.rhoInterp(); + + label parceli = 0; + forAllConstIters(c, parcelIter) + { + const parcelType& p = parcelIter(); + + const auto& coords = p.coordinates(); + const auto& tetIs = p.currentTetIndices(); + + const vector Uc(UInterp.interpolate(coords, tetIs)); + + const scalar pc = + max + ( + pInterp.interpolate(coords, tetIs), + c.constProps().pMin() + ); + + const scalar rhoc(rhoInterp.interpolate(coords, tetIs)); + const scalarField X(liquids.X(p.YLiquid())); + const scalar sigma = liquids.sigma(pc, p.T(), X); + + We[parceli++] = rhoc*magSqr(p.U() - Uc)*p.d()/sigma; + } + + + if (c.size() && c.time().writeTime()) + { + We.write(); + } +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.H new file mode 100644 index 0000000000..b686fbe041 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber/WeberNumberReacting.H @@ -0,0 +1,121 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +Class + Foam::WeberNumberReacting + +Group + grpLagrangianIntermediateFunctionObjects + +Description + Creates particle Weber number field on the cloud + +SourceFiles + WeberNumberReacting.C + +\*---------------------------------------------------------------------------*/ + +#ifndef WeberNumberReacting_H +#define WeberNumberReacting_H + +#include "CloudFunctionObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class WeberNumberReacting Declaration +\*---------------------------------------------------------------------------*/ + +template +class WeberNumberReacting +: + public CloudFunctionObject +{ + // Private Data + + // Typedefs + + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + + +public: + + //- Runtime type information + TypeName("WeberNumber"); + + + // Constructors + + //- Construct from dictionary + WeberNumberReacting + ( + const dictionary& dict, + CloudType& owner, + const word& modelName + ); + + //- Construct copy + WeberNumberReacting(const WeberNumberReacting& vf); + + //- Construct and return a clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new WeberNumberReacting(*this) + ); + } + + + //- Destructor + virtual ~WeberNumberReacting() = default; + + + // Member Functions + + //- Post-evolve hook + virtual void postEvolve(const typename parcelType::trackingData& td); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "WeberNumberReacting.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C b/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C index 9ad6f70cff..0cb36971ca 100644 --- a/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C +++ b/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2015 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +28,7 @@ License #include "basicSprayCloud.H" -#include "makeParcelCloudFunctionObjects.H" +#include "makeReactingParcelCloudFunctionObjects.H" // Reacting variant // Kinematic #include "makeThermoParcelForces.H" // thermo variant diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties index 412e822d05..a613d069b1 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties @@ -228,7 +228,12 @@ subModels cloudFunctions -{} +{ + WeberNumber1 + { + type WeberNumber; + } +} // ************************************************************************* //