From cfce348b1ecc0c6d5057933ca818b60457c7ceb6 Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Wed, 27 Oct 2010 18:25:40 +0100 Subject: [PATCH] ENH: Added particle hitFace() function --- src/lagrangian/basic/Particle/Particle.C | 15 ++++++++++----- src/lagrangian/basic/Particle/Particle.H | 4 ++++ .../Templates/KinematicParcel/KinematicParcel.C | 16 ++++++++++++++++ .../Templates/KinematicParcel/KinematicParcel.H | 8 ++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index b1a306b62d7..fd0540a827d 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -499,6 +499,9 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace } while (faceI_ < 0); + ParticleType& p = static_cast<ParticleType&>(*this); + p.hitFace(td); + if (cloud_.internalFace(faceI_)) { // Change tet ownership because a tri face has been crossed, @@ -527,8 +530,6 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace } else { - ParticleType& p = static_cast<ParticleType&>(*this); - label origFaceI = faceI_; label patchI = patch(faceI_); @@ -641,9 +642,7 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace vector nHat = wallTri.normal(); nHat /= mag(nHat); - const ParticleType& p = static_cast<const ParticleType&>(*this); - - scalar r = p.wallImpactDistance(nHat); + const scalar r = p.wallImpactDistance(nHat); // Removing (approximately) the wallTri normal // component of the existing correction, to avoid the @@ -694,6 +693,12 @@ void Foam::Particle<ParticleType>::transformProperties(const vector&) {} +template<class ParticleType> +template<class TrackData> +void Foam::Particle<ParticleType>::hitFace(TrackData&) +{} + + template<class ParticleType> template<class TrackData> bool Foam::Particle<ParticleType>::hitPatch diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index a075ca64d70..d17a9c995b7 100644 --- a/src/lagrangian/basic/Particle/Particle.H +++ b/src/lagrangian/basic/Particle/Particle.H @@ -219,6 +219,10 @@ protected: // Patch interactions + //- Overridable function to handle the particle hitting a face + template<class TrackData> + void hitFace(TrackData& td); + //- Overridable function to handle the particle hitting a // patch. Executed before other patch-hitting functions. // trackFraction is passed in to allow mesh motion to diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 92ce3f88d49..a5f1b44d840 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -243,6 +243,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel ) : Particle<ParcelType>(p), + active_(p.active_), typeId_(p.typeId_), nParticle_(p.nParticle_), d_(p.d_), @@ -270,6 +271,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel ) : Particle<ParcelType>(p, c), + active_(p.active_), typeId_(p.typeId_), nParticle_(p.nParticle_), d_(p.d_), @@ -393,6 +395,20 @@ bool Foam::KinematicParcel<ParcelType>::move } +template<class ParcelType> +template<class TrackData> +void Foam::KinematicParcel<ParcelType>::hitFace(TrackData& td) +{ + ParcelType& p = static_cast<ParcelType&>(*this); + td.cloud().postProcessing().postFace(p); +} + + +template<class ParcelType> +void Foam::KinematicParcel<ParcelType>::hitFace(int& td) +{} + + template<class ParcelType> template<class TrackData> bool Foam::KinematicParcel<ParcelType>::hitPatch diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index afc6a98e618..a75a1dd78f1 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -581,6 +581,14 @@ public: // Patch interactions + //- Overridable function to handle the particle hitting a face + // without trackData + void hitFace(int& td); + + //- Overridable function to handle the particle hitting a face + template<class TrackData> + void hitFace(TrackData& td); + //- Overridable function to handle the particle hitting a patch // Executed before other patch-hitting functions template<class TrackData> -- GitLab