From abb9c57ffbcbefaab6e2564a84d1a2f569c283f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Jasi=C5=84ski?= <daniel.jasinski@gmail.com>
Date: Wed, 2 Sep 2015 13:58:42 +0200
Subject: [PATCH] chemkinReader imbalance tolerance

---
 .../chemistryReaders/chemkinReader/chemkinReader.C     | 18 ++++++++++++++----
 .../chemistryReaders/chemkinReader/chemkinReader.H     |  4 ++++
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
index 701ce73..907a612 100755
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
@@ -52,6 +52,8 @@ namespace Foam
 
 /* * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * */
 
+const Foam::scalar Foam::chemkinReader::defImbalanceTol_ = sqrt(SMALL);
+
 const char* Foam::chemkinReader::reactionTypeNames[4] =
 {
     "irreversible",
@@ -753,10 +755,11 @@ void Foam::chemkinReader::addReaction
 
     forAll(nAtoms, i)
     {
-        if (mag(nAtoms[i]) > SMALL)
+        if (mag(nAtoms[i]) > imbalanceTol_)
         {
             FatalErrorIn("chemkinReader::addReaction")
-                << "Elemental imbalance in " << elementNames_[i]
+                << "Elemental imbalance of " << mag(nAtoms[i])
+                << " in " << elementNames_[i]
                 << " in reaction" << nl
                 << reactions_.last() << nl
                 << " on line " << lineNo_-1
@@ -839,7 +842,8 @@ Foam::chemkinReader::chemkinReader
     specieNames_(10),
     speciesTable_(species),
     reactions_(speciesTable_, speciesThermo_),
-    newFormat_(newFormat)
+    newFormat_(newFormat),
+    imbalanceTol_(defImbalanceTol_)
 {
     read(CHEMKINFileName, thermoFileName);
 }
@@ -855,13 +859,19 @@ Foam::chemkinReader::chemkinReader
     specieNames_(10),
     speciesTable_(species),
     reactions_(speciesTable_, speciesThermo_),
-    newFormat_(thermoDict.lookupOrDefault("newFormat", false))
+    newFormat_(thermoDict.lookupOrDefault("newFormat", false)),
+    imbalanceTol_(defImbalanceTol_)
 {
     if (newFormat_)
     {
         Info<< "Reading CHEMKIN thermo data in new file format" << endl;
     }
 
+    if (thermoDict.found("imbalanceTolerance"))
+    {
+        imbalanceTol_ = readScalar(thermoDict.lookup("imbalanceTolerance"));
+    }
+
     fileName chemkinFile(fileName(thermoDict.lookup("CHEMKINFile")).expand());
 
     fileName thermoFile = fileName::null;
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
index ad1c50a..9f509ee 100755
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
@@ -211,6 +211,10 @@ private:
         //- Flag to indicate that file is in new format
         Switch newFormat_;
 
+        //- Tolerance for element imbalance in a reaction
+        static const scalar defImbalanceTol_;
+        scalar imbalanceTol_;
+
 
     // Private Member Functions
 
-- 
1.9.1

