From 6f1b95f833eaf1ae08b781c96845143ab62bf2c2 Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Sun, 10 May 2015 12:31:17 +0100
Subject: [PATCH] chemistryModel: Added optional Treact to reduce the time of
 chemistry evaluation Treact: Temperature below which the reaction rates are
 assumed 0

---
 .../chemistryModel/chemistryModel.C           | 50 ++++++++++++-------
 .../chemistryModel/chemistryModel.H           |  9 ++++
 .../chemistryModel/chemistryModelI.H          | 16 ++++++
 3 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.C
index 4347fcf6424..8b2c308d265 100644
--- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.C
+++ b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.C
@@ -51,7 +51,7 @@ Foam::chemistryModel<CompType, ThermoType>::chemistryModel
 
     nSpecie_(Y_.size()),
     nReaction_(reactions_.size()),
-
+    Treact_(CompType::template lookupOrDefault<scalar>("Treact", 0.0)),
     RR_(nSpecie_)
 {
     // create the fields for the chemistry sources
@@ -796,32 +796,44 @@ Foam::scalar Foam::chemistryModel<CompType, ThermoType>::solve
 
     forAll(rho, celli)
     {
-        const scalar rhoi = rho[celli];
-        scalar pi = p[celli];
         scalar Ti = T[celli];
 
-        for (label i=0; i<nSpecie_; i++)
+        if (Ti > Treact_)
         {
-            c[i] = rhoi*Y_[i][celli]/specieThermo_[i].W();
-            c0[i] = c[i];
-        }
+            const scalar rhoi = rho[celli];
+            scalar pi = p[celli];
 
-        // Initialise time progress
-        scalar timeLeft = deltaT[celli];
+            for (label i=0; i<nSpecie_; i++)
+            {
+                c[i] = rhoi*Y_[i][celli]/specieThermo_[i].W();
+                c0[i] = c[i];
+            }
 
-        // Calculate the chemical source terms
-        while (timeLeft > SMALL)
-        {
-            scalar dt = timeLeft;
-            this->solve(c, Ti, pi, dt, this->deltaTChem_[celli]);
-            timeLeft -= dt;
-        }
+            // Initialise time progress
+            scalar timeLeft = deltaT[celli];
+
+            // Calculate the chemical source terms
+            while (timeLeft > SMALL)
+            {
+                scalar dt = timeLeft;
+                this->solve(c, Ti, pi, dt, this->deltaTChem_[celli]);
+                timeLeft -= dt;
+            }
 
-        deltaTMin = min(this->deltaTChem_[celli], deltaTMin);
+            deltaTMin = min(this->deltaTChem_[celli], deltaTMin);
 
-        for (label i=0; i<nSpecie_; i++)
+            for (label i=0; i<nSpecie_; i++)
+            {
+                RR_[i][celli] =
+                    (c[i] - c0[i])*specieThermo_[i].W()/deltaT[celli];
+            }
+        }
+        else
         {
-            RR_[i][celli] = (c[i] - c0[i])*specieThermo_[i].W()/deltaT[celli];
+            for (label i=0; i<nSpecie_; i++)
+            {
+                RR_[i][celli] = 0;
+            }
         }
     }
 
diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.H
index ee5482ecde7..dfcea6c611f 100644
--- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.H
+++ b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModel.H
@@ -97,6 +97,9 @@ protected:
         //- Number of reactions
         label nReaction_;
 
+        //- Temperature below which the reaction rates are assumed 0
+        scalar Treact_;
+
         //- List of reaction rate per specie [kg/m3/s]
         PtrList<DimensionedField<scalar, volMesh> > RR_;
 
@@ -138,6 +141,12 @@ public:
         //- The number of reactions
         inline label nReaction() const;
 
+        //- Temperature below which the reaction rates are assumed 0
+        inline scalar Treact() const;
+
+        //- Temperature below which the reaction rates are assumed 0
+        inline scalar& Treact();
+
         //- dc/dt = omega, rate of change in concentration, for each species
         virtual tmp<scalarField> omega
         (
diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModelI.H b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModelI.H
index c009a11e469..9a97c8a3901 100644
--- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModelI.H
+++ b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel/chemistryModelI.H
@@ -68,6 +68,22 @@ Foam::chemistryModel<CompType, ThermoType>::nReaction() const
 }
 
 
+template<class CompType, class ThermoType>
+inline Foam::scalar
+Foam::chemistryModel<CompType, ThermoType>::Treact() const
+{
+    return Treact_;
+}
+
+
+template<class CompType, class ThermoType>
+inline Foam::scalar&
+Foam::chemistryModel<CompType, ThermoType>::Treact()
+{
+    return Treact_;
+}
+
+
 template<class CompType, class ThermoType>
 inline const Foam::DimensionedField<Foam::scalar, Foam::volMesh>&
 Foam::chemistryModel<CompType, ThermoType>::RR
-- 
GitLab