From 5f0538eccaed55d339753b3aca63aa2e5319c533 Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 21 Apr 2010 12:22:22 +0100 Subject: [PATCH] ENH: Added active flag to KinematicParcel - used during parcel calc() function to flag whether the parcel should be tracked - if false, parcel not tracked, but sub-models are still active - useful, e.g. for particle 'stick' condition - NOTE: stored as a bool, but read/written as a label for restarts/post-processing --- .../KinematicParcel/KinematicParcel.C | 6 +++++- .../KinematicParcel/KinematicParcel.H | 11 ++++++++++- .../KinematicParcel/KinematicParcelI.H | 18 +++++++++++++++++- .../KinematicParcel/KinematicParcelIO.C | 19 ++++++++++++++++--- .../LocalInteraction/LocalInteraction.C | 4 ++++ .../LocalInteraction/LocalInteraction.H | 1 + .../PatchInteractionModel.H | 1 + .../PatchInteractionModel/Rebound/Rebound.C | 2 ++ .../PatchInteractionModel/Rebound/Rebound.H | 1 + .../StandardWallInteraction.C | 4 ++++ .../StandardWallInteraction.H | 1 + 11 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index e17e7138d6..b11d693d95 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -258,7 +258,10 @@ bool Foam::KinematicParcel::move(TrackData& td) // face is hit label cellI = p.cell(); - dt *= p.trackToFace(p.position() + dt*U_, td); + if (p.active()) + { + dt *= p.trackToFace(p.position() + dt*U_, td); + } tEnd -= dt; p.stepFraction() = 1.0 - tEnd/deltaT; @@ -322,6 +325,7 @@ bool Foam::KinematicParcel::hitPatch pp, this->face(), td.keepParticle, + active_, U_ ); } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 5316ea2280..a154bac88b 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -194,6 +194,9 @@ protected: // Parcel properties + //- Active flag - tracking inactive when active = false + bool active_; + //- Parcel type id label typeId_; @@ -308,6 +311,9 @@ public: // Access + //- Return const access to active flag + inline bool active() const; + //- Return const access to type id inline label typeId() const; @@ -332,8 +338,11 @@ public: // Edit + //- Return const access to active flag + inline bool& active(); + //- Return access to type id - inline label typeId(); + inline label& typeId(); //- Return access to number of particles inline scalar& nParticle(); diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H index 7c4b759760..6eca153546 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H @@ -75,6 +75,7 @@ inline Foam::KinematicParcel::KinematicParcel ) : Particle(owner, position, cellI), + active_(false), typeId_(owner.parcelTypeId()), nParticle_(0), d_(0.0), @@ -102,6 +103,7 @@ inline Foam::KinematicParcel::KinematicParcel ) : Particle(owner, position, cellI), + active_(true), typeId_(typeId), nParticle_(nParticle0), d_(d0), @@ -201,6 +203,13 @@ Foam::KinematicParcel::trackData::g() const // * * * * * * * * * * KinematicParcel Member Functions * * * * * * * * * * // +template +inline bool Foam::KinematicParcel::active() const +{ + return active_; +} + + template inline Foam::label Foam::KinematicParcel::typeId() const { @@ -251,7 +260,14 @@ inline const Foam::vector& Foam::KinematicParcel::UTurb() const template -inline Foam::label Foam::KinematicParcel::typeId() +inline bool& Foam::KinematicParcel::active() +{ + return active_; +} + + +template +inline Foam::label& Foam::KinematicParcel::typeId() { return typeId_; } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C index bbf5d46412..a334e8b880 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C @@ -33,6 +33,7 @@ License template Foam::string Foam::KinematicParcel::propHeader = Particle::propHeader + + " active" + " typeId" + " nParticle" + " d" @@ -53,6 +54,7 @@ Foam::KinematicParcel::KinematicParcel ) : Particle(cloud, is, readFields), + active_(false), typeId_(0), nParticle_(0.0), d_(0.0), @@ -68,6 +70,7 @@ Foam::KinematicParcel::KinematicParcel { if (is.format() == IOstream::ASCII) { + active_ = readBool(is); typeId_ = readLabel(is); nParticle_ = readScalar(is); d_ = readScalar(is); @@ -81,7 +84,8 @@ Foam::KinematicParcel::KinematicParcel is.read ( reinterpret_cast(&typeId_), - sizeof(typeId_) + sizeof(active_) + + sizeof(typeId_) + sizeof(nParticle_) + sizeof(d_) + sizeof(U_) @@ -111,6 +115,9 @@ void Foam::KinematicParcel::readFields(Cloud& c) Particle::readFields(c); + IOField