From b9f1290184cb885c6f1972eaa499e1120146168d Mon Sep 17 00:00:00 2001 From: Alberto Cuoci Date: Thu, 15 Dec 2016 08:51:39 +0100 Subject: [PATCH] Added Compact splitting for unsteady solvers --- mybashrc.complete | 4 +- mybashrc.minimalist | 2 +- mybashrc.minimalist.mkl | 4 +- .../constant/solverOptions | 2 + .../constant/solverOptions | 4 +- .../F3/laminarPimpleSMOKE/constant/solverOptions | 2 + .../F3/laminarSimpleSMOKE/constant/solverOptions | 2 + .../F3/01-initial-solution/constant/solverOptions | 2 + .../F3/02-steady-state/constant/solverOptions | 2 + .../F3/03-fine-grid/constant/solverOptions | 2 + .../laminarPimpleSMOKE.2x.H | 10 +- .../laminarPimpleSMOKE.3x.H | 8 + solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.2x.H | 8 + solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.3x.H | 8 + solvers/laminarSMOKE/createChemicalFields.H | 40 +++++ solvers/laminarSMOKE/readOptions.H | 7 +- .../BatchReactorHomogeneousConstantPressure.H | 28 +++- solvers/laminarSMOKE/unsteady/Policy_Compact.H | 43 +++++ .../laminarSMOKE/unsteady/Policy_MomentumCompact.H | 43 +++++ solvers/laminarSMOKE/unsteady/TEqn.H | 1 + solvers/laminarSMOKE/unsteady/YEqn.H | 5 +- solvers/laminarSMOKE/unsteady/chemistry_DI.H | 175 ++++++++++++++++++--- .../maps/KineticsMap_CHEMKIN.hpp | 2 +- 23 files changed, 372 insertions(+), 32 deletions(-) create mode 100644 solvers/laminarSMOKE/unsteady/Policy_Compact.H create mode 100644 solvers/laminarSMOKE/unsteady/Policy_MomentumCompact.H diff --git a/mybashrc.complete b/mybashrc.complete index 7433b15..d6ca7a2 100644 --- a/mybashrc.complete +++ b/mybashrc.complete @@ -1,8 +1,8 @@ #OpenFOAM VERSION (22, 23, 24, 30) -export OPENFOAM_VERSION='-DOPENFOAM_VERSION=30' +export OPENFOAM_VERSION='-DOPENFOAM_VERSION=24' #Compulsory path -export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3-dev +export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3.1 export BOOST_LIBRARY_PATH=/software/chimica2/libraries/boost/boost-1.60.0-gcc-4.8.2 export RAPIDXML_LIBRARY_PATH=/software/chimica2/libraries/rapidxml/rapidxml-1.13 diff --git a/mybashrc.minimalist b/mybashrc.minimalist index 95dca8d..b0eb519 100644 --- a/mybashrc.minimalist +++ b/mybashrc.minimalist @@ -2,7 +2,7 @@ export OPENFOAM_VERSION='-DOPENFOAM_VERSION=30' #Compulsory path -export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3-dev +export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3.1 export BOOST_LIBRARY_PATH=/software/chimica2/libraries/boost/boost-1.60.0-gcc-4.8.2 export RAPIDXML_LIBRARY_PATH=/software/chimica2/libraries/rapidxml/rapidxml-1.13 diff --git a/mybashrc.minimalist.mkl b/mybashrc.minimalist.mkl index 742dae2..b79f2de 100644 --- a/mybashrc.minimalist.mkl +++ b/mybashrc.minimalist.mkl @@ -1,8 +1,8 @@ #OpenFOAM VERSION (22, 23, 24, 30) -export OPENFOAM_VERSION='-DOPENFOAM_VERSION=30' +export OPENFOAM_VERSION='-DOPENFOAM_VERSION=24' #Compulsory path -export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3-dev +export EIGEN_LIBRARY_PATH=/software/chimica2/libraries/eigen/eigen-3.3.1 export BOOST_LIBRARY_PATH=/software/chimica2/libraries/boost/boost-1.60.0-gcc-4.8.2 export RAPIDXML_LIBRARY_PATH=/software/chimica2/libraries/rapidxml/rapidxml-1.13 diff --git a/run/tutorials/ToroFlames/F3/laminarBuoyantPimpleSMOKE/constant/solverOptions b/run/tutorials/ToroFlames/F3/laminarBuoyantPimpleSMOKE/constant/solverOptions index 6c501a6..66f96fb 100644 --- a/run/tutorials/ToroFlames/F3/laminarBuoyantPimpleSMOKE/constant/solverOptions +++ b/run/tutorials/ToroFlames/F3/laminarBuoyantPimpleSMOKE/constant/solverOptions @@ -43,6 +43,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Output diff --git a/run/tutorials/ToroFlames/F3/laminarBuoyantSimpleSMOKE/constant/solverOptions b/run/tutorials/ToroFlames/F3/laminarBuoyantSimpleSMOKE/constant/solverOptions index 45dd545..d74f8c5 100644 --- a/run/tutorials/ToroFlames/F3/laminarBuoyantSimpleSMOKE/constant/solverOptions +++ b/run/tutorials/ToroFlames/F3/laminarBuoyantSimpleSMOKE/constant/solverOptions @@ -28,7 +28,7 @@ SteadyState propertiesUpdate 10; implicitSourceTerm true; orderSpecies "sweep"; - exceptionalSpecies (none ); + exceptionalSpecies ( none ); } PhysicalModel @@ -53,6 +53,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Radiation diff --git a/run/tutorials/ToroFlames/F3/laminarPimpleSMOKE/constant/solverOptions b/run/tutorials/ToroFlames/F3/laminarPimpleSMOKE/constant/solverOptions index f5b31b1..7c812d5 100644 --- a/run/tutorials/ToroFlames/F3/laminarPimpleSMOKE/constant/solverOptions +++ b/run/tutorials/ToroFlames/F3/laminarPimpleSMOKE/constant/solverOptions @@ -43,6 +43,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Radiation diff --git a/run/tutorials/ToroFlames/F3/laminarSimpleSMOKE/constant/solverOptions b/run/tutorials/ToroFlames/F3/laminarSimpleSMOKE/constant/solverOptions index 45dd545..663beed 100644 --- a/run/tutorials/ToroFlames/F3/laminarSimpleSMOKE/constant/solverOptions +++ b/run/tutorials/ToroFlames/F3/laminarSimpleSMOKE/constant/solverOptions @@ -53,6 +53,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Radiation diff --git a/run/validation/ToroFlames/F3/01-initial-solution/constant/solverOptions b/run/validation/ToroFlames/F3/01-initial-solution/constant/solverOptions index 2be7784..85a8be6 100644 --- a/run/validation/ToroFlames/F3/01-initial-solution/constant/solverOptions +++ b/run/validation/ToroFlames/F3/01-initial-solution/constant/solverOptions @@ -43,6 +43,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Output diff --git a/run/validation/ToroFlames/F3/02-steady-state/constant/solverOptions b/run/validation/ToroFlames/F3/02-steady-state/constant/solverOptions index b9733a8..8a4578c 100644 --- a/run/validation/ToroFlames/F3/02-steady-state/constant/solverOptions +++ b/run/validation/ToroFlames/F3/02-steady-state/constant/solverOptions @@ -53,6 +53,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Output diff --git a/run/validation/ToroFlames/F3/03-fine-grid/constant/solverOptions b/run/validation/ToroFlames/F3/03-fine-grid/constant/solverOptions index b9733a8..8a4578c 100644 --- a/run/validation/ToroFlames/F3/03-fine-grid/constant/solverOptions +++ b/run/validation/ToroFlames/F3/03-fine-grid/constant/solverOptions @@ -53,6 +53,8 @@ PhysicalModel zMixEquation on; tauEquation on; zMixDmixSpecies N2; + + minTemperature4Chemistry 0; } Output diff --git a/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.2x.H b/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.2x.H index 8728ed5..cff276c 100644 --- a/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.2x.H +++ b/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.2x.H @@ -88,6 +88,10 @@ { #include "Policy_ReactionTransport.H" } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_Compact.H" + } } else { @@ -98,7 +102,11 @@ else if (strangAlgorithm == STRANG_MOMENTUM_REACTION_TRANSPORT) { #include "Policy_MomentumReactionTransport.H" - } + } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_MomentumCompact.H" + } } // Passive scalars diff --git a/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.3x.H b/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.3x.H index 98d2a3d..446016a 100644 --- a/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.3x.H +++ b/solvers/laminarBuoyantPimpleSMOKE/laminarPimpleSMOKE.3x.H @@ -88,6 +88,10 @@ { #include "Policy_ReactionTransport.H" } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_Compact.H" + } } else { @@ -98,6 +102,10 @@ else if (strangAlgorithm == STRANG_MOMENTUM_REACTION_TRANSPORT) { #include "Policy_MomentumReactionTransport.H" + } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_MomentumCompact.H" } } diff --git a/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.2x.H b/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.2x.H index f50380b..8f27d1f 100644 --- a/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.2x.H +++ b/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.2x.H @@ -84,6 +84,10 @@ { #include "Policy_ReactionTransport.H" } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_Compact.H" + } } else { @@ -94,6 +98,10 @@ else if (strangAlgorithm == STRANG_MOMENTUM_REACTION_TRANSPORT) { #include "Policy_MomentumReactionTransport.H" + } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_MomentumCompact.H" } } diff --git a/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.3x.H b/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.3x.H index a4ebcfc..58f8683 100644 --- a/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.3x.H +++ b/solvers/laminarPimpleSMOKE/laminarPimpleSMOKE.3x.H @@ -102,6 +102,10 @@ { #include "Policy_ReactionTransport.H" } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_Compact.H" + } } else { @@ -112,6 +116,10 @@ else if (strangAlgorithm == STRANG_MOMENTUM_REACTION_TRANSPORT) { #include "Policy_MomentumReactionTransport.H" + } + else if (strangAlgorithm == STRANG_COMPACT) + { + #include "Policy_MomentumCompact.H" } } diff --git a/solvers/laminarSMOKE/createChemicalFields.H b/solvers/laminarSMOKE/createChemicalFields.H index e9053f6..61cfca6 100644 --- a/solvers/laminarSMOKE/createChemicalFields.H +++ b/solvers/laminarSMOKE/createChemicalFields.H @@ -46,6 +46,7 @@ PtrList X(thermodynamicsMapXML->NumberOfSpecies()); PtrList Dmix(thermodynamicsMapXML->NumberOfSpecies()); PtrList CpSpecies(thermodynamicsMapXML->NumberOfSpecies()); PtrList FormationRates(outputFormationRatesIndices.size()); +PtrList RR(thermodynamicsMapXML->NumberOfSpecies()); #if STEADYSTATE == 1 PtrList sourceImplicit(thermodynamicsMapXML->NumberOfSpecies()+1); @@ -152,6 +153,26 @@ for(int i=0;iNumberOfSpecies();i++) dimensionSet(0, 0, 0, 0, 0) ) ); + + #if STEADYSTATE == 0 + RR.set + ( + i, + new volScalarField + ( + IOobject + ( + "thermo_RR_"+ thermodynamicsMapXML->NamesOfSpecies()[i], + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar("RR", dimensionSet(1, -3, -1, 0, 0), 0.0) + ) + ); + #endif } // check if field exists and can be read @@ -211,6 +232,25 @@ for(int i=0;iNumberOfSpecies();i++) } } +#if STEADYSTATE == 0 + +Info<< "Creating field RT\n" << endl; +volScalarField RT +( + IOobject + ( + "RT", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar("RT", dimensionSet(1, -1, -3, 0, 0), 0.0) +); + +#endif + #if STEADYSTATE == 1 for (int i=0;iNumberOfSpecies();i++) diff --git a/solvers/laminarSMOKE/readOptions.H b/solvers/laminarSMOKE/readOptions.H index fe39b5d..4c314b4 100644 --- a/solvers/laminarSMOKE/readOptions.H +++ b/solvers/laminarSMOKE/readOptions.H @@ -90,7 +90,7 @@ const dictionary& kineticsDictionary = solverOptions.subDict("Kinetics"); scalar massFractionsTol = 1e-10; //- Internal models -enum { STRANG_MOMENTUM_TRANSPORT_REACTION, STRANG_MOMENTUM_REACTION_TRANSPORT} strangAlgorithm; +enum { STRANG_MOMENTUM_TRANSPORT_REACTION, STRANG_MOMENTUM_REACTION_TRANSPORT, STRANG_COMPACT } strangAlgorithm; enum { DIFFUSIVITY_MODEL_MULTICOMPONENT, DIFFUSIVITY_MODEL_LEWIS_NUMBERS} diffusivityModel; // Physical model @@ -122,7 +122,7 @@ const dictionary& physicalModelDictionary = solverOptions.subDict("PhysicalModel homogeneousReactions = Switch(physicalModelDictionary.lookup(word("homogeneousReactions"))); includeDpDt = Switch(physicalModelDictionary.lookup(word("includeDpDt"))); iMassDiffusionInEnergyEquation = Switch(physicalModelDictionary.lookup(word("massDiffusionInEnergyEquation"))); - //direct_integration_minimum_temperature_for_chemistry = readScalar(physicalModelDictionary.lookup("minTemperature4Chemistry")); + direct_integration_minimum_temperature_for_chemistry = readScalar(physicalModelDictionary.lookup("minTemperature4Chemistry")); // Thermophoretic effect thermophoreticEffect = Switch(physicalModelDictionary.lookup(word("thermophoreticEffect"))); @@ -142,9 +142,10 @@ const dictionary& physicalModelDictionary = solverOptions.subDict("PhysicalModel word strang(physicalModelDictionary.lookup("strangAlgorithm")); if (strang == "MomentumTransportReaction") strangAlgorithm = STRANG_MOMENTUM_TRANSPORT_REACTION; else if (strang == "MomentumReactionTransport") strangAlgorithm = STRANG_MOMENTUM_REACTION_TRANSPORT; + else if (strang == "Compact") strangAlgorithm = STRANG_COMPACT; else { - Info << "Wrong strangAlgorithm option: MomentumTransportReaction || MomentumReactionTransport" << endl; + Info << "Wrong strangAlgorithm option: MomentumTransportReaction || MomentumReactionTransport || Compact" << endl; abort(); } } diff --git a/solvers/laminarSMOKE/unsteady/BatchReactorHomogeneousConstantPressure.H b/solvers/laminarSMOKE/unsteady/BatchReactorHomogeneousConstantPressure.H index 1fab746..a0de435 100644 --- a/solvers/laminarSMOKE/unsteady/BatchReactorHomogeneousConstantPressure.H +++ b/solvers/laminarSMOKE/unsteady/BatchReactorHomogeneousConstantPressure.H @@ -104,6 +104,8 @@ private: OpenSMOKE::DRG* drg_; bool drgAnalysis_; + + bool debug_; }; unsigned int BatchReactorHomogeneousConstantPressure::NumberOfEquations() const @@ -133,6 +135,7 @@ BatchReactorHomogeneousConstantPressure::BatchReactorHomogeneousConstantPressure energyEquation_ = true; isat_ = false; drgAnalysis_ = false; + debug_ = false; } void BatchReactorHomogeneousConstantPressure::SetReactor( const double P0 ) @@ -203,7 +206,7 @@ int BatchReactorHomogeneousConstantPressure::Equations(const double t, const Ope kineticsMap_.KineticConstants(); kineticsMap_.ReactionRates(c_); kineticsMap_.FormationRates(&R_); - + // Species equations for (unsigned int i=1;i<=NC_;++i) dy[i] = thermodynamicsMap_.MW()[i]*R_[i]/rho_; @@ -223,6 +226,29 @@ int BatchReactorHomogeneousConstantPressure::Equations(const double t, const Ope // ISAT Equation if (isat_ == true) dy[NC_+2] = 0.; + + if (debug_ == true) + { + Info << " * T: " << T_ << endl; + Info << " * P: " << P0_ << endl; + for(unsigned int i=0;i. | +| | +\*-----------------------------------------------------------------------*/ + +{ + #include "Policy_ReactionTransport.H" +} diff --git a/solvers/laminarSMOKE/unsteady/Policy_MomentumCompact.H b/solvers/laminarSMOKE/unsteady/Policy_MomentumCompact.H new file mode 100644 index 0000000..6661a7d --- /dev/null +++ b/solvers/laminarSMOKE/unsteady/Policy_MomentumCompact.H @@ -0,0 +1,43 @@ +/*-----------------------------------------------------------------------*\ +| | +| ╔═══╦═╗╔═╦═══╦╗╔═╦═══╗ | +| ║╔═╗║║╚╝║║╔═╗║║║╔╣╔══╝ | +| ╔╗╔══╦╗╔╦╦═╗╔══╦═╣╚══╣╔╗╔╗║║ ║║╚╝╝║╚══╗ | +| ║║║╔╗║╚╝╠╣╔╗╣╔╗║╔╩══╗║║║║║║║ ║║╔╗║║╔══╝ | +| ║╚╣╔╗║║║║║║║║╔╗║║║╚═╝║║║║║║╚═╝║║║╚╣╚══╗ | +| ╚═╩╝╚╩╩╩╩╩╝╚╩╝╚╩╝╚═══╩╝╚╝╚╩═══╩╝╚═╩═══╝ | +| | +| | +| Authors: A. Cuoci | +| | +| Contacts: Alberto Cuoci | +| email: alberto.cuoci@polimi.it | +| Department of Chemistry, Materials and Chemical Engineering | +| Politecnico di Milano | +| P.zza Leonardo da Vinci 32, 20133 Milano (Italy) | +| | +|-------------------------------------------------------------------------| +| | +| This file is part of laminarSMOKE solver. | +| | +| License | +| | +| Copyright(C) 2016, 2015, 2014 A. Cuoci | +| laminarSMOKE is free software: you can redistribute it and/or modify | +| it under the terms of the GNU General Public License as published by | +| the Free Software Foundation, either version 3 of the License, or | +| (at your option) any later version. | +| | +| laminarSMOKE is distributed in the hope that it will be useful, | +| but WITHOUT ANY WARRANTY; without even the implied warranty of | +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | +| GNU General Public License for more details. | +| | +| You should have received a copy of the GNU General Public License | +| along with laminarSMOKE. If not, see . | +| | +\*-----------------------------------------------------------------------*/ + +{ + #include "Policy_MomentumReactionTransport.H" +} diff --git a/solvers/laminarSMOKE/unsteady/TEqn.H b/solvers/laminarSMOKE/unsteady/TEqn.H index 2125f82..c99e389 100644 --- a/solvers/laminarSMOKE/unsteady/TEqn.H +++ b/solvers/laminarSMOKE/unsteady/TEqn.H @@ -60,6 +60,7 @@ massDiffusionInEnergyEquation + DpDt + radiation->divq(T) + + RT + cp*fvOptions(rho, T) ); diff --git a/solvers/laminarSMOKE/unsteady/YEqn.H b/solvers/laminarSMOKE/unsteady/YEqn.H index b31a485..a208005 100644 --- a/solvers/laminarSMOKE/unsteady/YEqn.H +++ b/solvers/laminarSMOKE/unsteady/YEqn.H @@ -88,8 +88,9 @@ tmp > mvConvection == - fvm::laplacian(rho*Dmixi*MWmix*Yi/Mi, Yi) - sumDiffusionCorrections + - - fvm::div(Jc,Yi, "div(Jc,Yi)") + - fvOptions(rho, Yi) + - fvm::div(Jc,Yi, "div(Jc,Yi)") + + RR[i] + + fvOptions(rho, Yi) ); // Add Soret effect diff --git a/solvers/laminarSMOKE/unsteady/chemistry_DI.H b/solvers/laminarSMOKE/unsteady/chemistry_DI.H index d81c3e7..4b2ed58 100644 --- a/solvers/laminarSMOKE/unsteady/chemistry_DI.H +++ b/solvers/laminarSMOKE/unsteady/chemistry_DI.H @@ -43,6 +43,7 @@ scalarField& TCells = T.internalField(); scalarField& QCells = Q.internalField(); const scalarField& rhoCells = rho.internalField(); + const scalarField& cpCells = cp.internalField(); const scalarField& vCells = mesh.V(); if (homogeneousReactions == true && odeParameterBatchReactorHomogeneous.type() == OpenSMOKE::ODE_Parameters::ODE_INTEGRATOR_OPENSMOKE) @@ -93,7 +94,7 @@ odeSolverConstantPressure().SetInitialConditions(t0, y0); // Additional ODE solver options - if (celli == 0) + //if (celli == 0) { // Set linear algebra options odeSolverConstantPressure().SetLinearAlgebraSolver(odeParameterBatchReactorHomogeneous.linear_algebra()); @@ -111,6 +112,14 @@ // Solve OdeSMOKE::OdeStatus status = odeSolverConstantPressure().Solve(tf); odeSolverConstantPressure().Solution(yf); + + if (status == -6) // Time step too small + { + Info << "Constant pressure reactor: " << celli << endl; + Info << " * T: " << TCells[celli] << endl; + for(unsigned int i=0;iNamesOfSpecies()[i] << ": " << y0(i) << endl; + } } else { @@ -122,7 +131,7 @@ odeSolverConstantVolume().SetInitialConditions(t0, y0); // Additional ODE solver options - if (celli == 0) + //if (celli == 0) { // Set linear algebra options odeSolverConstantVolume().SetLinearAlgebraSolver(odeParameterBatchReactorHomogeneous.linear_algebra()); @@ -140,6 +149,14 @@ // Solve OdeSMOKE::OdeStatus status = odeSolverConstantVolume().Solve(tf); odeSolverConstantVolume().Solution(yf); + + if (status == -6) // Time step too small + { + Info << "Constant volume reactor: " << celli << endl; + Info << " * T: " << TCells[celli] << endl; + for(unsigned int i=0;iNamesOfSpecies()[i] << ": " << y0(i) << endl; + } } } } @@ -153,13 +170,53 @@ // Check mass fractions normalizeMassFractions(yf, celli, massFractionsTol); - // Assign mass fractions - for(int i=0;i1e-14) + { + thermodynamicsMapXML->SetPressure(thermodynamicPressure); + thermodynamicsMapXML->SetTemperature(yf(NC)); + + double mwmix; + double cpmix; + for(int i=1;i<=NC;i++) + massFractions[i] = yf(i-1); + thermodynamicsMapXML->MoleFractions_From_MassFractions(moleFractions,mwmix,massFractions); + thermodynamicsMapXML->cpMolar_Mixture_From_MoleFractions(cpmix, moleFractions); //[J/Kmol/K] + cpmix /= mwmix; + const double rhomix = thermodynamicPressure*mwmix/PhysicalConstants::R_J_kmol/yf(NC); + + // Assign source mass fractions + for(int i=0;i1e-14) + { + thermodynamicsMapXML->SetPressure(thermodynamicPressure); + thermodynamicsMapXML->SetTemperature(yf(NC)); + + double mwmix; + double cpmix; + for(int i=1;i<=NC;i++) + massFractions[i] = yf(i-1); + thermodynamicsMapXML->MoleFractions_From_MassFractions(moleFractions,mwmix,massFractions); + thermodynamicsMapXML->cpMolar_Mixture_From_MoleFractions(cpmix, moleFractions); //[J/Kmol/K] + cpmix /= mwmix; + const double rhomix = thermodynamicPressure*mwmix/PhysicalConstants::R_J_kmol/yf(NC); + + // Assign source mass fractions + for(int i=0;i1e-14) + { + thermodynamicsMapXML->SetPressure(thermodynamicPressure); + thermodynamicsMapXML->SetTemperature(yf[NC+1]); + + double mwmix; + double cpmix; + for(int i=1;i<=NC;i++) + massFractions[i] = yf[i]; + thermodynamicsMapXML->MoleFractions_From_MassFractions(moleFractions,mwmix,massFractions); + thermodynamicsMapXML->cpMolar_Mixture_From_MoleFractions(cpmix, moleFractions); //[J/Kmol/K] + cpmix /= mwmix; + const double rhomix = thermodynamicPressure*mwmix/PhysicalConstants::R_J_kmol/yf[NC+1]; + + // Assign source mass fractions + for(int i=0;iT_-this->T_old_)/this->T_>epsilon) + // if (std::fabs(this->T_-this->T_old_)/this->T_>epsilon) { arrhenius_kinetic_constants_must_be_recalculated_ = true; nonconventional_kinetic_constants_must_be_recalculated_ = true;