diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index 5717e0c76d6ef84b0d1a9eef37c15357cff4015b..99c00f07e5535a521b4e4030b0cadb79b1201348 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -334,11 +334,18 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace position_ = endPosition; } + label origFacei = facei_; label patchi = patch(facei_); - const polyPatch& patch = mesh.boundaryMesh()[patchi]; - if (!p.hitPatch(patch, td, patchi)) + if (!p.hitPatch(mesh.boundaryMesh()[patchi], td, patchi)) { + // Did patch interaction model switch patches? + if (facei_ != origFacei) + { + patchi = patch(facei_); + } + const polyPatch& patch = mesh.boundaryMesh()[patchi]; + if (isA<wedgePolyPatch>(patch)) { p.hitWedgePatch diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index 077a6d4b8eb6135f4d5989000c2d1088451bc483..39c21de0767a9e48a023f33e695fd5b9d5bcb99a 100644 --- a/src/lagrangian/basic/Particle/Particle.H +++ b/src/lagrangian/basic/Particle/Particle.H @@ -378,6 +378,9 @@ public: //- Return current cell particle is in inline label cell() const; + //- Return current face particle is on otherwise -1 + inline label& face(); + //- Return current face particle is on otherwise -1 inline label face() const; diff --git a/src/lagrangian/basic/Particle/ParticleI.H b/src/lagrangian/basic/Particle/ParticleI.H index d3098325ebdd40f0d04799efd62214244696fabd..43fd1d380656ab04453a6a494d47365843def290 100644 --- a/src/lagrangian/basic/Particle/ParticleI.H +++ b/src/lagrangian/basic/Particle/ParticleI.H @@ -325,6 +325,13 @@ inline Foam::label Foam::Particle<ParticleType>::face() const } +template<class ParticleType> +inline Foam::label& Foam::Particle<ParticleType>::face() +{ + return facei_; +} + + template<class ParticleType> inline bool Foam::Particle<ParticleType>::onBoundary() const {