From 490f1ca5f2632469251d9bba9b693fd5dd4718c9 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Fri, 27 May 2011 11:22:20 +0100
Subject: [PATCH] ENH: Split parcel initialisation into 2 parts around
 injection

---
 .../Templates/KinematicCloud/KinematicCloud.C | 12 ++++++-
 .../Templates/KinematicCloud/KinematicCloud.H |  8 +++++
 .../Templates/ReactingCloud/ReactingCloud.C   | 22 ++++++++----
 .../Templates/ReactingCloud/ReactingCloud.H   |  8 +++++
 .../ReactingMultiphaseCloud.C                 | 21 +++++++----
 .../ReactingMultiphaseCloud.H                 |  8 +++++
 .../Templates/ThermoCloud/ThermoCloud.C       | 16 +++++++--
 .../Templates/ThermoCloud/ThermoCloud.H       |  8 +++++
 .../InjectionModel/InjectionModel.C           | 14 ++++++--
 .../clouds/Templates/SprayCloud/SprayCloud.C  | 36 ++++++++++++-------
 .../clouds/Templates/SprayCloud/SprayCloud.H  |  8 +++++
 11 files changed, 128 insertions(+), 33 deletions(-)

diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
index 4bee6a853a7..516c62d4820 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
@@ -499,7 +499,7 @@ bool Foam::KinematicCloud<CloudType>::hasWallImpactDistance() const
 
 
 template<class CloudType>
-void Foam::KinematicCloud<CloudType>::checkParcelProperties
+void Foam::KinematicCloud<CloudType>::setParcelThermoProperties
 (
     parcelType& parcel,
     const scalar lagrangianDt,
@@ -510,7 +510,17 @@ void Foam::KinematicCloud<CloudType>::checkParcelProperties
     {
         parcel.rho() = constProps_.rho0();
     }
+}
+
 
+template<class CloudType>
+void Foam::KinematicCloud<CloudType>::checkParcelProperties
+(
+    parcelType& parcel,
+    const scalar lagrangianDt,
+    const bool fullyDescribed
+)
+{
     const scalar carrierDt = mesh_.time().deltaTValue();
     parcel.stepFraction() = (carrierDt - lagrangianDt)/carrierDt;
     parcel.typeId() = constProps_.parcelTypeId();
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index 2bf5f06066d..4b034d5f086 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -486,6 +486,14 @@ public:
 
         // Cloud evolution functions
 
+            //- Set parcel thermo properties
+            void setParcelThermoProperties
+            (
+                parcelType& parcel,
+                const scalar lagrangianDt,
+                const bool fullyDescribed
+            );
+
             //- Check parcel properties
             void checkParcelProperties
             (
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
index c536cd84d67..b30cf742302 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
@@ -224,22 +224,18 @@ Foam::ReactingCloud<CloudType>::~ReactingCloud()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
-void Foam::ReactingCloud<CloudType>::checkParcelProperties
+void Foam::ReactingCloud<CloudType>::setParcelThermoProperties
 (
     parcelType& parcel,
     const scalar lagrangianDt,
     const bool fullyDescribed
 )
 {
-    CloudType::checkParcelProperties
-    (
-        parcel,
-        lagrangianDt,
-        fullyDescribed
-    );
+    CloudType::setParcelThermoProperties(parcel, lagrangianDt, fullyDescribed);
 
     if (!fullyDescribed)
     {
+        parcel.pc() = this->thermo().thermo().p()[parcel.cell()];
         parcel.Y() = composition().YMixture0();
     }
     else
@@ -257,6 +253,18 @@ void Foam::ReactingCloud<CloudType>::checkParcelProperties
 }
 
 
+template<class CloudType>
+void Foam::ReactingCloud<CloudType>::checkParcelProperties
+(
+    parcelType& parcel,
+    const scalar lagrangianDt,
+    const bool fullyDescribed
+)
+{
+    CloudType::checkParcelProperties(parcel, lagrangianDt, fullyDescribed);
+}
+
+
 template<class CloudType>
 void Foam::ReactingCloud<CloudType>::storeState()
 {
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
index 324636cca53..c8a6295a320 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
@@ -267,6 +267,14 @@ public:
 
         // Cloud evolution functions
 
+            //- Set parcel thermo properties
+            void setParcelThermoProperties
+            (
+                parcelType& parcel,
+                const scalar lagrangianDt,
+                const bool fullyDescribed
+            );
+
             //- Check parcel properties
             void checkParcelProperties
             (
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
index 0290eacb7c2..45f94d89280 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C
@@ -155,19 +155,14 @@ Foam::ReactingMultiphaseCloud<CloudType>::~ReactingMultiphaseCloud()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
-void Foam::ReactingMultiphaseCloud<CloudType>::checkParcelProperties
+void Foam::ReactingMultiphaseCloud<CloudType>::setParcelThermoProperties
 (
     parcelType& parcel,
     const scalar lagrangianDt,
     const bool fullyDescribed
 )
 {
-    CloudType::checkParcelProperties
-    (
-        parcel,
-        lagrangianDt,
-        fullyDescribed
-    );
+    CloudType::setParcelThermoProperties(parcel, lagrangianDt, fullyDescribed);
 
     label idGas = this->composition().idGas();
     label idLiquid = this->composition().idLiquid();
@@ -203,6 +198,18 @@ void Foam::ReactingMultiphaseCloud<CloudType>::checkParcelProperties
 }
 
 
+template<class CloudType>
+void Foam::ReactingMultiphaseCloud<CloudType>::checkParcelProperties
+(
+    parcelType& parcel,
+    const scalar lagrangianDt,
+    const bool fullyDescribed
+)
+{
+    CloudType::checkParcelProperties(parcel, lagrangianDt, fullyDescribed);
+}
+
+
 template<class CloudType>
 void Foam::ReactingMultiphaseCloud<CloudType>::storeState()
 {
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H
index 59e0cc0707d..6e9e0ee77ac 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H
@@ -240,6 +240,14 @@ public:
 
         // Cloud evolution functions
 
+            //- Set parcel thermo properties
+            void setParcelThermoProperties
+            (
+                parcelType& parcel,
+                const scalar lagrangianDt,
+                const bool fullyDescribed
+            );
+
             //- Check parcel properties
             void checkParcelProperties
             (
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index 60a4a4c9563..4615938187f 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -234,14 +234,14 @@ Foam::ThermoCloud<CloudType>::~ThermoCloud()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
-void Foam::ThermoCloud<CloudType>::checkParcelProperties
+void Foam::ThermoCloud<CloudType>::setParcelThermoProperties
 (
     parcelType& parcel,
     const scalar lagrangianDt,
     const bool fullyDescribed
 )
 {
-    CloudType::checkParcelProperties(parcel, lagrangianDt, fullyDescribed);
+    CloudType::setParcelThermoProperties(parcel, lagrangianDt, fullyDescribed);
 
     if (!fullyDescribed)
     {
@@ -251,6 +251,18 @@ void Foam::ThermoCloud<CloudType>::checkParcelProperties
 }
 
 
+template<class CloudType>
+void Foam::ThermoCloud<CloudType>::checkParcelProperties
+(
+    parcelType& parcel,
+    const scalar lagrangianDt,
+    const bool fullyDescribed
+)
+{
+    CloudType::checkParcelProperties(parcel, lagrangianDt, fullyDescribed);
+}
+
+
 template<class CloudType>
 void Foam::ThermoCloud<CloudType>::storeState()
 {
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
index bdcfcf46d0d..f51ce04c8c7 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
@@ -281,6 +281,14 @@ public:
 
         // Cloud evolution functions
 
+            //- Set parcel thermo properties
+            void setParcelThermoProperties
+            (
+                parcelType& parcel,
+                const scalar lagrangianDt,
+                const bool fullyDescribed
+            );
+
             //- Check parcel properties
             void checkParcelProperties
             (
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index 08cd60c9d8f..559556e8b11 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -530,6 +530,7 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
     const scalar time = this->owner().db().time().value();
     const scalar trackTime = this->owner().solution().trackTime();
     const polyMesh& mesh = this->owner().mesh();
+    typename TrackData::cloudType& cloud = td.cloud();
 
     // Prepare for next time step
     label parcelsAdded = 0;
@@ -592,11 +593,14 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
                 );
 
                 // Check/set new parcel properties
-                td.cloud().checkParcelProperties(*pPtr, dt, fullyDescribed());
+                cloud.setParcelThermoProperties(*pPtr, dt, fullyDescribed());
 
                 // Assign new parcel properties in injection model
                 setProperties(parcelI, newParcels, timeInj, *pPtr);
 
+                // Check/set new parcel properties
+                cloud.checkParcelProperties(*pPtr, dt, fullyDescribed());
+
                 // Apply correction to velocity for 2-D cases
                 meshTools::constrainDirection
                 (
@@ -647,6 +651,7 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
     }
 
     const polyMesh& mesh = this->owner().mesh();
+    typename TrackData::cloudType& cloud = td.cloud();
 
     // Reset counters
     time0_ = 0.0;
@@ -696,12 +701,15 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
                 tetPtI
             );
 
-            // Check new parcel properties
-            td.cloud().checkParcelProperties(*pPtr, 0.0, fullyDescribed());
+            // Check/set new parcel properties
+            cloud.setParcelThermoProperties(*pPtr, 0.0, fullyDescribed());
 
             // Assign new parcel properties in injection model
             setProperties(parcelI, newParcels, 0.0, *pPtr);
 
+            // Check/set new parcel properties
+            cloud.checkParcelProperties(*pPtr, 0.0, fullyDescribed());
+
             // Apply correction to velocity for 2-D cases
             meshTools::constrainDirection
             (
diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C
index fa1eba5b90a..6cb30fed269 100644
--- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C
+++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C
@@ -158,28 +158,38 @@ Foam::SprayCloud<CloudType>::~SprayCloud()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
-void Foam::SprayCloud<CloudType>::checkParcelProperties
+void Foam::SprayCloud<CloudType>::setParcelThermoProperties
 (
     parcelType& parcel,
     const scalar lagrangianDt,
     const bool fullyDescribed
 )
 {
-    CloudType::checkParcelProperties
-    (
-        parcel,
-        lagrangianDt,
-        fullyDescribed
-    );
+    CloudType::setParcelThermoProperties(parcel, lagrangianDt, fullyDescribed);
 
-    const liquidMixtureProperties& liqMix = this->composition().liquids();
+    if (!fullyDescribed)
+    {
+        const liquidMixtureProperties& liqMix = this->composition().liquids();
+
+        const scalarField& Y(parcel.Y());
+        scalarField X(liqMix.X(Y));
+
+        // override rho and Cp from constantProperties
+        parcel.Cp() = liqMix.Cp(parcel.pc(), parcel.T(), X);
+        parcel.rho() = liqMix.rho(parcel.pc(), parcel.T(), X);
+    }
+}
 
-    const scalarField& Y(parcel.Y());
-    scalarField X(liqMix.X(Y));
 
-    // override rho and Cp from constantProperties
-    parcel.Cp() = liqMix.Cp(parcel.pc(), parcel.T(), X);
-    parcel.rho() = liqMix.rho(parcel.pc(), parcel.T(), X);
+template<class CloudType>
+void Foam::SprayCloud<CloudType>::checkParcelProperties
+(
+    parcelType& parcel,
+    const scalar lagrangianDt,
+    const bool fullyDescribed
+)
+{
+    CloudType::checkParcelProperties(parcel, lagrangianDt, fullyDescribed);
 
     // store the injection position and initial drop size
     parcel.position0() = parcel.position();
diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H
index 21fa515e7b6..92f9210c627 100644
--- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H
+++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H
@@ -209,6 +209,14 @@ public:
 
         // Cloud evolution functions
 
+            //- Set parcel thermo properties
+            void setParcelThermoProperties
+            (
+                parcelType& parcel,
+                const scalar lagrangianDt,
+                const bool fullyDescribed
+            );
+
             //- Check parcel properties
             void checkParcelProperties
             (
-- 
GitLab