int DLL_EXPORT flow_new(int type, int iph, int np) { IdealGasPhase* ph = (IdealGasPhase*)_thermo(iph); StFlow* x; try { switch (type) { case 0: x = new AxiStagnFlow(ph, ph->nSpecies(), np); break; case 1: x = new OneDFlow(ph, ph->nSpecies(), np); break; default: return -2; } return Cabinet<StFlow>::cabinet()->add(x); } catch (CanteraError) { return -1; } }
TEST_F(ConstructFromScratch, ignoreUndefinedElements) { IdealGasPhase p; p.addElement("H"); p.addElement("O"); p.ignoreUndefinedElements(); p.addSpecies(sO2); p.addSpecies(sOH); ASSERT_EQ((size_t) 2, p.nSpecies()); p.addSpecies(sCO); p.addSpecies(sCO2); ASSERT_EQ((size_t) 2, p.nSpecies()); ASSERT_EQ((size_t) 2, p.nElements()); ASSERT_EQ(npos, p.speciesIndex("CO2")); }
TEST_F(ConstructFromScratch, throwUndefindElements) { IdealGasPhase p; p.throwUndefinedElements(); p.addElement("H"); p.addElement("O"); p.addSpecies(sH2O); p.addSpecies(sH2); ASSERT_EQ((size_t) 2, p.nSpecies()); p.addSpecies(sO2); p.addSpecies(sOH); ASSERT_EQ((size_t) 4, p.nSpecies()); ASSERT_EQ("H2", p.speciesName(1)); ASSERT_EQ(2, p.nAtoms(2, 1)); // O in O2 ASSERT_EQ(2, p.nAtoms(0, 0)); // H in H2O ASSERT_THROW(p.addSpecies(sCO), CanteraError); }
int DLL_EXPORT stflow_new(int iph, int ikin, int itr, int itype) { try { IdealGasPhase* ph = (IdealGasPhase*)_thermo(iph); if (itype == 1) { AxiStagnFlow* x = new AxiStagnFlow(ph, ph->nSpecies(), 2); x->setKinetics(*_kinetics(ikin)); x->setTransport(*_transport(itr)); return Cabinet<Domain1D>::cabinet()->add(x); } else if (itype == 2) { FreeFlame* x = new FreeFlame(ph, ph->nSpecies(), 2); x->setKinetics(*_kinetics(ikin)); x->setTransport(*_transport(itr)); return Cabinet<Domain1D>::cabinet()->add(x); } else { return -2; } } catch (CanteraError) { return -1; } }
TEST_F(ConstructFromScratch, addUndefinedElements) { IdealGasPhase p; p.addElement("H"); p.addElement("O"); p.addUndefinedElements(); // default behavior p.addSpecies(sH2); p.addSpecies(sOH); ASSERT_EQ((size_t) 2, p.nSpecies()); ASSERT_EQ((size_t) 2, p.nElements()); p.addSpecies(sCO); p.addSpecies(sCO2); ASSERT_EQ((size_t) 4, p.nSpecies()); ASSERT_EQ((size_t) 3, p.nElements()); ASSERT_EQ((size_t) 1, p.nAtoms(p.speciesIndex("CO2"), p.elementIndex("C"))); ASSERT_EQ((size_t) 2, p.nAtoms(p.speciesIndex("co2"), p.elementIndex("O"))); p.setMassFractionsByName("H2:0.5, CO2:0.5"); ASSERT_DOUBLE_EQ(0.5, p.massFraction("CO2")); }
int main(int argc, char** argv) { #ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif #ifdef DEBUG_CHEMEQUIL ChemEquil_print_lvl = 0; #endif try { suppress_deprecation_warnings(); IdealGasPhase* gas = new IdealGasMix("air_below6000K.xml","air_below6000K"); vector_fp IndVar2(6, 0.0); IndVar2[0] = 1.5E5; IndVar2[1] = 3.0E5; IndVar2[2] = 9.0E5; IndVar2[3] = 2.7E6; IndVar2[4] = 6.7E6; IndVar2[5] = 1.0E7; vector_fp IndVar1(7, 0.0); IndVar1[0] = 1.0E-8; IndVar1[1] = 1.0E-7; IndVar1[2] = 1.0E-6; IndVar1[3] = 1.0E-5; IndVar1[4] = 1.0E-4; IndVar1[5] = 1.0E-3; IndVar1[6] = 1.0E-2; int nj = 6; int ni = 7; FILE* FF = fopen("table.csv","w"); size_t kk = gas->nSpecies(); std::vector<double> Xmol(kk, 0.0); const std::vector<string> &snames = gas->speciesNames(); fprintf(FF,"Temperature, Pressure,"); for (size_t k = 0; k < kk; k++) { fprintf(FF, "%11s", snames[k].c_str()); if (k < kk-1) { fprintf(FF,","); } } fprintf(FF,"\n"); for (int j=0; j<nj; j++) { for (int i=0; i<ni; i++) { double offset = -301471.39; gas->setState_UV(IndVar2[j]+offset,1.0/IndVar1[i]); double tkelvin = gas->temperature(); double pres = gas->pressure(); printf("Initial T = %g, pres = %g atm\n", tkelvin, pres/OneAtm); equilibrate(*gas,"UV", 0, 1e-12); tkelvin = gas->temperature(); pres = gas->pressure(); printf("Final T = %g, pres = %g atm\n", tkelvin, pres/OneAtm); cout << "enthalpy = " << gas->enthalpy_mass() << endl; cout << "entropy = " << gas->entropy_mass() << endl; cout << "Gibbs function = " << gas->gibbs_mass() << endl; cout << "heat capacity c_p = " << gas->cp_mass() << endl; cout << "heat capacity c_v = " << gas->cv_mass() << endl << endl; gas->getMoleFractions(DATA_PTR(Xmol)); fprintf(FF,"%10.4g, %10.4g,", tkelvin, pres); for (size_t k = 0; k < kk; k++) { if (fabs(Xmol[k]) < 1.0E-130) { fprintf(FF," %10.4g", 0.0); } else { fprintf(FF," %10.4g", Xmol[k]); } if (k < kk-1) { fprintf(FF,","); } } fprintf(FF,"\n"); } } delete gas; fclose(FF); } catch (CanteraError& err) { std::cout << err.what() << std::endl; return -1; } return 0; }
int main(int argc, char **argv) { #ifdef DEBUG_CHEMEQUIL ChemEquil_print_lvl = 0; #endif try { IdealGasPhase* gas = new IdealGasMix("air_below6000K.xml","air_below6000K"); vector_fp IndVar2(6, 0.0); IndVar2[0] = 1.5E5; IndVar2[1] = 3.0E5; IndVar2[2] = 9.0E5; IndVar2[3] = 2.7E6; IndVar2[4] = 6.7E6; IndVar2[5] = 1.0E7; vector_fp IndVar1(7, 0.0); IndVar1[0] = 1.0E-8; IndVar1[1] = 1.0E-7; IndVar1[2] = 1.0E-6; IndVar1[3] = 1.0E-5; IndVar1[4] = 1.0E-4; IndVar1[5] = 1.0E-3; IndVar1[6] = 1.0E-2; int nj = 6; int ni = 7; FILE *FF = fopen("table.csv","w"); int kk = gas->nSpecies(); std::vector<double> Xmol(kk, 0.0); const std::vector<string> &snames = gas->speciesNames(); fprintf(FF,"Temperature, Pressure,"); for (int k = 0; k < kk; k++) { fprintf(FF, "%11s", snames[k].c_str()); if (k < kk-1) { fprintf(FF,","); } } fprintf(FF,"\n"); for (int j=0; j<nj; j++) { for (int i=0; i<ni; i++) { double offset = -301471.39; gas->setState_UV(IndVar2[j]+offset,1.0/IndVar1[i]); double tkelvin = gas->temperature(); double pres = gas->pressure(); printf("Initial T = %g, pres = %g atm \n", tkelvin, pres/OneAtm); beginLogGroup("topEquil", -1); equilibrate(*gas,"UV", -1); endLogGroup("topEquil"); cout << report(*gas) << endl; tkelvin = gas->temperature(); pres = gas->pressure(); printf("Final T = %g, pres = %g atm\n", tkelvin, pres/OneAtm); gas->getMoleFractions(DATA_PTR(Xmol)); fprintf(FF,"%10.4g, %10.4g,", tkelvin, pres); for (int k = 0; k < kk; k++) { if (fabs(Xmol[k]) < 1.0E-130) { fprintf(FF," %10.4g", 0.0); } else { fprintf(FF," %10.4g", Xmol[k]); } if (k < kk-1) { fprintf(FF,","); } } fprintf(FF,"\n"); } } delete gas; fclose(FF); } catch (CanteraError) { showErrors(); } return 0; }