8#include "yaml-cpp/yaml.h"
27 y0 = vector<double>(
nspc, 0.0);
28 y1 = vector<double>(
nspc, 0.0);
30 D0 = vector<double>(
nspc, 0.0);
31 D1 = vector<double>(
nspc, 0.0);
36 bool Lmole =
domn->
io->
streamProps[
"moleOrMass"].as<
string>() ==
"MOLE" ?
true :
false;
43 vector<string> y0Labels;
44 vector<double> y0short;
46 for(YAML::const_iterator it = yy.begin(); it!=yy.end(); it++) {
47 y0Labels.push_back(it->first.as<
string>());
48 y0short.push_back(it->second.as<
double>());
49 sum += it->second.as<
double>();
51 for(
int i=0; i<y0Labels.size(); i++)
52 y0[
domn->
gas->speciesIndex(y0Labels[i])] = y0short[i]/sum;
55 vector<string> y1Labels;
56 vector<double> y1short;
58 for(YAML::const_iterator it = yy.begin(); it!=yy.end(); it++) {
59 y1Labels.push_back(it->first.as<
string>());
60 y1short.push_back(it->second.as<
double>());
61 sum += it->second.as<
double>();
63 for(
int i=0; i<y1Labels.size(); i++)
64 y1[
domn->
gas->speciesIndex(y1Labels[i])] = y1short[i] / sum;
79 for (
int k=0; k<
nspc; k++)
88 for (
int k=0; k<
nspc; k++)
107 double &hmix,
double &Tmix){
109 hmix =
h1*mixf +
h0*(1.0-mixf);
110 for(
int k=0; k<
nspc; k++)
111 ymix[k] =
y1[k]*mixf +
y0[k]*(1.0-mixf);
113 domn->
gas->setMassFractions( &ymix[0] );
116 Tmix =
domn->
gas->temperature();
129 double &hpcc,
double &Tpcc){
134 double d1 = 1.0-mixf;
135 for(
int k=0; k<
nspc; k++) {
136 ypcc[k] =
y1[k]*mixf +
y0[k]*d1;
138 hpcc =
h1*mixf +
h0*d1;
142 int iC =
domn->
gas->elementIndex(
"C");
143 int iH =
domn->
gas->elementIndex(
"H");
145 int iN =
domn->
gas->elementIndex(
"N");
146 int iCO2 =
domn->
gas->speciesIndex(
"CO2");
147 int iH2O =
domn->
gas->speciesIndex(
"H2O");
148 int iN2 =
domn->
gas->speciesIndex(
"N2");
149 int iO2 =
domn->
gas->speciesIndex(
"O2");
160 domn->
gas->setMassFractions( &ypcc[0] );
161 domn->
gas->getMoleFractions( &ypcc[0] );
163 double nOnotFromO2 = 0.0;
164 double nHnotFromH2O = 0.0;
165 double nCnotFromCO2 = 0.0;
167 nHnotFromH2O, nCnotFromCO2 );
169 double x = elemM[iC];
170 double y = elemM[iH];
171 double z = elemM[iN];
172 double beta = elemM[
domn->
gas->elementIndex(
"O")] * 0.5;
178 for(
int k=0; k<
nspc; k++)
185 ypcc[iO2] = beta - (x+y/4.0);
191 double eta = (beta-nOnotFromO2/2)/(x+y/4-nOnotFromO2/2);
196 for(
int k=0; k<
nspc; k++)
199 ypcc[iCO2] = (x-nCnotFromCO2) + nCnotFromCO2*eta;
200 ypcc[iH2O] = (y-nHnotFromH2O)*0.5 + nHnotFromH2O*0.5*eta;
209 for(
int k=0; k<
nspc; k++)
212 for(
int k=0; k<
nspc; k++)
214 domn->
gas->setMoleFractions( &ypcc[0] );
215 domn->
gas->getMassFractions( &ypcc[0] );
222 Tpcc =
domn->
gas->temperature();
231 vector<double> x_c(
nspc,0.0);
233 double mc0, mc1, mo0, mo1, mh0, mh1;
238 mc0 = elemMassFrac0[
domn->
gas->elementIndex(
"C")]/
240 mc1 = elemMassFrac1[
domn->
gas->elementIndex(
"C")]/
242 mh0 = elemMassFrac0[
domn->
gas->elementIndex(
"H")]/
244 mh1 = elemMassFrac1[
domn->
gas->elementIndex(
"H")]/
246 mo0 = elemMassFrac0[
domn->
gas->elementIndex(
"O")]/
248 mo1 = elemMassFrac1[
domn->
gas->elementIndex(
"O")]/
252 (mo1-mo0 + 2.0*(mc0-mc1) + 0.5*(mh0-mh1));
267 vector<double> atomArr(
domn->
gas->nElements());
268 vector<double> elemMassFrac(
domn->
gas->nElements(), 0.0);
271 domn->
gas->setMassFractions( &y[0] );
273 for(
int k=0; k<
nspc; k++) {
275 domn->
gas->getAtoms(k, &atomArr[0]);
276 for(
int m=0; m<(int)atomArr.size(); m++)
277 sum += atomArr[m] *
domn->
gas->atomicWeight(m);
278 for(
int m=0; m<(int)atomArr.size(); m++)
279 elemMassFrac[m] += y[k] * atomArr[m]/sum *
domn->
gas->atomicWeight(m);
296 vector<double> atomArr(
domn->
gas->nElements());
297 vector<double> elemMoleFrac(
domn->
gas->nElements(), 0.0);
299 domn->
gas->setMassFractions( &y[0] );
301 for(
int k=0; k<
nspc; k++) {
302 domn->
gas->getAtoms(k, &atomArr[0]);
303 for(
int m=0; m<(int)atomArr.size(); m++)
304 elemMoleFrac[m] +=
domn->
gas->moleFraction(k) * atomArr[m];
307 for(
int m=0; m<(int)atomArr.size(); m++)
308 sum += elemMoleFrac[m];
310 for(
int m=0; m<(int)atomArr.size(); m++)
311 elemMoleFrac[m] /= sum;
328 double &nHnotFromH2O,
329 double &nCnotFromCO2) {
332 vector<double> atomArr(
domn->
gas->nElements());
333 vector<double> elemM(
domn->
gas->nElements(), 0.0);
334 int iO2 =
domn->
gas->speciesIndex(
"O2");
335 int iO =
domn->
gas->elementIndex(
"O");
336 int iCO2 =
domn->
gas->speciesIndex(
"CO2");
337 int iC =
domn->
gas->elementIndex(
"C");
338 int iH2O =
domn->
gas->speciesIndex(
"H2O");
339 int iH =
domn->
gas->elementIndex(
"H");
341 for(
int k=0; k<
nspc; k++) {
342 domn->
gas->getAtoms(k, &atomArr[0]);
343 for(
int m=0; m<(int)atomArr.size(); m++)
344 elemM[m] += x[k] * atomArr[m];
345 if(k != iO2) nOnotFromO2 += atomArr[iO] * x[k];
346 if(k != iCO2) nCnotFromCO2 += atomArr[iC] * x[k];
347 if(k != iH2O) nHnotFromH2O += atomArr[iH] * x[k];
365 vector<double> elemMF;
369 beta =
gCHON[0] * elemMF[
domn->
gas->elementIndex(
"C")] +
IdealGasPhase * gas
pointer to cantera thermochemistry object (reaction rates, Cp, etc.)
Transport * tran
pointer to cantera transport object (viscosity, diffusivity, etc.)
inputoutput * io
pointer to input/output object
param * pram
pointer to the parameters object
double pres
initial pressure (Pa)
vector< double > y1
stream mixf=1 composition vector
void init(domain *p_domn, const vector< double > &gammas)
double T0
stream mixf=0 temperature
vector< double > hsp1
stream mixf=1 species enthalpies
double beta1
mixf = (beta-beta0) / (beta1-beta0)
double rho1
stream mixf=1 density
domain * domn
pointer to domain object
vector< double > getElementMoles(const double *x, double &nOnotFromO2, double &nHnotFromH2O, double &nCnotFromCO2)
double h1
stream mixf=1 enthalpy
double M1
stream mixf=1 mean molecular weight
double T1
stream mixf=1 temperature
int nspc
number of species in gas mechanism
vector< double > D0
stream mixf=0 diffusivities
vector< double > hsp0
stream mixf=0 species enthalpies
double mixfStoic
stoichiometric mixture fraction
vector< double > setElementMassFracs(const double *y)
void getMixingState(const double mixf, vector< double > &ymix, double &hmix, double &Tmix)
double M0
stream mixf=0 mean molecular weight
double h0
stream mixf=0 enthalpy
vector< double > setElementMoleFracs(const double *y)
double getMixtureFraction(const double *y, const bool doBeta01=false)
vector< double > D1
stream mixf=1 diffusivities
void getProdOfCompleteComb(const double mixf, vector< double > &ypcc, double &hpcc, double &Tpcc)
double rho0
stream mixf=0 density
vector< double > gCHON
gammas, as in beta = sum_i (y_i*gamma_i)
vector< double > y0
stream mixf=0 composition vector
Header file for class domain.
Header file for class streams.