diff --git a/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C b/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C index c5c4e56234..cdc5ec680c 100644 --- a/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C +++ b/src/lagrangian/DSMC/parcels/Templates/DSMCParcel/DSMCParcel.C @@ -53,17 +53,17 @@ bool Foam::DSMCParcel::move while (td.keepParticle && !td.switchProcessor && p.stepFraction() < 1) { - // Apply correction to position for reduced-D cases - p.constrainToMeshCentre(); - Utracking = U_; // Apply correction to velocity to constrain tracking for // reduced-D cases meshTools::constrainDirection(mesh, mesh.solutionD(), Utracking); + // Deviation from the mesh centre for reduced-D cases + const vector d = p.deviationFromMeshCentre(); + const scalar f = 1 - p.stepFraction(); - p.trackToAndHitFace(f*trackTime*Utracking, f, cloud, td); + p.trackToAndHitFace(f*trackTime*Utracking - d, f, cloud, td); } return td.keepParticle; diff --git a/src/lagrangian/basic/particle/particle.C b/src/lagrangian/basic/particle/particle.C index e52ab0ba19..904f4c5723 100644 --- a/src/lagrangian/basic/particle/particle.C +++ b/src/lagrangian/basic/particle/particle.C @@ -984,25 +984,17 @@ Foam::scalar Foam::particle::trackToTri } -void Foam::particle::constrainToMeshCentre() +Foam::vector Foam::particle::deviationFromMeshCentre() const { - const Vector