From 798572484649ce2706c9dce46eb04486bc434596 Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Wed, 14 Nov 2012 17:26:51 +0000 Subject: [PATCH] ENH: Added option to remove particle in cloud function objects --- .../KinematicParcel/KinematicParcel.C | 13 +++++-- .../CloudFunctionObject/CloudFunctionObject.C | 9 +++-- .../CloudFunctionObject/CloudFunctionObject.H | 9 +++-- .../CloudFunctionObjectList.C | 37 ++++++++++++++++--- .../CloudFunctionObjectList.H | 9 +++-- .../FacePostProcessing/FacePostProcessing.C | 3 +- .../FacePostProcessing/FacePostProcessing.H | 3 +- .../ParticleCollector/ParticleCollector.C | 19 +++++++--- .../ParticleCollector/ParticleCollector.H | 9 ++++- .../ParticleErosion/ParticleErosion.C | 3 +- .../ParticleErosion/ParticleErosion.H | 3 +- .../ParticleTracks/ParticleTracks.C | 3 +- .../ParticleTracks/ParticleTracks.H | 3 +- .../ParticleTrap/ParticleTrap.C | 3 +- .../ParticleTrap/ParticleTrap.H | 3 +- .../PatchPostProcessing/PatchPostProcessing.C | 3 +- .../PatchPostProcessing/PatchPostProcessing.H | 3 +- .../VoidFraction/VoidFraction.C | 5 ++- .../VoidFraction/VoidFraction.H | 3 +- .../PairCollision/PairCollision.C | 6 ++- 20 files changed, 110 insertions(+), 39 deletions(-) diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 58217adbf55..7ec52b1ee8a 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -326,7 +326,7 @@ bool Foam::KinematicParcel<ParcelType>::move p.age() += dt; - td.cloud().functions().postMove(p, cellI, dt); + td.cloud().functions().postMove(p, cellI, dt, td.keepParticle); } return td.keepParticle; @@ -340,7 +340,7 @@ void Foam::KinematicParcel<ParcelType>::hitFace(TrackData& td) typename TrackData::cloudType::parcelType& p = static_cast<typename TrackData::cloudType::parcelType&>(*this); - td.cloud().functions().postFace(p, p.face()); + td.cloud().functions().postFace(p, p.face(), td.keepParticle); } @@ -364,7 +364,14 @@ bool Foam::KinematicParcel<ParcelType>::hitPatch static_cast<typename TrackData::cloudType::parcelType&>(*this); // Invoke post-processing model - td.cloud().functions().postPatch(p, pp, trackFraction, tetIs); + td.cloud().functions().postPatch + ( + p, + pp, + trackFraction, + tetIs, + td.keepParticle + ); // Invoke surface film model if (td.cloud().surfaceFilm().transferParcel(p, pp, td.keepParticle)) diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C index dbc359ae9a5..5a208a4ca86 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.C @@ -96,7 +96,8 @@ void Foam::CloudFunctionObject<CloudType>::postMove ( const typename CloudType::parcelType&, const label, - const scalar + const scalar, + bool& ) { // do nothing @@ -109,7 +110,8 @@ void Foam::CloudFunctionObject<CloudType>::postPatch const typename CloudType::parcelType&, const polyPatch&, const scalar, - const tetIndices& + const tetIndices&, + bool& ) { // do nothing @@ -120,7 +122,8 @@ template<class CloudType> void Foam::CloudFunctionObject<CloudType>::postFace ( const typename CloudType::parcelType&, - const label + const label, + bool& ) { // do nothing diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H index 51306608859..976fd3867ff 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObject/CloudFunctionObject.H @@ -137,7 +137,8 @@ public: ( const typename CloudType::parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ); //- Post-patch hook @@ -146,14 +147,16 @@ public: const typename CloudType::parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& testIs + const tetIndices& testIs, + bool& keepParticle ); //- Post-face hook virtual void postFace ( const typename CloudType::parcelType& p, - const label faceI + const label faceI, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C index 2f97468e36c..e0d57b60570 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.C @@ -132,12 +132,18 @@ void Foam::CloudFunctionObjectList<CloudType>::postMove ( const typename CloudType::parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ) { forAll(*this, i) { - this->operator[](i).postMove(p, cellI, dt); + this->operator[](i).postMove(p, cellI, dt, keepParticle); + + if (!keepParticle) + { + return; + } } } @@ -148,12 +154,25 @@ void Foam::CloudFunctionObjectList<CloudType>::postPatch const typename CloudType::parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& keepParticle ) { forAll(*this, i) { - this->operator[](i).postPatch(p, pp, trackFraction, tetIs); + this->operator[](i).postPatch + ( + p, + pp, + trackFraction, + tetIs, + keepParticle + ); + + if (!keepParticle) + { + return; + } } } @@ -162,12 +181,18 @@ template<class CloudType> void Foam::CloudFunctionObjectList<CloudType>::postFace ( const typename CloudType::parcelType& p, - const label faceI + const label faceI, + bool& keepParticle ) { forAll(*this, i) { - this->operator[](i).postFace(p, faceI); + this->operator[](i).postFace(p, faceI, keepParticle); + + if (!keepParticle) + { + return; + } } } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H index 5daeab9f297..de9c3afc025 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudFunctionObjectList/CloudFunctionObjectList.H @@ -114,7 +114,8 @@ public: ( const typename CloudType::parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ); //- Post-patch hook @@ -123,14 +124,16 @@ public: const typename CloudType::parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& keepParticle ); //- Post-face hook virtual void postFace ( const typename CloudType::parcelType& p, - const label faceI + const label faceI, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C index 6de019f0293..8c64e1b62fe 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C @@ -376,7 +376,8 @@ template<class CloudType> void Foam::FacePostProcessing<CloudType>::postFace ( const parcelType& p, - const label faceI + const label faceI, + bool& ) { if diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H index 06387d234b2..3195b9fc575 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.H @@ -160,7 +160,8 @@ public: virtual void postFace ( const parcelType& p, - const label faceI + const label faceI, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C index de22b5a0448..06f836a3d57 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C @@ -27,6 +27,9 @@ License #include "Pstream.H" #include "surfaceWriter.H" #include "unitConversion.H" +#include "Random.H" +#include "triangle.H" +#include "cloud.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -496,6 +499,7 @@ Foam::ParticleCollector<CloudType>::ParticleCollector CloudFunctionObject<CloudType>(dict, owner, typeName), mode_(mtUnknown), parcelType_(this->coeffDict().lookupOrDefault("parcelType", -1)), + removeCollected_(this->coeffDict().lookup("removeCollected")), points_(), faces_(), faceTris_(), @@ -573,10 +577,14 @@ Foam::ParticleCollector<CloudType>::ParticleCollector ) : CloudFunctionObject<CloudType>(pc), + mode_(pc.mode_), parcelType_(pc.parcelType_), points_(pc.points_), faces_(pc.faces_), faceTris_(pc.faceTris_), + nSector_(pc.nSector_), + radius_(pc.radius_), + coordSys_(pc.coordSys_), normal_(pc.normal_), negateParcelsOppositeNormal_(pc.negateParcelsOppositeNormal_), surfaceFormat_(pc.surfaceFormat_), @@ -606,8 +614,8 @@ void Foam::ParticleCollector<CloudType>::postMove ( const parcelType& p, const label cellI, - const scalar dt -// bool& keepParticle + const scalar dt, + bool& keepParticle ) { if ((parcelType_ != -1) && (parcelType_ != p.typeId())) @@ -658,9 +666,10 @@ void Foam::ParticleCollector<CloudType>::postMove mass_[faceI + 3] += m; } - // remove particle -// keepParticle = false; - + if (removeCollected_) + { + keepParticle = false; + } } } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H index dd166ba492d..283246cfec8 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.H @@ -40,6 +40,9 @@ SourceFiles #include "CloudFunctionObject.H" #include "cylindricalCS.H" +#include "face.H" +#include "Switch.H" +#include "OFstream.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -80,6 +83,9 @@ private: //- Index of parcel types to collect (-1 by default = all particles) const label parcelType_; + //- Flag to remove collected particles + Switch removeCollected_; + //- List of points Field<point> points_; @@ -226,7 +232,8 @@ public: ( const parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C index 81772debfe2..c0683d0dbfe 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C @@ -168,7 +168,8 @@ void Foam::ParticleErosion<CloudType>::postPatch const parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& ) { const label patchI = pp.index(); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H index c741bd40044..bedc447188a 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H @@ -128,7 +128,8 @@ public: const parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C index 9721a5a55d4..69f48bf5e03 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.C @@ -112,7 +112,8 @@ template<class CloudType> void Foam::ParticleTracks<CloudType>::postFace ( const parcelType& p, - const label + const label, + bool& ) { if diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H index 9a9939dbb25..1eeda7bcb82 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTracks/ParticleTracks.H @@ -143,7 +143,8 @@ public: virtual void postFace ( const parcelType& p, - const label faceI + const label faceI, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C index f1b19bde591..0a5ff091230 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.C @@ -104,7 +104,8 @@ void Foam::ParticleTrap<CloudType>::postMove ( parcelType& p, const label cellI, - const scalar + const scalar, + bool& ) { if (alphaPtr_->internalField()[cellI] < threshold_) diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H index 39321af3c08..43fac16c583 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleTrap/ParticleTrap.H @@ -125,7 +125,8 @@ public: ( typename CloudType::parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C index f66a872cfcf..a267b86266c 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C @@ -220,7 +220,8 @@ void Foam::PatchPostProcessing<CloudType>::postPatch const parcelType& p, const polyPatch& pp, const scalar, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& ) { const label patchI = pp.index(); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H index f7d618e6ce8..cb4605e666a 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H @@ -129,7 +129,8 @@ public: const parcelType& p, const polyPatch& pp, const scalar trackFraction, - const tetIndices& tetIs + const tetIndices& tetIs, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C index dfef9f4835e..e5b64f65caa 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -125,7 +125,8 @@ void Foam::VoidFraction<CloudType>::postMove ( const parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& ) { volScalarField& theta = thetaPtr_(); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H index 26f0f65018c..e8ed507f7df 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H @@ -115,7 +115,8 @@ public: ( const parcelType& p, const label cellI, - const scalar dt + const scalar dt, + bool& keepParticle ); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C index 6315eac8278..8804fb6759f 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C @@ -302,13 +302,15 @@ void Foam::PairCollision<CloudType>::wallInteraction() if (particleHit) { - this->owner().functions().postFace(p, realFaceI); + bool keep = true; + this->owner().functions().postFace(p, realFaceI, keep); this->owner().functions().postPatch ( p, mesh.boundaryMesh()[patchI], 1.0, - p.currentTetIndices() + p.currentTetIndices(), + keep ); } } -- GitLab