diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index 9f27af0b32..35d281c6a7 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -339,6 +339,8 @@ Foam::scalar Foam::Particle::trackToFace label patchi = patch(facei_); const polyPatch& patch = mesh.boundaryMesh()[patchi]; + p.hitPatch(patch, td, patchi); + if (isA(patch)) { p.hitWedgePatch @@ -376,10 +378,7 @@ Foam::scalar Foam::Particle::trackToFace } else if (isA(patch)) { - p.hitPatch - ( - static_cast(patch), td - ); + p.hitPatch(patch, td); } else { @@ -434,6 +433,18 @@ void Foam::Particle::transformProperties(const vector&) {} + +template +template +void Foam::Particle::hitPatch +( + const polyPatch&, + TrackData&, + const label +) +{} + + template template void Foam::Particle::hitWedgePatch diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index 8035188a65..371c1700c3 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 + void hitPatch + ( + const polyPatch&, + TrackData& td, + const label patchI + ); + //- Overridable function to handle the particle hitting a wedgePatch template void hitWedgePatch diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index cb18c182ae..4f9f0636dd 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::move(TrackData& td) } +template +template +void Foam::KinematicParcel::hitPatch +( + const polyPatch& pp, + TrackData& td, + const label patchI +) +{ + ParcelType& p = static_cast(*this); + td.cloud().postProcessing().postPatch(p, patchI); +} + + +template +void Foam::KinematicParcel::hitPatch +( + const polyPatch& pp, + int& td, + const label patchI +) +{} + + template template void Foam::KinematicParcel::hitProcessorPatch diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index b448958e79..951a42c39c 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 + 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