diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index c5e44c1d72..f6b57014b4 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2016-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -428,13 +428,29 @@ Foam::KinematicCloud::KinematicCloud isotropyModel_(nullptr), UIntegrator_(nullptr), + rhokTrans_ + ( + new volScalarField::Internal + ( + IOobject + ( + IOobject::scopedName(this->name(), "rhokTrans"), + this->db().time().timeName(), + this->db(), + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + mesh_, + dimensionedScalar(dimMass, Zero) + ) + ), UTrans_ ( new volVectorField::Internal ( IOobject ( - this->name() + ":UTrans", + IOobject::scopedName(this->name(), "UTrans"), this->db().time().timeName(), this->db(), IOobject::READ_IF_PRESENT, @@ -450,7 +466,7 @@ Foam::KinematicCloud::KinematicCloud ( IOobject ( - this->name() + ":UCoeff", + IOobject::scopedName(this->name(), "UCoeff"), this->db().time().timeName(), this->db(), IOobject::READ_IF_PRESENT, @@ -517,13 +533,29 @@ Foam::KinematicCloud::KinematicCloud isotropyModel_(c.isotropyModel_->clone()), UIntegrator_(c.UIntegrator_->clone()), + rhokTrans_ + ( + new volScalarField::Internal + ( + IOobject + ( + IOobject::scopedName(this->name(), "rhokTrans"), + this->db().time().timeName(), + this->db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + IOobject::NO_REGISTER + ), + c.rhokTrans_() + ) + ), UTrans_ ( new volVectorField::Internal ( IOobject ( - this->name() + ":UTrans", + IOobject::scopedName(this->name(), "UTrans"), this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -614,6 +646,7 @@ Foam::KinematicCloud::KinematicCloud isotropyModel_(nullptr), UIntegrator_(nullptr), + rhokTrans_(nullptr), UTrans_(nullptr), UCoeff_(nullptr), log(c.log) @@ -687,8 +720,9 @@ void Foam::KinematicCloud::restoreState() template void Foam::KinematicCloud::resetSourceTerms() { + rhokTrans().field() = Zero; UTrans().field() = Zero; - UCoeff().field() = 0.0; + UCoeff().field() = Zero; } @@ -725,6 +759,7 @@ void Foam::KinematicCloud::relaxSources const KinematicCloud& cloudOldTime ) { + this->relax(rhokTrans_(), cloudOldTime.rhokTrans(), "rhok"); this->relax(UTrans_(), cloudOldTime.UTrans(), "U"); this->relax(UCoeff_(), cloudOldTime.UCoeff(), "U"); } @@ -733,6 +768,7 @@ void Foam::KinematicCloud::relaxSources template void Foam::KinematicCloud::scaleSources() { + this->scale(rhokTrans_(), "rhok"); this->scale(UTrans_(), "U"); this->scale(UCoeff_(), "U"); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 267a7643cd..0ea73fadb1 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-2020 OpenCFD Ltd. + Copyright (C) 2016-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -255,6 +255,9 @@ protected: // Sources + //- Mass for kinematic cloud + autoPtr rhokTrans_; + //- Momentum autoPtr UTrans_; @@ -524,21 +527,36 @@ public: // Sources + //- Transfer the effect of parcel to the carrier phase + inline void transferToCarrier + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); + + // Momentum + //- Return reference to mass for kinematic source + inline volScalarField::Internal& rhokTrans(); + + //- Return const reference to mass for kinematic source + inline const volScalarField::Internal& rhokTrans() const; + //- Return reference to momentum source inline volVectorField::Internal& UTrans(); //- Return const reference to momentum source - inline const volVectorField::Internal& - UTrans() const; + inline const volVectorField::Internal& UTrans() const; //- Return coefficient for carrier phase U equation inline volScalarField::Internal& UCoeff(); //- Return const coefficient for carrier phase U equation - inline const volScalarField::Internal& - UCoeff() const; + inline const volScalarField::Internal& UCoeff() const; + + //- Return tmp mass source for kinematic + inline tmp Srhok() const; //- Return tmp momentum source term (compressible) inline tmp SU diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index c8e1505048..3ade1a4de5 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -434,6 +434,37 @@ Foam::KinematicCloud::cellLengthScale() const } +template +inline void Foam::KinematicCloud::transferToCarrier +( + const parcelType& p, + const typename parcelType::trackingData& td +) +{ + const scalar m = p.nParticle()*p.mass(); + + rhokTrans()[p.cell()] += m; + + UTrans()[p.cell()] += m*p.U(); +} + + +template +inline Foam::DimensionedField& +Foam::KinematicCloud::rhokTrans() +{ + return *rhokTrans_; +} + + +template +inline const Foam::DimensionedField& +Foam::KinematicCloud::rhokTrans() const +{ + return *rhokTrans_; +} + + template inline Foam::DimensionedField& Foam::KinematicCloud::UTrans() @@ -466,6 +497,45 @@ Foam::KinematicCloud::UCoeff() const } +template +inline Foam::tmp +Foam::KinematicCloud::Srhok() const +{ + label debug0 = debug; + debug = 1; + if (debug) + { + Pout<< "rhokTrans min/max = " << min(rhokTrans()).value() << ", " + << max(rhokTrans()).value() << endl; + } + debug = debug0; + + if (this->solution().coupled()) + { + return rhokTrans()/this->db().time().deltaT()/this->mesh().V(); + } + + return + tmp::New + ( + IOobject + ( + IOobject::scopedName(this->name(), "rhokTrans"), + this->db().time().timeName(), + this->db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + IOobject::NO_REGISTER + ), + this->mesh(), + dimensionedScalar + ( + rhokTrans().dimensions()/dimTime/dimVolume, Zero + ) + ); +} + + template inline Foam::tmp Foam::KinematicCloud::SU(volVectorField& U, bool incompressible) @@ -524,7 +594,7 @@ Foam::KinematicCloud::vDotSweep() const ( IOobject ( - this->name() + ":vDotSweep", + IOobject::scopedName(this->name(), "vDotSweep"), this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -562,7 +632,7 @@ Foam::KinematicCloud::theta() const ( IOobject ( - this->name() + ":theta", + IOobject::scopedName(this->name(), "theta"), this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -600,7 +670,7 @@ Foam::KinematicCloud::alpha() const ( IOobject ( - this->name() + ":alpha", + IOobject::scopedName(this->name(), "alpha"), this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -636,7 +706,7 @@ Foam::KinematicCloud::rhoEff() const ( IOobject ( - this->name() + ":rhoEff", + IOobject::scopedName(this->name(), "rhoEff"), this->db().time().timeName(), this->db(), IOobject::NO_READ, diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H index 4cf53147eb..33afd881e5 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H @@ -233,7 +233,15 @@ public: // Sources - //- Mass + //- Transfer the effect of parcel to the carrier phase + inline void transferToCarrier + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); + + + // Mass //- Return reference to mass source for field i inline volScalarField::Internal& diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H index ef82d05462..8f357987e5 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H @@ -75,6 +75,39 @@ Foam::ReactingCloud::phaseChange() } +template +inline void Foam::ReactingCloud::transferToCarrier +( + const parcelType& p, + const typename parcelType::trackingData& td +) +{ + const auto& comp = this->composition(); + + const label celli = p.cell(); + + const scalar m = p.nParticle()*p.mass(); + + this->rhokTrans()[celli] += m; + + this->UTrans()[celli] += m*p.U(); + + const scalar pc = td.pc(); + const scalar T = p.T(); + const auto& Y = p.Y(); + + forAll(Y, i) + { + const scalar dm = m*p.Y[i]; + const label gid = comp.localToCarrierId(0, i); + const scalar hs = comp.carrier().Hs(gid, pc, T); + + this->rhoTrans(gid)[celli] += dm; + this->hsTrans()[celli] += dm*hs; + } +} + + template inline Foam::DimensionedField& Foam::ReactingCloud::rhoTrans(const label i) diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H index f8ba3ae234..2c26b4f545 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H @@ -251,6 +251,16 @@ public: surfaceReaction(); + // Sources + + //- Transfer the effect of parcel to the carrier phase + inline void transferToCarrier + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); + + // Cloud evolution functions //- Set parcel thermo properties diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H index d06d65ea8e..d3ff72b3cd 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H @@ -95,4 +95,51 @@ Foam::ReactingMultiphaseCloud::surfaceReaction() } +template +inline void Foam::ReactingMultiphaseCloud::transferToCarrier +( + const parcelType& p, + const typename parcelType::trackingData& td +) +{ + const label celli = p.cell(); + + const scalar m = p.nParticle()*p.mass(); + const scalar pc = td.pc(); + const scalar T = p.T(); + + this->rhokTrans()[celli] += m; + + this->UTrans()[celli] += m*p.U(); + + const auto& comp = this->composition(); + const label idG = comp.idGas(); + const label idL = comp.idLiquid(); + // const label idS = composition.idSolid(); + + // Absorb parcel into carrier phase + auto transfer = [&] + ( + const label phaseType, + const label phasei, + const scalarField& Y + ) + { + const scalar YMix = p.Y()[phaseType]; + + forAll(Y, i) + { + const label gid = comp.localToCarrierId(phaseType, i); + this->rhoTrans(gid)[celli] += m*YMix*Y[i]; + this->hsTrans()[celli] += m*YMix*comp.Hs(phasei, Y, pc, T); + } + }; + + transfer(parcelType::GAS, idG, p.YGas()); + transfer(parcelType::LIQ, idL, p.YLiquid()); + // No mapping between solid components and carrier phase + //transfer(parcelType::SLD, idS, p.YSolid()); +} + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H index 47dfcb3949..7a9a8d4741 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H @@ -285,6 +285,14 @@ public: // Sources + //- Transfer the effect of parcel to the carrier phase + inline void transferToCarrier + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); + + // Enthalpy //- Sensible enthalpy transfer [J/kg] diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H index e0dbbb8b58..9899a5f0c5 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H @@ -190,6 +190,19 @@ Foam::ThermoCloud::radAreaPT4() const } +template +inline void Foam::ThermoCloud::transferToCarrier +( + const parcelType& p, + const typename parcelType::trackingData& td +) +{ + CloudType::transferToCarrier(p, td); + + hsTrans()[p.cell()] += p.nParticle()*p.mass()*p.hs(); +} + + template inline Foam::DimensionedField& Foam::ThermoCloud::hsTrans() diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 6d938f4801..20f5dcb105 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -311,9 +311,8 @@ bool Foam::KinematicParcel::move const scalar trackTime ) { - typename TrackCloudType::parcelType& p = - static_cast(*this); - typename TrackCloudType::parcelType::trackingData& ttd = + auto& p = static_cast(*this); + auto& ttd = static_cast(td); ttd.switchProcessor = false; @@ -383,9 +382,10 @@ bool Foam::KinematicParcel::move if (p.active() && p.onFace()) { - cloud.functions().postFace(p, ttd.keepParticle); + ttd.keepParticle = cloud.functions().postFace(p, ttd); } - cloud.functions().postMove(p, dt, start, ttd.keepParticle); + + ttd.keepParticle = cloud.functions().postMove(p, dt, start, ttd); if (p.active() && p.onFace() && ttd.keepParticle) { @@ -405,13 +405,14 @@ bool Foam::KinematicParcel::hitPatch trackingData& td ) { - typename TrackCloudType::parcelType& p = - static_cast(*this); + auto& p = static_cast(*this); + auto& ttd = + static_cast(td); const polyPatch& pp = p.mesh().boundaryMesh()[p.patch()]; // Invoke post-processing model - cloud.functions().postPatch(p, pp, td.keepParticle); + td.keepParticle = cloud.functions().postPatch(p, pp, ttd); if (isA(pp)) { diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C index 57bca3973f..b3b6f5807e 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C @@ -109,33 +109,39 @@ void Foam::CloudFunctionObject::postEvolve template -void Foam::CloudFunctionObject::postMove +bool Foam::CloudFunctionObject::postMove ( parcelType&, const scalar, const point&, - bool& + const typename parcelType::trackingData& td ) -{} +{ + return true; +} template -void Foam::CloudFunctionObject::postPatch +bool Foam::CloudFunctionObject::postPatch ( const parcelType&, const polyPatch&, - bool& + const typename parcelType::trackingData& td ) -{} +{ + return true; +} template -void Foam::CloudFunctionObject::postFace +bool Foam::CloudFunctionObject::postFace ( const parcelType&, - bool& + const typename parcelType::trackingData& td ) -{} +{ + return true; +} template diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H index 0949a2ffe1..e2bc8559fb 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H @@ -159,27 +159,27 @@ public: ); //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-face hook - virtual void postFace + virtual bool postFace ( const parcelType& p, - bool& keepParticle + const typename parcelType::trackingData& td ); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C index d8cbb01174..82d879dffa 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C @@ -110,9 +110,9 @@ void Foam::CloudFunctionObjectList::preEvolve const typename parcelType::trackingData& td ) { - forAll(*this, i) + for (auto& cfo : *this) { - this->operator[](i).preEvolve(td); + cfo.preEvolve(td); } } @@ -123,70 +123,71 @@ void Foam::CloudFunctionObjectList::postEvolve const typename parcelType::trackingData& td ) { - forAll(*this, i) + for (auto& cfo : *this) { - this->operator[](i).postEvolve(td); + cfo.postEvolve(td); } } template -void Foam::CloudFunctionObjectList::postMove +bool Foam::CloudFunctionObjectList::postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ) { - forAll(*this, i) + for (auto& cfo : *this) { - if (!keepParticle) + if (!cfo.postMove(p, dt, position0, td)) { - return; + return false; } - - this->operator[](i).postMove(p, dt, position0, keepParticle); } + + return true; } template -void Foam::CloudFunctionObjectList::postPatch +bool Foam::CloudFunctionObjectList::postPatch ( - const parcelType& p, + parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ) { - forAll(*this, i) + for (auto& cfo : *this) { - if (!keepParticle) + if (!cfo.postPatch(p, pp, td)) { - return; + return false; } - - this->operator[](i).postPatch(p, pp, keepParticle); } + + return true; } template -void Foam::CloudFunctionObjectList::postFace +bool Foam::CloudFunctionObjectList::postFace ( - const parcelType& p, - bool& keepParticle + parcelType& p, + const typename parcelType::trackingData& td ) { - forAll(*this, i) + for (auto& cfo : *this) { - if (!keepParticle) + if (!cfo.postFace(p, td)) { - return; + return false; } - this->operator[](i).postFace(p, keepParticle); } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H index 41e0a28df4..a30c3571b5 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H @@ -125,27 +125,27 @@ public: ); //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( - const parcelType& p, + parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-face hook - virtual void postFace + virtual bool postFace ( - const parcelType& p, - bool& keepParticle + parcelType& p, + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C index 0e06c6e162..0e7343e66b 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.C @@ -263,12 +263,14 @@ Foam::FaceInteraction::FaceInteraction // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::FaceInteraction::postFace +bool Foam::FaceInteraction::postFace ( const parcelType& p, - bool& keepParticle + const typename parcelType::trackingData& td ) { + bool keepParticle = true; + const auto& fzm = this->owner().mesh().faceZones(); forAll(faceZoneIDs_, i) @@ -322,8 +324,9 @@ void Foam::FaceInteraction::postFace } } } + + return keepParticle; } // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.H index 77496ae2fc..996bfec899 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FaceInteraction/FaceInteraction.H @@ -182,7 +182,11 @@ public: // Member Functions //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C index 1240702ee8..5d65ddf092 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C @@ -350,7 +350,11 @@ Foam::FacePostProcessing::FacePostProcessing // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::FacePostProcessing::postFace(const parcelType& p, bool&) +bool Foam::FacePostProcessing::postFace +( + const parcelType& p, + const typename parcelType::trackingData& td +) { if ( @@ -380,6 +384,8 @@ void Foam::FacePostProcessing::postFace(const parcelType& p, bool&) } } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H index d729e491bf..8ae4afb84b 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H @@ -158,7 +158,11 @@ public: inline bool resetOnWrite() const; //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C index 63c165ab79..29c9ce1560 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C @@ -629,17 +629,19 @@ Foam::ParticleCollector::ParticleCollector // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticleCollector::postMove +bool Foam::ParticleCollector::postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ) { + bool keepParticle = true; + if ((parcelType_ != -1) && (parcelType_ != p.typeId())) { - return; + return keepParticle; } hitFaceIDs_.clear(); @@ -708,6 +710,8 @@ void Foam::ParticleCollector::postMove keepParticle = false; } } + + return keepParticle; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H index a934557a0b..bb8d11f4d8 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H @@ -282,12 +282,12 @@ public: inline bool resetOnWrite() const; //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C index 9958881f04..df28248458 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C @@ -159,11 +159,11 @@ void Foam::ParticleErosion::preEvolve template -void Foam::ParticleErosion::postPatch +bool Foam::ParticleErosion::postPatch ( const parcelType& p, const polyPatch& pp, - bool& + const typename parcelType::trackingData& td ) { const label patchi = pp.index(); @@ -184,7 +184,7 @@ void Foam::ParticleErosion::postPatch // quick reject if particle travelling away from the patch if ((nw & U) < 0) { - return; + return true; } const scalar magU = mag(U); @@ -206,6 +206,8 @@ void Foam::ParticleErosion::postPatch Q += coeff*(K_*sqr(cos(alpha))/6.0); } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H index 2a818fa7d9..282a377f93 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H @@ -140,11 +140,11 @@ public: ); //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.C index e0010d085b..437db3429c 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.C @@ -136,16 +136,16 @@ Foam::ParticleHistogram::ParticleHistogram // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticleHistogram::postPatch +bool Foam::ParticleHistogram::postPatch ( const parcelType& p, const polyPatch& pp, - bool& + const typename parcelType::trackingData& td ) { if (!collector_.isPatch()) { - return; + return true; } const label patchi = pp.index(); @@ -160,19 +160,21 @@ void Foam::ParticleHistogram::postPatch dParticles_[localPatchi].append(p.d()); nParticles_[localPatchi].append(p.nParticle()); } + + return true; } template -void Foam::ParticleHistogram::postFace +bool Foam::ParticleHistogram::postFace ( const parcelType& p, - bool& + const typename parcelType::trackingData& td ) { if (collector_.isPatch()) { - return; + return true; } const labelList& IDs = collector_.IDs(); @@ -200,6 +202,8 @@ void Foam::ParticleHistogram::postFace nParticles_[i].append(p.nParticle()); } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.H index 6b2866fd40..c3ba26c50d 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleHistogram/ParticleHistogram.H @@ -200,15 +200,19 @@ public: // Evaluation //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); // I-O diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.C index 32175a1fee..77e03bf659 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.C @@ -111,16 +111,16 @@ Foam::ParticlePostProcessing::ParticlePostProcessing // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::ParticlePostProcessing::postPatch +bool Foam::ParticlePostProcessing::postPatch ( const parcelType& p, const polyPatch& pp, - bool& + const typename parcelType::trackingData& td ) { if (!collector_.isPatch()) { - return; + return true; } const label patchi = pp.index(); @@ -143,19 +143,21 @@ void Foam::ParticlePostProcessing::postPatch data_[localPatchi].append(data.str()); } + + return true; } template -void Foam::ParticlePostProcessing::postFace +bool Foam::ParticlePostProcessing::postFace ( const parcelType& p, - bool& + const typename parcelType::trackingData& td ) { if (collector_.isPatch()) { - return; + return true; } const labelList& IDs = collector_.IDs(); @@ -191,6 +193,8 @@ void Foam::ParticlePostProcessing::postFace data_[i].append(data.str()); } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.H index 20150c5210..e01d05e976 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticlePostProcessing/ParticlePostProcessing.H @@ -191,15 +191,19 @@ public: // Evaluation //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); // I-O diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C index 2d34c57eb2..36e1713706 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C @@ -105,7 +105,11 @@ void Foam::ParticleTracks::preEvolve template -void Foam::ParticleTracks::postFace(const parcelType& p, bool&) +bool Foam::ParticleTracks::postFace +( + const parcelType& p, + const typename parcelType::trackingData& td +) { if ( @@ -132,6 +136,8 @@ void Foam::ParticleTracks::postFace(const parcelType& p, bool&) ); } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H index 3bd704aeb0..2742b27b64 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H @@ -150,7 +150,11 @@ public: ); //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C index e2f8938488..c60d8680bf 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C @@ -103,12 +103,12 @@ void Foam::ParticleTrap::postEvolve template -void Foam::ParticleTrap::postMove +bool Foam::ParticleTrap::postMove ( parcelType& p, const scalar, const point&, - bool& + const typename parcelType::trackingData& td ) { if (alphaPtr_->primitiveField()[p.cell()] < threshold_) @@ -122,6 +122,8 @@ void Foam::ParticleTrap::postMove p.U() -= 2*nHat*nHatU; } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H index 500dd9d595..e4581990ab 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H @@ -140,12 +140,12 @@ public: ); //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C index e78d65a5ee..522e94c35b 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.C @@ -323,12 +323,12 @@ void Foam::ParticleZoneInfo::postEvolve template -void Foam::ParticleZoneInfo::postMove +bool Foam::ParticleZoneInfo::postMove ( parcelType& p, const scalar dt, const point&, - bool& + const typename parcelType::trackingData& td ) { if (inZone(p.cell())) @@ -346,6 +346,8 @@ void Foam::ParticleZoneInfo::postMove movedParticles_.append(newData); } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.H index 9f51b28c63..6032644ed6 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleZoneInfo/ParticleZoneInfo.H @@ -301,12 +301,12 @@ public: ); //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); //- Write diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C index 8cbf9c4693..e98f9adc3f 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C @@ -139,11 +139,11 @@ Foam::PatchCollisionDensity::PatchCollisionDensity // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::PatchCollisionDensity::postPatch +bool Foam::PatchCollisionDensity::postPatch ( const parcelType& p, const polyPatch& pp, - bool& + const typename parcelType::trackingData& td ) { const label patchi = pp.index(); @@ -158,6 +158,8 @@ void Foam::PatchCollisionDensity::postPatch collisionDensity_[patchi][patchFacei] += 1/this->owner().mesh().magSf().boundaryField()[patchi][patchFacei]; } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H index f9ae499115..2359310a97 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H @@ -126,11 +126,11 @@ public: // Member Functions //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.C index 47ef0e92ac..83ed949ad7 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.C @@ -170,11 +170,11 @@ void Foam::PatchInteractionFields::preEvolve template -void Foam::PatchInteractionFields::postPatch +bool Foam::PatchInteractionFields::postPatch ( const parcelType& p, const polyPatch& pp, - bool& + const typename parcelType::trackingData& td ) { const label patchi = pp.index(); @@ -182,6 +182,8 @@ void Foam::PatchInteractionFields::postPatch massPtr_->boundaryFieldRef()[patchi][facei] += p.nParticle()*p.mass(); countPtr_->boundaryFieldRef()[patchi][facei] += 1; + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.H index 9b84a04371..fa9405c6ca 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchInteractionFields/PatchInteractionFields.H @@ -173,11 +173,11 @@ public: ); //- Post-patch hook - virtual void postPatch + virtual bool postPatch ( const parcelType& p, const polyPatch& pp, - bool& keepParticle + const typename parcelType::trackingData& td ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C index 3dad8bb247..77eb5705ee 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.C @@ -248,16 +248,18 @@ Foam::RemoveParcels::RemoveParcels // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template -void Foam::RemoveParcels::postFace +bool Foam::RemoveParcels::postFace ( const parcelType& p, - bool& keepParticle + const typename parcelType::trackingData& td ) { + bool keepParticle = true; + if ((typeId_ >= 0) && (p.typeId() != typeId_)) { // Not processing this particle type - return; + return keepParticle; } if @@ -280,6 +282,8 @@ void Foam::RemoveParcels::postFace } } } + + return keepParticle; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H index 31d1469033..8f04447f4e 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels/RemoveParcels.H @@ -163,7 +163,11 @@ public: ); //- Post-face hook - virtual void postFace(const parcelType& p, bool& keepParticle); + virtual bool postFace + ( + const parcelType& p, + const typename parcelType::trackingData& td + ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C index 0c24a4c8d2..dd38b8b975 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C @@ -124,17 +124,19 @@ void Foam::VoidFraction::postEvolve template -void Foam::VoidFraction::postMove +bool Foam::VoidFraction::postMove ( parcelType& p, const scalar dt, const point&, - bool& + const typename parcelType::trackingData& td ) { volScalarField& theta = thetaPtr_(); theta[p.cell()] += dt*p.nParticle()*p.volume(); + + return true; } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H index b876106683..1cb97dc3e6 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H @@ -128,12 +128,12 @@ public: ); //- Post-move hook - virtual void postMove + virtual bool postMove ( parcelType& p, const scalar dt, const point& position0, - bool& keepParticle + const typename parcelType::trackingData& td ); };