17 const vector<double> &_y0,
18 const vector<double> &_y1) :
28 nspc = gas->nSpecies();
31 gCHON[0] = 2.0/gas->atomicWeight(gas->elementIndex(
"C"));
32 gCHON[1] = 0.5/gas->atomicWeight(gas->elementIndex(
"H"));
33 gCHON[2] = -1.0/gas->atomicWeight(gas->elementIndex(
"O"));
40 getMixtureFraction(&y0[0],
true);
54 double &hmix,
double &Tmix) {
56 hmix =
h1*mixf +
h0*(1.0-mixf);
57 for(
int k=0; k<
nspc; k++)
58 ymix[k] =
y1[k]*mixf +
y0[k]*(1.0-mixf);
60 gas->setMassFractions( &ymix[0] );
61 gas->setState_HP(hmix,
P, 1.E-10);
63 Tmix =
gas->temperature();
77 double &heq,
double &Teq) {
82 for(
int k=0; k<
nspc; k++)
83 yeq[k] =
y1[k]*mixf +
y0[k]*(1.0-mixf);
84 heq =
h1*mixf +
h0*(1.0-mixf);
86 gas->setMassFractions(&yeq[0]);
87 gas->setState_HP(heq,
P, 1.E-10);
89 gas->equilibrate(
"HP");
90 gas->getMassFractions(&yeq[0]);
92 Teq =
gas->temperature();
107 vector<double> &yeq,
double &heq ) {
112 for(
int k=0; k<
nspc; k++)
113 yeq[k] =
y1[k]*mixf +
y0[k]*(1.0-mixf);
115 gas->setState_TPY(Teq,
P, &yeq[0]);
117 gas->equilibrate(
"TP");
118 gas->getMassFractions(&yeq[0]);
120 heq =
gas->enthalpy_mass();
136 double &hpcc,
double &Tpcc) {
141 double d1 = 1.0-mixf;
142 for(
int k=0; k<
nspc; k++) {
143 ypcc[k] =
y1[k]*mixf +
y0[k]*d1;
145 hpcc =
h1*mixf +
h0*d1;
149 int iC =
gas->elementIndex(
"C");
150 int iH =
gas->elementIndex(
"H");
151 int iN =
gas->elementIndex(
"N");
152 int iCO2 =
gas->speciesIndex(
"CO2");
153 int iH2O =
gas->speciesIndex(
"H2O");
154 int iN2 =
gas->speciesIndex(
"N2");
155 int iO2 =
gas->speciesIndex(
"O2");
166 gas->setMassFractions( &ypcc[0] );
167 gas->getMoleFractions( &ypcc[0] );
173 nHnotFromH2O, nCnotFromCO2 );
175 double x = elemM[iC];
176 double y = elemM[iH];
177 double z = elemM[iN];
178 double beta = elemM[
gas->elementIndex(
"O")] * 0.5;
184 for(
int k=0; k<
nspc; k++)
191 ypcc[iO2] = beta - (x+y/4.0);
197 double eta = (beta-nOnotFromO2/2)/(x+y/4-nOnotFromO2/2);
199 cout << endl <<
"eta > 1.0" << endl;
202 for(
int k=0; k<
nspc; k++)
205 ypcc[iCO2] = (x-nCnotFromCO2) + nCnotFromCO2*eta;
206 ypcc[iH2O] = (y-nHnotFromH2O)*0.5 + nHnotFromH2O*0.5*eta;
215 for(
int k=0; k<
nspc; k++)
218 for(
int k=0; k<
nspc; k++)
220 gas->setMoleFractions( &ypcc[0] );
221 gas->getMassFractions( &ypcc[0] );
226 gas->setState_HP(hpcc,
P, 1.E-10);
228 Tpcc =
gas->temperature();
240 vector<double> x_c(
nspc,0.0);
242 double mc0, mc1, mo0, mo1, mh0, mh1;
247 mc0 = elemMassFrac0[
gas->elementIndex(
"C")]/
248 gas->atomicWeight(
gas->elementIndex(
"C"));
249 mc1 = elemMassFrac1[
gas->elementIndex(
"C")]/
250 gas->atomicWeight(
gas->elementIndex(
"C"));
251 mh0 = elemMassFrac0[
gas->elementIndex(
"H")]/
252 gas->atomicWeight(
gas->elementIndex(
"H"));
253 mh1 = elemMassFrac1[
gas->elementIndex(
"H")]/
254 gas->atomicWeight(
gas->elementIndex(
"H"));
255 mo0 = elemMassFrac0[
gas->elementIndex(
"O")]/
256 gas->atomicWeight(
gas->elementIndex(
"O"));
257 mo1 = elemMassFrac1[
gas->elementIndex(
"O")]/
258 gas->atomicWeight(
gas->elementIndex(
"O"));
261 (mo1-mo0 + 2.0*(mc0-mc1) + 0.5*(mh0-mh1));
263 cout << endl <<
"# mixfStoic = m_fuel/(m_fuel+m_air) = " <<
mixfStoic << endl;
277 vector<double> elemMassFrac(
gas->nElements(), 0.0);
278 gas->setMassFractions( &y[0] );
279 for(
int k=0; k<
gas->nElements(); k++)
280 elemMassFrac[k] =
gas->elementalMassFraction(k);
297 double &nHnotFromH2O,
298 double &nCnotFromCO2) {
305 vector<double> elemM(
gas->nElements(), 0.0);
306 int iO2 =
gas->speciesIndex(
"O2");
307 int iO =
gas->elementIndex(
"O");
308 int iCO2 =
gas->speciesIndex(
"CO2");
309 int iC =
gas->elementIndex(
"C");
310 int iH2O =
gas->speciesIndex(
"H2O");
311 int iH =
gas->elementIndex(
"H");
313 for(
int k=0; k<
nspc; k++) {
314 vector<double> xx(
gas->nSpecies(), 0.0);
316 gas->setMoleFractions(&xx[0]);
317 for(
int m=0; m<
gas->nElements(); m++)
318 elemM[m] += x[k] *
gas->elementalMoleFraction(m);
319 if(k != iO2) nOnotFromO2 +=
gas->elementalMoleFraction(iO) * x[k];
320 if(k != iCO2) nCnotFromCO2 +=
gas->elementalMoleFraction(iC) * x[k];
321 if(k != iH2O) nHnotFromH2O +=
gas->elementalMoleFraction(iH) * x[k];
339 vector<double> elemMF;
343 beta =
gCHON[0] * elemMF[
gas->elementIndex(
"C")] +
344 gCHON[1] * elemMF[
gas->elementIndex(
"H")] +
345 gCHON[2] * elemMF[
gas->elementIndex(
"O")] +
346 gCHON[3] * elemMF[
gas->elementIndex(
"N")];
351 gCHON[1] * elemMF[
gas->elementIndex(
"H")] +
352 gCHON[2] * elemMF[
gas->elementIndex(
"O")] +
353 gCHON[3] * elemMF[
gas->elementIndex(
"N")];
357 gCHON[1] * elemMF[
gas->elementIndex(
"H")] +
358 gCHON[2] * elemMF[
gas->elementIndex(
"O")] +
359 gCHON[3] * elemMF[
gas->elementIndex(
"N")];
std::vector< double > y1
stream mixf=1 composition vector
double beta1
mixf = (beta-beta0) / (beta1-beta0)
std::vector< double > getElementMoles(const double *x, double &nOnotFromO2, double &nHnotFromH2O, double &nCnotFromCO2)
double beta0
mixf = (beta-beta0) / (beta1-beta0)
double h1
stream mixf=1 enthalpy (J/kg)
std::vector< double > y0
stream mixf=0 composition vector
int nspc
number of species in gas mechanism
void getEquilibrium_HP(const double mixf, std::vector< double > &yeq, double &heq, double &Teq)
double mixfStoic
stoichiometric mixture fraction
std::vector< double > gCHON
gammas, as in beta = sum_i (y_i*gamma_i)
std::vector< double > getElementMassFracs(const double *y)
double h0
stream mixf=0 enthalpy (J/kg)
double getMixtureFraction(const double *y, const bool doBeta01=false)
void getProdOfCompleteComb(const double mixf, std::vector< double > &ypcc, double &hpcc, double &Tpcc)
std::shared_ptr< Cantera::ThermoPhase > gas
void getMixingState(const double mixf, std::vector< double > &ymix, double &hmix, double &Tmix)
void getEquilibrium_TP(const double mixf, double Teq, std::vector< double > &yeq, double &heq)