/*! * @file flamespeed.cpp * C++ demo program to compute flame speeds using GRI-Mech. */ #include "cantera/oneD/Sim1D.h" #include "cantera/oneD/Inlet1D.h" #include "cantera/oneD/StFlow.h" #include "cantera/IdealGasMix.h" #include "cantera/transport.h" using namespace Cantera; using std::cout; using std::endl; int flamespeed(double phi) { try { IdealGasMix gas("gri30.cti","gri30_mix"); doublereal temp = 300.0; // K doublereal pressure = 1.0*OneAtm; //atm doublereal uin=0.3; //m/sec gas.setState_TPX(temp, pressure, "CH4:1.0, O2:2.0, N2:7.52"); size_t nsp = gas.nSpecies(); vector_fp x(nsp); doublereal C_atoms=1.0; doublereal H_atoms=4.0; doublereal ax=C_atoms+H_atoms/4.0; doublereal fa_stoic=1.0/(4.76*ax); for (size_t k=0; k trmix(newTransportMgr("Mix", &gas)); std::auto_ptr trmulti(newTransportMgr("Multi", &gas)); flow.setTransport(*trmix); flow.setKinetics(gas); flow.setPressure(pressure); //------- step 2: create the inlet ----------------------- Inlet1D inlet; inlet.setMoleFractions(DATA_PTR(x)); doublereal mdot=uin*rho_in; inlet.setMdot(mdot); inlet.setTemperature(temp); //------- step 3: create the outlet --------------------- Outlet1D outlet; //=================== create the container and insert the domains ===== std::vector domains; domains.push_back(&inlet); domains.push_back(&flow); domains.push_back(&outlet); Sim1D flame(domains); //----------- Supply initial guess---------------------- vector_fp locs; vector_fp value; locs.resize(3); value.resize(3); //ramp values from inlet to adiabatic flame conditions // over 70% of domain and then level off at equilibrium double z1=0.7; double uout; uout=inlet.mdot()/rho_out; uin=inlet.mdot()/rho_in; locs[0]=0.0; locs[1]=z1; locs[2]=1.0; value[0]=uin; value[1]=uout; value[2]=uout; flame.setInitialGuess("u",locs,value); value[0]=temp; value[1]=Tad; value[2]=Tad; flame.setInitialGuess("T",locs,value); for (size_t i=0; i zvec,Tvec,COvec,CO2vec,Uvec; printf("\n%9s\t%8s\t%5s\t%7s\n","z (m)", "T (K)", "U (m/s)", "Y(CO)"); for (int n=0; n> phi; return flamespeed(phi); }