///////////////////////////////////////////////////////////// // // mixture-averaged transport properties // // copyright California Institute of Technology 2002 // ///////////////////////////////////////////////////////////// #include #include "example_utils.h" #include #include using namespace Cantera; using std::cout; using std::endl; template void makeTransportDataLabels(const G& gas, V& names) { int nsp = gas.nSpecies(); names.resize(nsp + 3); names[0] = "Temperature (K)"; names[1] = "Viscosity ()"; names[2] = "Thermal Conductivity (W/m-K)"; int k; for (k = 0; k < nsp; k++) { names[3+k] = gas.speciesName(k); } } template void plotTransportSoln(std::string fname, std::string fmt, std::string title, const G& gas, const A& soln) { std::vector names; makeTransportDataLabels(gas, names); writePlotFile(fname, fmt, title, names, soln); } int transport_example2(int job) { try { cout << "Multicomponent transport properties." << endl; if (job > 0) { cout << "Viscosity, thermal conductivity, and thermal diffusion\n" " coefficients at 2 atm for a " << "range of temperatures" << endl; } if (job <= 1) { return 0; } // create a gas mixture, and set its state IdealGasMix gas("gri30.cti", "gri30"); doublereal temp = 2000.0; doublereal pres = 2.0*OneAtm; gas.setState_TPX(temp, pres, "H2:1.0, O2:0.5, CH4:0.1, N2:0.2"); equilibrate(gas,"TP"); // create a transport manager that implements // multicomponent transport properties Transport* tr = newTransportMgr("Multi", &gas); int nsp = gas.nSpecies(); // create a 2D array to hold the outputs int ntemps = 20; Array2D output(nsp+3, ntemps); // main loop for (int i = 0; i < ntemps; i++) { temp = 500.0 + 100.0*i; gas.setState_TP(temp, pres); output(0,i) = temp; output(1,i) = tr->viscosity(); output(2,i) = tr->thermalConductivity(); tr->getThermalDiffCoeffs(&output(3,i)); } // make a Tecplot data file and an Excel spreadsheet std::string plotTitle = "transport example 2: " "multicomponent transport properties"; plotTransportSoln("tr2.dat", "TEC", plotTitle, gas, output); plotTransportSoln("tr2.csv", "XL", plotTitle, gas, output); // print final temperature cout << "Output files:" << endl << " tr2.csv (Excel CSV file)" << endl << " tr2.dat (Tecplot data file)" << endl; return 0; } // handle exceptions thrown by Cantera catch (CanteraError) { showErrors(cout); cout << " terminating... " << endl; appdelete(); return -1; } }