diff --git a/applications/solvers/combustion/chemFoam/chemFoam.C b/applications/solvers/combustion/chemFoam/chemFoam.C index 2f5e5aab1..92a45b85e 100644 --- a/applications/solvers/combustion/chemFoam/chemFoam.C +++ b/applications/solvers/combustion/chemFoam/chemFoam.C @@ -41,6 +41,98 @@ Description #include "basicSpecieMixture.H" #include "cellModeller.H" + +template +scalarList W(const rhoReactionThermo& thermo) +{ + const PtrList& specieData = + dynamicCast>(thermo) + .speciesData(); + + scalarList W(specieData.size()); + + forAll(specieData, i) + { + W[i] = specieData[i].W(); + } + + return W; +} + + +template +scalar h0 +( + const rhoReactionThermo& thermo, + const scalarList& Y, + const scalar p, + const scalar T +) +{ + const PtrList& specieData = + dynamic_cast&>(thermo) + .speciesData(); + + scalar h0 = 0; + forAll(Y, i) + { + h0 += Y[i]*specieData[i].Hs(p, T); + } + + return h0; +} + + +scalarList W(const rhoReactionThermo& thermo) +{ + if (isA>(thermo)) + { + return W(thermo); + } + else if (isA>(thermo)) + { + return W(thermo); + } + else + { + FatalErrorInFunction + << "Thermodynamics type " << thermo.type() + << " not supported by chemFoam" + << exit(FatalError); + + return scalarList::null(); + } +} + + +scalar h0 +( + const rhoReactionThermo& thermo, + const scalarList& Y, + const scalar p, + const scalar T +) +{ + if (isA>(thermo)) + { + return h0(thermo, Y, p, T); + } + else if (isA>(thermo)) + { + return h0(thermo, Y, p, T); + } + else + { + FatalErrorInFunction + << "Thermodynamics type " << thermo.type() + << " not supported by chemFoam" + << exit(FatalError); + + return 0; + } +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) diff --git a/applications/solvers/combustion/chemFoam/pEqn.H b/applications/solvers/combustion/chemFoam/pEqn.H index a919ff198..7d6255981 100644 --- a/applications/solvers/combustion/chemFoam/pEqn.H +++ b/applications/solvers/combustion/chemFoam/pEqn.H @@ -5,7 +5,7 @@ scalar invW = 0.0; forAll(Y, i) { - invW += Y[i][0]/specieData[i].W(); + invW += Y[i][0]/W[i]; } Rspecific[0] = 1000.0*constant::physicoChemical::R.value()*invW; diff --git a/applications/solvers/combustion/chemFoam/readInitialConditions.H b/applications/solvers/combustion/chemFoam/readInitialConditions.H index 8e340a7e1..2c29ca982 100644 --- a/applications/solvers/combustion/chemFoam/readInitialConditions.H +++ b/applications/solvers/combustion/chemFoam/readInitialConditions.H @@ -1,4 +1,4 @@ - word constProp(initialConditions.lookup("constantProperty")); + const word constProp(initialConditions.lookup("constantProperty")); if ((constProp != "pressure") && (constProp != "volume")) { FatalError << "in initialConditions, unknown constantProperty type " @@ -6,7 +6,7 @@ << abort(FatalError); } - word fractionBasis(initialConditions.lookup("fractionBasis")); + const word fractionBasis(initialConditions.lookup("fractionBasis")); if ((fractionBasis != "mass") && (fractionBasis != "mole")) { FatalError << "in initialConditions, unknown fractionBasis type " << nl @@ -14,20 +14,8 @@ << fractionBasis << abort(FatalError); } - label nSpecie = Y.size(); - PtrList specieData(Y.size()); - forAll(specieData, i) - { - specieData.set - ( - i, - new gasHThermoPhysics - ( - dynamic_cast&> - (thermo).speciesData()[i] - ) - ); - } + const label nSpecie = Y.size(); + const scalarList W(::W(thermo)); scalarList Y0(nSpecie, 0.0); scalarList X0(nSpecie, 0.0); @@ -49,12 +37,12 @@ forAll(Y, i) { X0[i] /= mTot; - mw += specieData[i].W()*X0[i]; + mw += W[i]*X0[i]; } forAll(Y, i) { - Y0[i] = X0[i]*specieData[i].W()/mw; + Y0[i] = X0[i]*W[i]/mw; } } else // mass fraction @@ -73,21 +61,21 @@ forAll(Y, i) { Y0[i] /= mTot; - invW += Y0[i]/specieData[i].W(); + invW += Y0[i]/W[i]; } const scalar mw = 1.0/invW; forAll(Y, i) { - X0[i] = Y0[i]*mw/specieData[i].W(); + X0[i] = Y0[i]*mw/W[i]; } } - scalar h0 = 0.0; + const scalar h0 = ::h0(thermo, Y0, p[0], T0); + forAll(Y, i) { Y[i] = Y0[i]; - h0 += Y0[i]*specieData[i].Hs(p[0], T0); } thermo.he() = dimensionedScalar("h", dimEnergy/dimMass, h0); diff --git a/src/thermophysicalModels/specie/Make/files b/src/thermophysicalModels/specie/Make/files index adb031004..d3f551f49 100644 --- a/src/thermophysicalModels/specie/Make/files +++ b/src/thermophysicalModels/specie/Make/files @@ -2,5 +2,6 @@ atomicWeights/atomicWeights.C specie/specie.C reaction/reactions/makeReactions.C reaction/reactions/makeLangmuirHinshelwoodReactions.C +reaction/reactions/makeMichaelisMentenReactions.C LIB = $(FOAM_LIBBIN)/libspecie diff --git a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C index c33789ec9..30aa132a1 100644 --- a/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C +++ b/src/thermophysicalModels/specie/reaction/Reactions/Reaction/Reaction.C @@ -584,7 +584,6 @@ void Foam::Reaction::dwdc const List