diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C index d6dd42a0451801e5b66b1953e8fa669d95858819..75a21a16903e01a205ea3a6c793a6a93c51a7b4e 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C @@ -31,7 +31,8 @@ template<class ThermoType> Foam::autoPtr<Foam::chemistryReader<ThermoType> > Foam::chemistryReader<ThermoType>::New ( - const dictionary& thermoDict + const dictionary& thermoDict, + speciesTable& species ) { // Let the chemistry reader type default to CHEMKIN @@ -50,7 +51,7 @@ Foam::chemistryReader<ThermoType>::New { FatalErrorIn ( - "chemistryReader::New(const dictionary& thermoDict)" + "chemistryReader::New(const dictionary&, speciesTable&)" ) << "Unknown chemistryReader type " << chemistryReaderTypeName << nl << nl << "Valid chemistryReader types are:" << nl @@ -58,7 +59,10 @@ Foam::chemistryReader<ThermoType>::New << exit(FatalError); } - return autoPtr<chemistryReader<ThermoType> >(cstrIter()(thermoDict)); + return autoPtr<chemistryReader<ThermoType> > + ( + cstrIter()(thermoDict, species) + ); } diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H index 839100b7a34f4037babd34db64496ee8a4ff66ac..9a27fc90c2f98e1529bc58724afc88fd9c3b9692 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H @@ -85,16 +85,21 @@ public: chemistryReader, dictionary, ( - const dictionary& thermoDict + const dictionary& thermoDict, + speciesTable& species ), - (thermoDict) + (thermoDict, species) ); // Selectors //- Select constructed from dictionary - static autoPtr<chemistryReader> New(const dictionary& thermoDict); + static autoPtr<chemistryReader> New + ( + const dictionary& thermoDict, + speciesTable& species + ); //- Destructor @@ -104,9 +109,6 @@ public: // Member Functions - //- Return access to the list of species - virtual const speciesTable& species() const = 0; - //- Return access to the thermo packages virtual const HashPtrTable<ThermoType>& speciesThermo() const = 0; diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C index a95f9439c980f59b06f4e8b2f59a1509022e9616..26fb1b14789489335652705d91f9116cb7e34bc2 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C @@ -854,29 +854,31 @@ void Foam::chemkinReader::read Foam::chemkinReader::chemkinReader ( const fileName& CHEMKINFileName, + speciesTable& species, const fileName& thermoFileName ) : lineNo_(1), specieNames_(10), - speciesTable_(), + speciesTable_(species), reactions_(speciesTable_, speciesThermo_) { read(CHEMKINFileName, thermoFileName); } -Foam::chemkinReader::chemkinReader(const dictionary& thermoDict) +Foam::chemkinReader::chemkinReader +( + const dictionary& thermoDict, + speciesTable& species +) : lineNo_(1), specieNames_(10), - speciesTable_(), + speciesTable_(species), reactions_(speciesTable_, speciesThermo_) { - fileName chemkinFile - ( - fileName(thermoDict.lookup("CHEMKINFile")).expand() - ); + 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 f00889d0564e4b7994844fdae88ab5afd252d371..6e0d4dc5c1af7eec497eb6d7c0ece31f71be1c39 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H @@ -193,7 +193,7 @@ private: HashTable<label> specieIndices_; //- Table of species - speciesTable speciesTable_; + speciesTable& speciesTable_; //- Specie phase HashTable<phase> speciePhase_; @@ -318,11 +318,12 @@ public: chemkinReader ( const fileName& chemkinFile, + speciesTable& species, const fileName& thermoFileName = fileName::null ); //- Construct by getting the CHEMKIN III file name from dictionary - chemkinReader(const dictionary& thermoDict); + chemkinReader(const dictionary& thermoDict, speciesTable& species); //- Destructor diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C index 3024473270f94d87ad8d1a99792b29cf4ed5055c..0efe8e2b8a5ec839bd63619bce637c3cd9d7475c 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C @@ -27,12 +27,28 @@ License #include "IFstream.H" #include "addToRunTimeSelectionTable.H" +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class ThermoType> +Foam::speciesTable& Foam::foamChemistryReader<ThermoType>::setSpecies +( + const dictionary& dict, + speciesTable& species +) +{ + wordList s(dict.lookup("species")); + species.transfer(s); + return species; +} + + // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // template<class ThermoType> Foam::foamChemistryReader<ThermoType>::foamChemistryReader ( const fileName& reactionsFileName, + speciesTable& species, const fileName& thermoFileName ) : @@ -51,8 +67,8 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader fileName(thermoFileName).expand() )() ), + speciesTable_(setSpecies(chemDict_, species)), speciesThermo_(thermoDict_), - speciesTable_(chemDict_.lookup("species")), reactions_(speciesTable_, speciesThermo_, chemDict_) {} @@ -60,7 +76,8 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader template<class ThermoType> Foam::foamChemistryReader<ThermoType>::foamChemistryReader ( - const dictionary& thermoDict + const dictionary& thermoDict, + speciesTable& species ) : chemistryReader<ThermoType>(), @@ -79,7 +96,7 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader )() ), speciesThermo_(thermoDict_), - speciesTable_(chemDict_.lookup("species")), + speciesTable_(setSpecies(chemDict_, species)), reactions_(speciesTable_, speciesThermo_, chemDict_) {} diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H index 84f18d22210307c97a46afe5949a2f1d49792082..925692dc7aa4d90018647610f4e5f7165604635c 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H @@ -67,7 +67,7 @@ class foamChemistryReader HashPtrTable<ThermoType> speciesThermo_; //- Table of species - speciesTable speciesTable_; + speciesTable& speciesTable_; //- List of the reactions ReactionList<ThermoType> reactions_; @@ -75,6 +75,9 @@ class foamChemistryReader // Private Member Functions + //- Set the species list + speciesTable& setSpecies(const dictionary& dict, speciesTable& species); + //- Disallow default bitwise copy construct foamChemistryReader(const foamChemistryReader&); @@ -94,12 +97,17 @@ public: foamChemistryReader ( const fileName& reactionsFileName, + speciesTable& species, const fileName& thermoFileName ); //- Construct by getting the foamChemistry and thermodynamics file names // from dictionary - foamChemistryReader(const dictionary& thermoDict); + foamChemistryReader + ( + const dictionary& thermoDict, + speciesTable& species + ); //- Destructor diff --git a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C index 4303a0e7fb2c8f28e1fcdfbb93928dc9bb129d56..6c8cd1f50acacabae381cb4682d627605afe5b29 100644 --- a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C @@ -35,14 +35,15 @@ Foam::reactingMixture<ThermoType>::reactingMixture const fvMesh& mesh ) : + speciesTable(), autoPtr<chemistryReader<ThermoType> > ( - chemistryReader<ThermoType>::New(thermoDict) + chemistryReader<ThermoType>::New(thermoDict, *this) ), multiComponentMixture<ThermoType> ( thermoDict, - autoPtr<chemistryReader<ThermoType> >::operator()().species(), + *this, autoPtr<chemistryReader<ThermoType> >::operator()().speciesThermo(), mesh ), diff --git a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H index 5c004eefebb77568bc1acb38c002cb9012ddffc3..b29c0758ad6589663e4c3feab8a631a9b64128d0 100644 --- a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H @@ -35,6 +35,7 @@ SourceFiles #ifndef reactingMixture_H #define reactingMixture_H +#include "speciesTable.H" #include "chemistryReader.H" #include "multiComponentMixture.H" @@ -50,6 +51,7 @@ namespace Foam template<class ThermoType> class reactingMixture : + public speciesTable, public autoPtr<chemistryReader<ThermoType> >, public multiComponentMixture<ThermoType>, public PtrList<Reaction<ThermoType> > @@ -84,6 +86,16 @@ public: //- Read dictionary void read(const dictionary&); + + label size() const + { + return PtrList<Reaction<ThermoType> >::size(); + } + + Reaction<ThermoType>& operator [] (const label i) + { + return PtrList<Reaction<ThermoType> >::operator[](i); + } };