From 00fe187f77a5c13aecceb887082ed996f69a9a41 Mon Sep 17 00:00:00 2001
From: graham <g.macpherson@opencfd.co.uk>
Date: Sun, 11 Oct 2009 14:17:45 +0100
Subject: [PATCH] Adding constraint of tracking motion in reduced dimension
 cases.  Not altering the dsmc particle's velocity - that was the problem
 before, as the tracking modifies it on patch collision.  Creating a local
 velocity used only for the tracking destination.

---
 src/lagrangian/dsmc/Make/options              |  6 ++++--
 .../parcels/Templates/DsmcParcel/DsmcParcel.C | 19 +++++++++++++++++--
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/lagrangian/dsmc/Make/options b/src/lagrangian/dsmc/Make/options
index 15874b7b55a..55865dfabcd 100644
--- a/src/lagrangian/dsmc/Make/options
+++ b/src/lagrangian/dsmc/Make/options
@@ -1,7 +1,9 @@
 EXE_INC = \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/lagrangian/basic/lnInclude
+    -I$(LIB_SRC)/lagrangian/basic/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude
 
 LIB_LIBS = \
     -llagrangian \
-    -lfiniteVolume
+    -lfiniteVolume \
+    -lmeshTools
diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C
index ffd7c67d428..9e1c10f51b6 100644
--- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C
+++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C
@@ -25,6 +25,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "DsmcParcel.H"
+#include "meshTools.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
@@ -47,12 +48,27 @@ bool Foam::DsmcParcel<ParcelType>::move
     scalar tEnd = (1.0 - p.stepFraction())*deltaT;
     const scalar dtMax = tEnd;
 
+    // For reduced-D cases, the velocity used to track needs to be
+    // constrained, but the actual U_ of the parcel must not be
+    // altered or used, as it is altered by patch interactions an
+    // needs to retain its 3D value for collision purposes.
+    vector Utracking = U_;
+
     while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
     {
+        // Apply correction to position for reduced-D cases
+        meshTools::constrainToMeshCentre(mesh, p.position());
+
+        Utracking = U_;
+
+        // Apply correction to velocity to constrain tracking for
+        // reduced-D cases
+        meshTools::constrainDirection(mesh, mesh.solutionD(), Utracking);
+
         // Set the Lagrangian time-step
         scalar dt = min(dtMax, tEnd);
 
-        dt *= p.trackToFace(p.position() + dt*U_, td);
+        dt *= p.trackToFace(p.position() + dt*Utracking, td);
 
         tEnd -= dt;
 
@@ -256,4 +272,3 @@ void Foam::DsmcParcel<ParcelType>::transformProperties
 #include "DsmcParcelIO.C"
 
 // ************************************************************************* //
-
-- 
GitLab