diff --git a/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C b/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C index a4d35cdcc..b919ecd88 100644 --- a/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C +++ b/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C @@ -88,8 +88,8 @@ int main(int argc, char *argv[]) { elementsDict.add ( - cr.specieComposition()[speciesList[si]][ei].elementName, - cr.specieComposition()[speciesList[si]][ei].nAtoms + cr.specieComposition()[speciesList[si]][ei].name(), + cr.specieComposition()[speciesList[si]][ei].nAtoms() ); } diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H index f298f1b9b..69bfb69a9 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H @@ -36,15 +36,19 @@ SourceFiles #define chemistryReader_H #include "typeInfo.H" -#include "runTimeSelectionTables.H" +#include "specieElement.H" #include "Reaction.H" #include "ReactionList.H" +#include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +typedef HashTable> speciesCompositionTable; + + /*---------------------------------------------------------------------------*\ Class chemistryReader Declaration \*---------------------------------------------------------------------------*/ @@ -112,6 +116,9 @@ public: //- Return access to the list of species virtual const speciesTable& species() const = 0; + //- Table of species composition + virtual const speciesCompositionTable& specieComposition() const = 0; + //- Return access to the thermo packages virtual const HashPtrTable& speciesThermo() const = 0; diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L index 318cd7ab4..bf5e9ac83 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L @@ -68,9 +68,6 @@ int yyFlexLexer::yywrap() Foam::string foamSpecieString(const char* YYText) { Foam::string specieString(YYText); - // Transforming parentheses is no longer necessary - //specieString.replaceAll('(', '<'); - //specieString.replaceAll(')', '>'); return specieString; } @@ -483,9 +480,9 @@ bool finishReaction = false; if (elementName.size() && nAtoms) { correctElementName(elementName); - currentSpecieComposition[nSpecieElements].elementName = + currentSpecieComposition[nSpecieElements].name() = elementName; - currentSpecieComposition[nSpecieElements++].nAtoms = nAtoms; + currentSpecieComposition[nSpecieElements++].nAtoms() = nAtoms; } } @@ -540,24 +537,24 @@ bool finishReaction = false; ) { correctElementName(elementName); - currentSpecieComposition[nSpecieElements].elementName = + currentSpecieComposition[nSpecieElements].name() = elementName; - currentSpecieComposition[nSpecieElements++].nAtoms = nAtoms; + currentSpecieComposition[nSpecieElements++].nAtoms() = nAtoms; } currentSpecieComposition.setSize(nSpecieElements); - HashTable>::iterator specieCompositionIter + speciesCompositionTable::iterator specieCompositionIter ( - specieComposition_.find(currentSpecieName) + speciesComposition_.find(currentSpecieName) ); - if (specieCompositionIter != specieComposition_.end()) + if (specieCompositionIter != speciesComposition_.end()) { - specieComposition_.erase(specieCompositionIter); + speciesComposition_.erase(specieCompositionIter); } - specieComposition_.insert + speciesComposition_.insert ( currentSpecieName, currentSpecieComposition diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C index eef9f3a4d..63cbe0696 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C @@ -119,8 +119,8 @@ Foam::scalar Foam::chemkinReader::molecularWeight forAll(specieComposition, i) { - label nAtoms = specieComposition[i].nAtoms; - const word& elementName = specieComposition[i].elementName; + label nAtoms = specieComposition[i].nAtoms(); + const word& elementName = specieComposition[i].name(); if (isotopeAtomicWts_.found(elementName)) { @@ -428,24 +428,26 @@ void Foam::chemkinReader::addReaction forAll(lhs, i) { const List& specieComposition = - specieComposition_[speciesTable_[lhs[i].index]]; + speciesComposition_[speciesTable_[lhs[i].index]]; forAll(specieComposition, j) { - label elementi = elementIndices_[specieComposition[j].elementName]; - nAtoms[elementi] += lhs[i].stoichCoeff*specieComposition[j].nAtoms; + label elementi = elementIndices_[specieComposition[j].name()]; + nAtoms[elementi] += + lhs[i].stoichCoeff*specieComposition[j].nAtoms(); } } forAll(rhs, i) { const List& specieComposition = - specieComposition_[speciesTable_[rhs[i].index]]; + speciesComposition_[speciesTable_[rhs[i].index]]; forAll(specieComposition, j) { - label elementi = elementIndices_[specieComposition[j].elementName]; - nAtoms[elementi] -= rhs[i].stoichCoeff*specieComposition[j].nAtoms; + label elementi = elementIndices_[specieComposition[j].name()]; + nAtoms[elementi] -= + rhs[i].stoichCoeff*specieComposition[j].nAtoms(); } } diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H index 916c8c06f..44a35cbbc 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H @@ -46,7 +46,6 @@ SourceFiles #include "labelList.H" #include "speciesTable.H" #include "atomicWeights.H" - #include "reactionTypes.H" #include @@ -77,33 +76,6 @@ public: gas }; - //- species element - struct specieElement - { - word elementName; - label nAtoms; - - bool operator==(const specieElement& se) const - { - return - ( - nAtoms == se.nAtoms - && elementName == se.elementName - ); - } - - bool operator!=(const specieElement& se) const - { - return !operator==(se); - } - - friend Ostream& operator<<(Ostream& os, const specieElement& se) - { - os << se.nAtoms << token::SPACE << se.elementName; - return os; - } - }; - private: @@ -203,7 +175,7 @@ private: HashPtrTable speciesThermo_; //- Table of species composition - HashTable> specieComposition_; + speciesCompositionTable speciesComposition_; //- List of the reactions ReactionList reactions_; @@ -369,6 +341,12 @@ public: return speciesTable_; } + //- Table of species composition + const speciesCompositionTable& specieComposition() const + { + return speciesComposition_; + } + //- Specie phase const HashTable& speciePhase() const { @@ -381,12 +359,6 @@ public: return speciesThermo_; } - //- Table of species composition - const HashTable>& specieComposition() const - { - return specieComposition_; - } - //- List of the reactions const ReactionList& reactions() const { diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C index 0efe8e2b8..2be58f01e 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C @@ -42,6 +42,85 @@ Foam::speciesTable& Foam::foamChemistryReader::setSpecies } +template +void Foam::foamChemistryReader::readSpeciesComposition() +{ + if (!chemDict_.found("elements")) + { + Info<< " elements not defined in " << chemDict_.name() << endl; + return; + } + + wordList e(chemDict_.lookup("elements")); + label currentElementIndex(0); + + DynamicList elementNames_; + HashTable