From e28694fe1529743bc7fb476f03434161c2921954 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Fri, 9 Aug 2013 12:40:31 +0100
Subject: [PATCH] BUG: LiquidEvaporation[Boil] - immediately evaporate mass if
 reached critical condition - mantis #950

---
 .../LiquidEvaporation/LiquidEvaporation.C     | 60 ++++++++++++++++++-
 .../LiquidEvaporation/LiquidEvaporation.H     |  5 +-
 .../LiquidEvaporationBoil.C                   | 60 +++++++++++++++++--
 .../LiquidEvaporationBoil.H                   |  5 +-
 4 files changed, 121 insertions(+), 9 deletions(-)

diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C
index 8bd8a4d1400..61dfb6c6ee6 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C
@@ -151,6 +151,44 @@ void Foam::LiquidEvaporation<CloudType>::calculate
     scalarField& dMassPC
 ) const
 {
+    // liquid volume fraction
+    const scalarField X(liquids_.X(Yl));
+
+    // immediately evaporate mass that has reached critical condition
+    if (mag(T - liquids_.Tc(X)) < SMALL)
+    {
+        if (debug)
+        {
+            WarningIn
+            (
+                "void Foam::LiquidEvaporation<CloudType>::calculate"
+                "("
+                    "const scalar, "
+                    "const label, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalarField&, "
+                    "scalarField&"
+                ") const"
+            )   << "Parcel reached critical conditions: "
+                << "evaporating all avaliable mass" << endl;
+        }
+
+        forAll(activeLiquids_, i)
+        {
+            const label lid = liqToLiqMap_[i];
+            dMassPC[lid] = GREAT;
+        }
+
+        return;
+    }
+
     // construct carrier phase species volume fractions for cell, cellI
     const scalarField Xc(calcXc(cellI));
 
@@ -242,9 +280,27 @@ Foam::scalar Foam::LiquidEvaporation<CloudType>::dh
 
 
 template<class CloudType>
-Foam::scalar Foam::LiquidEvaporation<CloudType>::TMax(const scalar pIn) const
+Foam::scalar Foam::LiquidEvaporation<CloudType>::Tvap
+(
+    const scalarField& Y
+) const
+{
+    const scalarField X(liquids_.X(Y));
+
+    return liquids_.Tpt(X);
+}
+
+
+template<class CloudType>
+Foam::scalar Foam::LiquidEvaporation<CloudType>::TMax
+(
+    const scalar p,
+    const scalarField& Y
+) const
 {
-    return liquids_.TMax(pIn);
+    const scalarField X(liquids_.X(Y));
+
+    return liquids_.pvInvert(p, X);
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H
index fb2e2cdd9c8..3d5334cd884 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H
@@ -131,8 +131,11 @@ public:
             const scalar T
         ) const;
 
+        //- Return vapourisation temperature
+        virtual scalar Tvap(const scalarField& Y) const;
+
         //- Return maximum/limiting temperature
-        virtual scalar TMax(const scalar pIn) const;
+        virtual scalar TMax(const scalar p, const scalarField& Y) const;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C
index 6436d396053..d78d6b110b4 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C
@@ -151,18 +151,53 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate
     scalarField& dMassPC
 ) const
 {
-    // construct carrier phase species volume fractions for cell, cellI
-    const scalarField XcMix(calcXc(cellI));
-
     // liquid volume fraction
     const scalarField X(liquids_.X(Yl));
 
+    // immediately evaporate mass that has reached critical condition
+    if (mag(T - liquids_.Tc(X)) < SMALL)
+    {
+        if (debug)
+        {
+            WarningIn
+            (
+                "void Foam::LiquidEvaporationBoil<CloudType>::calculate"
+                "("
+                    "const scalar, "
+                    "const label, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalar, "
+                    "const scalarField&, "
+                    "scalarField&"
+                ") const"
+            )   << "Parcel reached critical conditions: "
+                << "evaporating all avaliable mass" << endl;
+        }
+
+        forAll(activeLiquids_, i)
+        {
+            const label lid = liqToLiqMap_[i];
+            dMassPC[lid] = GREAT;
+        }
+
+        return;
+    }
+
     // droplet surface pressure assumed to surface vapour pressure
     scalar ps = liquids_.pv(pc, Ts, X);
 
     // vapour density at droplet surface [kg/m3]
     scalar rhos = ps*liquids_.W(X)/(specie::RR*Ts);
 
+    // construct carrier phase species volume fractions for cell, cellI
+    const scalarField XcMix(calcXc(cellI));
+
     // carrier thermo properties
     scalar Hsc = 0.0;
     scalar Hc = 0.0;
@@ -340,13 +375,28 @@ Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::dh
 }
 
 
+template<class CloudType>
+Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::Tvap
+(
+    const scalarField& Y
+) const
+{
+    const scalarField X(liquids_.X(Y));
+
+    return liquids_.Tpt(X);
+}
+
+
 template<class CloudType>
 Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::TMax
 (
-    const scalar pIn
+    const scalar p,
+    const scalarField& Y
 ) const
 {
-    return liquids_.TMax(pIn);
+    const scalarField X(liquids_.X(Y));
+
+    return liquids_.pvInvert(p, X);
 }
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H
index 2d11f55f320..f3b532dff58 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H
@@ -141,8 +141,11 @@ public:
             const scalar T
         ) const;
 
+        //- Return vapourisation temperature
+        virtual scalar Tvap(const scalarField& Y) const;
+
         //- Return maximum/limiting temperature
-        virtual scalar TMax(const scalar pIn) const;
+        virtual scalar TMax(const scalar p, const scalarField& Y) const;
 };
 
 
-- 
GitLab