diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C index 4ebc3929ebc736551174c3f1f4bc50ae60531715..008f5ad42c9b2db60d070a50c6c40b96f8252810 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C @@ -848,11 +848,13 @@ Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::solve notImplemented ( "ODEChemistryModel::solve" - "scalarField&, " - "const scalar, " - "const scalar, " - "const scalar, " - "const scalar" + "(" + "scalarField&, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar" + ")" ); return (0); diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/makeChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/makeChemistryModel.H index faf2608a2b5e8865fabcdc6dbd496449118a6648..18970e5d101ba15dfb64f6cf199f64356d01d1e3 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/makeChemistryModel.H +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/makeChemistryModel.H @@ -48,13 +48,6 @@ namespace Foam SS##Comp##Thermo, \ #SS"<"#Comp","#Thermo">", \ 0 \ - ); \ - \ - addToRunTimeSelectionTable \ - ( \ - Comp, \ - SS##Comp##Thermo, \ - fvMesh \ ); @@ -67,13 +60,6 @@ namespace Foam SS##Comp##SThermo##GThermo, \ #SS"<"#Comp","#SThermo","#GThermo">", \ 0 \ - ); \ - \ - addToRunTimeSelectionTable \ - ( \ - Comp, \ - SS##Comp##SThermo##GThermo, \ - fvMesh \ ); diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelNew.C b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelNew.C index 7c1d6b596a1dbc04365f0a389ac4aa1653dbe5a9..8b22ae7ce55e70f54aab9f248dc3800265d41384 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelNew.C +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,24 +32,40 @@ Foam::autoPtr<Foam::psiChemistryModel> Foam::psiChemistryModel::New const fvMesh& mesh ) { - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word userModel + IOdictionary chemistryPropertiesDict ( - IOdictionary + IOobject ( - IOobject - ( - "chemistryProperties", - mesh.time().constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("psiChemistryModel") + "chemistryProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) ); + const word solver(chemistryPropertiesDict.lookup("chemistrySolver")); + + wordList models = fvMeshConstructorTablePtr_->sortedToc(); + wordHashSet validModels; + forAll(models, i) + { + label delim = models[i].find('<'); + validModels.insert(models[i](0, delim)); + } + + wordHashSet::iterator solverIter = validModels.find(solver); + if (solverIter == validModels.end()) + { + FatalErrorIn("psiChemistryModel::New(const fvMesh&)") + << "Valid chemistrySolver types are:" << validModels + << exit(FatalError); + } + + + const word userModel(chemistryPropertiesDict.lookup("psiChemistryModel")); + // construct chemistry model type name by inserting first template argument const label tempOpen = userModel.find('<'); const label tempClose = userModel.find('>'); @@ -59,7 +75,7 @@ Foam::autoPtr<Foam::psiChemistryModel> Foam::psiChemistryModel::New userModel(tempOpen + 1, tempClose - tempOpen - 1); const word modelType = - className + '<' + typeName + ',' + thermoTypeName + '>'; + solver + '<' + className + '<' + typeName + ',' + thermoTypeName + ">>"; if (debug) { @@ -77,7 +93,7 @@ Foam::autoPtr<Foam::psiChemistryModel> Foam::psiChemistryModel::New { if (debug) { - FatalErrorIn("psiChemistryModelBase::New(const mesh&)") + FatalErrorIn("psiChemistryModel::New(const mesh&)") << "Unknown psiChemistryModel type " << modelType << nl << nl << "Valid psiChemistryModel types are:" << nl @@ -86,16 +102,22 @@ Foam::autoPtr<Foam::psiChemistryModel> Foam::psiChemistryModel::New } else { - wordList models = fvMeshConstructorTablePtr_->sortedToc(); - forAll(models, i) + wordList allModels(fvMeshConstructorTablePtr_->sortedToc()); + wordHashSet models; + forAll(allModels, i) { - models[i] = models[i].replace(typeName + ',', ""); + const label tempOpen = allModels[i].find('<'); + const label tempClose = allModels[i].rfind('>'); + word modelName = + allModels[i](tempOpen + 1, tempClose - tempOpen - 1); + modelName = modelName.replace(typeName + ',', ""); + models.insert(modelName); } - FatalErrorIn("psiChemistryModelBase::New(const mesh&)") + FatalErrorIn("psiChemistryModel::New(const mesh&)") << "Unknown psiChemistryModel type " << userModel - << nl << nl << "Valid psiChemistryModel types are:" << nl - << models << nl << exit(FatalError); + << nl << nl << "Valid psiChemistryModel types are:" + << models << exit(FatalError); } } diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelNew.C b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelNew.C index f4dbc3a671502a6c36a3f32d2072bf81c7eecd6f..ec9b968c50c69b058f91c37bcc95706c75334c25 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelNew.C +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,24 +32,40 @@ Foam::autoPtr<Foam::rhoChemistryModel> Foam::rhoChemistryModel::New const fvMesh& mesh ) { - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word userModel + IOdictionary chemistryPropertiesDict ( - IOdictionary + IOobject ( - IOobject - ( - "chemistryProperties", - mesh.time().constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("rhoChemistryModel") + "chemistryProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) ); + const word solver(chemistryPropertiesDict.lookup("chemistrySolver")); + + wordList models = fvMeshConstructorTablePtr_->sortedToc(); + wordHashSet validModels; + forAll(models, i) + { + label delim = models[i].find('<'); + validModels.insert(models[i](0, delim)); + } + + wordHashSet::iterator solverIter = validModels.find(solver); + if (solverIter == validModels.end()) + { + FatalErrorIn("rhoChemistryModel::New(const fvMesh&)") + << "Valid chemistrySolver types are:" << validModels + << exit(FatalError); + } + + + const word userModel(chemistryPropertiesDict.lookup("rhoChemistryModel")); + // construct chemistry model type name by inserting first template argument const label tempOpen = userModel.find('<'); const label tempClose = userModel.find('>'); @@ -59,7 +75,7 @@ Foam::autoPtr<Foam::rhoChemistryModel> Foam::rhoChemistryModel::New userModel(tempOpen + 1, tempClose - tempOpen - 1); const word modelType = - className + '<' + typeName + ',' + thermoTypeName + '>'; + solver + '<' + className + '<' + typeName + ',' + thermoTypeName + ">>"; if (debug) { @@ -77,7 +93,7 @@ Foam::autoPtr<Foam::rhoChemistryModel> Foam::rhoChemistryModel::New { if (debug) { - FatalErrorIn("rhoChemistryModelBase::New(const mesh&)") + FatalErrorIn("rhoChemistryModel::New(const mesh&)") << "Unknown rhoChemistryModel type " << modelType << nl << nl << "Valid rhoChemistryModel types are:" << nl @@ -86,18 +102,22 @@ Foam::autoPtr<Foam::rhoChemistryModel> Foam::rhoChemistryModel::New } else { - wordList models = fvMeshConstructorTablePtr_->sortedToc(); - forAll(models, i) + wordList allModels(fvMeshConstructorTablePtr_->sortedToc()); + wordHashSet models; + forAll(allModels, i) { - models[i] = models[i].replace(typeName + ',', ""); + const label tempOpen = allModels[i].find('<'); + const label tempClose = allModels[i].rfind('>'); + word modelName = + allModels[i](tempOpen + 1, tempClose - tempOpen - 1); + modelName = modelName.replace(typeName + ',', ""); + models.insert(modelName); } - FatalErrorIn("rhoChemistryModelBase::New(const mesh&)") - << "Unknown rhoChemistryModel type " - << userModel << nl << nl - << "Valid rhoChemistryModel types are:" << nl - << models << nl - << exit(FatalError); + FatalErrorIn("rhoChemistryModel::New(const mesh&)") + << "Unknown rhoChemistryModel type " << userModel + << nl << nl << "Valid rhoChemistryModel types are:" + << models << exit(FatalError); } } diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C index a2fbbe497a164082f0e2b2deda6a11b0a5610342..861347e94bd16b5cc09ddbc399ea1c0d12a06525 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C @@ -38,7 +38,7 @@ Foam::EulerImplicit<ODEChemistryType>::EulerImplicit ) : chemistrySolver<ODEChemistryType>(mesh, ODEModelName, thermoType), - coeffsDict_(this->subDict(ODEModelName + "Coeffs")), + coeffsDict_(this->subDict("EulerImplicitCoeffs")), cTauChem_(readScalar(coeffsDict_.lookup("cTauChem"))), eqRateLimiter_(coeffsDict_.lookup("equilibriumRateLimiter")) {} diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C index 29e7d6c8e7d6d0de12f8d30d11b3a1809bce41fb..d14299e235d27886b9c8752df222419add5d1b73 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C @@ -37,8 +37,8 @@ Foam::ode<ODEChemistryType>::ode ) : chemistrySolver<ODEChemistryType>(mesh, ODEModelName, thermoType), - coeffsDict_(this->subDict(ODEModelName + "Coeffs")), - solverName_(coeffsDict_.lookup("ODESolver")), + coeffsDict_(this->subDict("odeCoeffs")), + solverName_(coeffsDict_.lookup("solver")), odeSolver_(ODESolver::New(solverName_, *this)), eps_(readScalar(coeffsDict_.lookup("eps"))) {} diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C index 28a80563cc979ada7e052bf6b402d4c4227c35d8..c0005f642039bd31bf6c68c6d153854bb64e4b05 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C @@ -37,7 +37,7 @@ Foam::sequential<ODEChemistryType>::sequential ) : chemistrySolver<ODEChemistryType>(mesh, ODEModelName, thermoType), - coeffsDict_(this->subDict(ODEModelName + "Coeffs")), + coeffsDict_(this->subDict("sequentialCoeffs")), cTauChem_(readScalar(coeffsDict_.lookup("cTauChem"))), eqRateLimiter_(coeffsDict_.lookup("equilibriumRateLimiter")) {}