From 1814a83f01ac833f0a28e537579e6674f8cd3df3 Mon Sep 17 00:00:00 2001
From: Armin Wehrfritz <armin.wehrfritz@aalto.fi>
Date: Tue, 13 Aug 2013 21:28:36 +0300
Subject: [PATCH] Add subcycles to Lagrangian

---
 .../Templates/KinematicCloud/cloudSolution/cloudSolution.C    |    9 +++++++++
 .../Templates/KinematicCloud/cloudSolution/cloudSolution.H    |    7 +++++++
 .../Templates/KinematicCloud/cloudSolution/cloudSolutionI.H   |    6 ++++++
 .../parcels/Templates/KinematicParcel/KinematicParcel.C       |    2 +-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
index fd7bf31..70da8f4 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C
@@ -38,6 +38,7 @@ Foam::cloudSolution::cloudSolution
     dict_(dict),
     active_(dict.lookup("active")),
     transient_(false),
+    subCycles_(1),
     calcFrequency_(1),
     maxCo_(0.3),
     iter_(1),
@@ -64,6 +65,7 @@ Foam::cloudSolution::cloudSolution
     dict_(cs.dict_),
     active_(cs.active_),
     transient_(cs.transient_),
+    subCycles_(cs.subCycles_),
     calcFrequency_(cs.calcFrequency_),
     maxCo_(cs.maxCo_),
     iter_(cs.iter_),
@@ -85,6 +87,7 @@ Foam::cloudSolution::cloudSolution
     dict_(dictionary::null),
     active_(false),
     transient_(false),
+    subCycles_(1),
     calcFrequency_(0),
     maxCo_(GREAT),
     iter_(0),
@@ -123,6 +126,12 @@ void Foam::cloudSolution::read()
                 >> resetSourcesOnStartup_;
         }
     }
+    else
+    {
+        dict_.lookup("subCycles") >> subCycles_;
+        subCycles_ = max(subCycles_,1);
+//         dict_.lookupOrDefault<int>("subCycles",1) >> subCycles_;
+    }
 
     if (coupled_)
     {
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
index e155abc..eac387b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H
@@ -65,6 +65,10 @@ class cloudSolution
         //- Transient flag
         Switch transient_;
 
+        //- Sub cycles - cloud steps per carrier step
+        //  NOTE: Transient operation only
+        label subCycles_;
+
         //- Calculation frequency - carrier steps per cloud step
         //  NOTE: Steady operation only
         label calcFrequency_;
@@ -156,6 +160,9 @@ public:
             //- Return const access to the steady flag
             inline const Switch steadyState() const;
 
+            //- Return const access to the sub cycles
+            inline const label subCycles() const;
+
             //- Return const access to the calculation frequency
             inline label calcFrequency() const;
 
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H
index 6280b97..64672e2 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H
@@ -71,6 +71,12 @@ inline const Foam::Switch Foam::cloudSolution::steadyState() const
 }
 
 
+inline const Foam::label Foam::cloudSolution::subCycles() const
+{
+    return subCycles_;
+}
+
+
 inline Foam::label Foam::cloudSolution::calcFrequency() const
 {
     return calcFrequency_;
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index 7ec52b1..cbd3417 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -275,7 +275,7 @@ bool Foam::KinematicParcel<ParcelType>::move
     const scalar maxCo = td.cloud().solution().maxCo();
 
     scalar tEnd = (1.0 - p.stepFraction())*trackTime;
-    const scalar dtMax = tEnd;
+    const scalar dtMax = tEnd/td.cloud().solution().subCycles();
 
     while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
     {
-- 
1.7.10.4

