diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index 9f27af0b3227e5ae98740369e4e5c641f34985cd..35d281c6a758b7203bcc11d63972d9dcbbc10a96 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -339,6 +339,8 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace label patchi = patch(facei_); const polyPatch& patch = mesh.boundaryMesh()[patchi]; + p.hitPatch(patch, td, patchi); + if (isA<wedgePolyPatch>(patch)) { p.hitWedgePatch @@ -376,10 +378,7 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace } else if (isA<polyPatch>(patch)) { - p.hitPatch - ( - static_cast<const polyPatch&>(patch), td - ); + p.hitPatch(patch, td); } else { @@ -434,6 +433,18 @@ void Foam::Particle<ParticleType>::transformProperties(const vector&) {} + +template<class ParticleType> +template<class TrackData> +void Foam::Particle<ParticleType>::hitPatch +( + const polyPatch&, + TrackData&, + const label +) +{} + + template<class ParticleType> template<class TrackData> void Foam::Particle<ParticleType>::hitWedgePatch diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index 8035188a65f9c263b461b62506348b9087d9f023..371c1700c3fbf624c28826cf4468125abb5d866f 100644 --- a/src/lagrangian/basic/Particle/Particle.H +++ b/src/lagrangian/basic/Particle/Particle.H @@ -171,6 +171,16 @@ protected: // Patch interactions + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + template<class TrackData> + void hitPatch + ( + const polyPatch&, + TrackData& td, + const label patchI + ); + //- Overridable function to handle the particle hitting a wedgePatch template<class TrackData> void hitWedgePatch diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index cb18c182aecce02f0674b06b739de01f3146f045..4f9f0636dde93bc3879189d4b70a799e410f5fcc 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -254,6 +254,30 @@ bool Foam::KinematicParcel<ParcelType>::move(TrackData& td) } +template<class ParcelType> +template<class TrackData> +void Foam::KinematicParcel<ParcelType>::hitPatch +( + const polyPatch& pp, + TrackData& td, + const label patchI +) +{ + ParcelType& p = static_cast<ParcelType&>(*this); + td.cloud().postProcessing().postPatch(p, patchI); +} + + +template<class ParcelType> +void Foam::KinematicParcel<ParcelType>::hitPatch +( + const polyPatch& pp, + int& td, + const label patchI +) +{} + + template<class ParcelType> template<class TrackData> void Foam::KinematicParcel<ParcelType>::hitProcessorPatch diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index b448958e798b055b2a930b67189976308603608c..951a42c39c76853ec07d56ef9853500ae8cae3d3 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -418,6 +418,27 @@ public: // Patch interactions + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + template<class TrackData> + void hitPatch + ( + const polyPatch& p, + TrackData& td, + const label patchI + ); + + + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions without trackData + void hitPatch + ( + const polyPatch& p, + int& td, + const label patchI + ); + + //- Overridable function to handle the particle hitting a // processorPatch template<class TrackData>