From 86b9ed5348c88bc5862f14cb74c81719000de335 Mon Sep 17 00:00:00 2001
From: sergio <sergio>
Date: Tue, 15 Jan 2013 10:31:42 +0000
Subject: [PATCH] BUG: Correcting writing of solidReaction and reaction

---
 .../Reactions/solidReaction/solidReaction.C   | 76 ++++++++++++++++-
 .../Reactions/solidReaction/solidReaction.H   |  9 ++
 .../Reactions/solidReaction/solidReactionI.H  |  3 +-
 .../reaction/Reactions/Reaction/Reaction.C    | 85 ++++++++-----------
 .../reaction/Reactions/Reaction/Reaction.H    | 12 ++-
 .../reaction/Reactions/Reaction/ReactionI.H   |  4 +-
 6 files changed, 134 insertions(+), 55 deletions(-)

diff --git a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.C b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.C
index ead9b263fc0..99bb98acb4f 100644
--- a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.C
+++ b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.C
@@ -137,8 +137,82 @@ gasSpecies() const
 template<class ReactionThermo>
 void Foam::solidReaction<ReactionThermo>::write(Ostream& os) const
 {
-    Reaction<ReactionThermo>::write(os);
+    OStringStream reaction;
+    os.writeKeyword("reaction") << solidReactionStr(reaction)
+        << token::END_STATEMENT << nl;
 }
 
 
+template<class ReactionThermo>
+Foam::string Foam::solidReaction<ReactionThermo>::solidReactionStr
+(
+    OStringStream& reaction
+) const
+{
+    this->reactionStrLeft(reaction);
+    reaction << " + ";
+    solidReactionStrLeft(reaction);
+    reaction << " = ";
+    this->reactionStrRight(reaction);
+    reaction << " + ";
+    solidReactionStrRight(reaction);
+    return reaction.str();
+
+}
+
+
+template<class ReactionThermo>
+void Foam::solidReaction<ReactionThermo>::solidReactionStrLeft
+(
+    OStringStream& reaction
+) const
+{
+    for (label i = 0; i < glhs().size(); ++i)
+    {
+        reaction << " + ";
+
+        if (i > 0)
+        {
+            reaction << " + ";
+        }
+        if (mag(glhs()[i].stoichCoeff - 1) > SMALL)
+        {
+            reaction << glhs()[i].stoichCoeff;
+        }
+        reaction << gasSpecies()[glhs()[i].index];
+        if (mag(glhs()[i].exponent - glhs()[i].stoichCoeff) > SMALL)
+        {
+            reaction << "^" << glhs()[i].exponent;
+        }
+    }
+}
+
+
+template<class ReactionThermo>
+void Foam::solidReaction<ReactionThermo>::solidReactionStrRight
+(
+    OStringStream& reaction
+) const
+{
+
+    for (label i = 0; i < grhs().size(); ++i)
+    {
+        reaction << " + ";
+
+        if (i > 0)
+        {
+            reaction << " + ";
+        }
+        if (mag(grhs()[i].stoichCoeff - 1) > SMALL)
+        {
+            reaction << grhs()[i].stoichCoeff;
+        }
+        reaction << gasSpecies()[grhs()[i].index];
+        if (mag(grhs()[i].exponent - grhs()[i].stoichCoeff) > SMALL)
+        {
+            reaction << "^" << grhs()[i].exponent;
+        }
+    }
+}
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.H b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.H
index 1bc4a82243c..cc9eb6a7b7c 100644
--- a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.H
+++ b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReaction.H
@@ -81,6 +81,15 @@ private:
     // Private Member Functions
 
 
+        //- Return string representation of reaction
+        string solidReactionStr(OStringStream&) const;
+
+        //- Return string representation of the left of the reaction
+        void solidReactionStrLeft(OStringStream&) const;
+
+        //- Return string representation of the right of the reaction
+        void solidReactionStrRight(OStringStream&) const;
+
         //- Disallow default bitwise assignment
         void operator=(const solidReaction&);
 
diff --git a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReactionI.H b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReactionI.H
index 534bb66fa7d..9bad3ba7784 100644
--- a/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReactionI.H
+++ b/src/thermophysicalModels/solidSpecie/reaction/Reactions/solidReaction/solidReactionI.H
@@ -39,7 +39,8 @@ inline Ostream& operator<<
     const solidReaction<ReactionThermo>& r
 )
 {
-    r.write(os);
+    OStringStream reaction;
+    os << r.solidReactionStr(reaction)<< token::END_STATEMENT <<nl;
     return os;
 }
 
diff --git a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C
index 8f2c39c37eb..fda7552611a 100644
--- a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C
+++ b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C
@@ -31,21 +31,14 @@ License
 template<class ReactionThermo>
 Foam::label Foam::Reaction<ReactionThermo>::nUnNamedReactions = 0;
 
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-template<class ReactionThermo>
-Foam::label Foam::Reaction<ReactionThermo>::getNewReactionID()
-{
-    return nUnNamedReactions++;
-}
-
+// * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
 
 template<class ReactionThermo>
-Foam::string Foam::Reaction<ReactionThermo>::reactionStr() const
+void Foam::Reaction<ReactionThermo>::reactionStrLeft
+(
+    OStringStream& reaction
+) const
 {
-    OStringStream reaction;
-
     for (label i = 0; i < lhs_.size(); ++i)
     {
         if (i > 0)
@@ -62,28 +55,15 @@ Foam::string Foam::Reaction<ReactionThermo>::reactionStr() const
             reaction << "^" << lhs_[i].exponent;
         }
     }
+}
 
-    for (label i = 0; i < glhs().size(); ++i)
-    {
-        reaction << " + ";
-
-        if (i > 0)
-        {
-            reaction << " + ";
-        }
-        if (mag(glhs()[i].stoichCoeff - 1) > SMALL)
-        {
-            reaction << glhs()[i].stoichCoeff;
-        }
-        reaction << gasSpecies()[glhs()[i].index];
-        if (mag(glhs()[i].exponent - glhs()[i].stoichCoeff) > SMALL)
-        {
-            reaction << "^" << glhs()[i].exponent;
-        }
-    }
-
-    reaction << " = ";
 
+template<class ReactionThermo>
+void Foam::Reaction<ReactionThermo>::reactionStrRight
+(
+    OStringStream& reaction
+) const
+{
     for (label i = 0; i < rhs_.size(); ++i)
     {
         if (i > 0)
@@ -100,26 +80,27 @@ Foam::string Foam::Reaction<ReactionThermo>::reactionStr() const
             reaction << "^" << rhs_[i].exponent;
         }
     }
+}
 
-    for (label i = 0; i < grhs().size(); ++i)
-    {
-        reaction << " + ";
 
-        if (i > 0)
-        {
-            reaction << " + ";
-        }
-        if (mag(grhs()[i].stoichCoeff - 1) > SMALL)
-        {
-            reaction << grhs()[i].stoichCoeff;
-        }
-        reaction << gasSpecies()[grhs()[i].index];
-        if (mag(grhs()[i].exponent - grhs()[i].stoichCoeff) > SMALL)
-        {
-            reaction << "^" << grhs()[i].exponent;
-        }
-    }
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+template<class ReactionThermo>
+Foam::label Foam::Reaction<ReactionThermo>::getNewReactionID()
+{
+    return nUnNamedReactions++;
+}
 
+
+template<class ReactionThermo>
+Foam::string Foam::Reaction<ReactionThermo>::reactionStr
+(
+    OStringStream& reaction
+) const
+{
+    reactionStrLeft(reaction);
+    reaction << " = ";
+    reactionStrRight(reaction);
     return reaction.str();
 }
 
@@ -464,7 +445,9 @@ Foam::Reaction<ReactionThermo>::New
 template<class ReactionThermo>
 void Foam::Reaction<ReactionThermo>::write(Ostream& os) const
 {
-    os.writeKeyword("reaction") << reactionStr() << token::END_STATEMENT << nl;
+    OStringStream reaction;
+    os.writeKeyword("reaction") << reactionStr(reaction)
+        << token::END_STATEMENT << nl;
 }
 
 
@@ -528,11 +511,13 @@ template<class ReactionThermo>
 const Foam::List<typename Foam::Reaction<ReactionThermo>::specieCoeffs>&
 Foam::Reaction<ReactionThermo>::glhs() const
 {
+    /*
     notImplemented
     (
         "inline const List<typename Reaction<ReactionThermo>::specieCoeffs>&"
         "Reaction<ReactionThermo>::glhs()"
     );
+    */
     return *reinterpret_cast<List<specieCoeffs>*>(0);
 }
 
diff --git a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.H b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.H
index b0c66fb86fb..2679fc1bbb1 100644
--- a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.H
+++ b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.H
@@ -66,6 +66,16 @@ class Reaction
 :
     public ReactionThermo
 {
+protected:
+
+    // Protected member functions
+
+        //- Return string representation of the left of the reaction
+        void reactionStrLeft(OStringStream& reaction) const;
+
+        //- Return string representation of the right of the reaction
+        void reactionStrRight(OStringStream& reaction) const;
+
 
 public:
 
@@ -134,7 +144,7 @@ private:
     // Private Member Functions
 
         //- Return string representation of reaction
-        string reactionStr() const;
+        string reactionStr(OStringStream& reaction) const;
 
         //- Construct reaction thermo
         void setThermo(const HashPtrTable<ReactionThermo>& thermoDatabase);
diff --git a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/ReactionI.H b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/ReactionI.H
index 7e380b4c801..6dece80ba78 100644
--- a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/ReactionI.H
+++ b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/ReactionI.H
@@ -67,8 +67,8 @@ Reaction<ReactionThermo>::rhs() const
 template<class ReactionThermo>
 inline Ostream& operator<<(Ostream& os, const Reaction<ReactionThermo>& r)
 {
-   os << r.reactionStr()<< token::END_STATEMENT <<nl;
-
+    OStringStream reaction;
+    os << r.reactionStr(reaction)<< token::END_STATEMENT <<nl;
    return os;
 }
 
-- 
GitLab