cantera/test_problems/fracCoeff/fracCoeff.cpp
2012-02-12 02:47:21 +00:00

193 lines
4.9 KiB
C++

/**
* @file runDiamond.cpp
*
*/
// Example
//
// Note that this example needs updating. It works fine, but is
// written in a way that is less than transparent or
// user-friendly. This could be rewritten using class Interface to
// make things simpler.
#include <iostream>
#include <string>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
#ifdef DEBUG_HKM
int iDebug_HKM = 0;
#endif
/*****************************************************************/
/*****************************************************************/
/*****************************************************************/
#ifdef SRCDIRTREE
#include "cantera/base/ct_defs.h"
#include "cantera/base/ctml.h"
#include "cantera/kinetics/GasKinetics.h"
#include "importCTML.h"
#include "cantera/thermo/ThermoPhase.h"
#include "cantera/kinetics/InterfaceKinetics.h"
#else
#include "cantera/Cantera.h"
#include "cantera/kinetics.h"
#endif
using namespace Cantera;
void printDbl(double val)
{
if (fabs(val) < 5.0E-200) {
cout << " nil";
} else {
cout << val;
}
}
int main(int argc, char** argv)
{
#ifdef _MSC_VER
_set_output_format(_TWO_DIGIT_EXPONENT);
#endif
int i, k;
string infile = "frac.xml";
double x[10], kc[10];
double cdot[10], ddot[10];
//double fwd_rop[10];
try {
XML_Node* xc = new XML_Node();
string path = findInputFile(infile);
ctml::get_CTML_Tree(xc, path);
XML_Node* const xg = xc->findNameID("phase", "gas");
ThermoPhase* gasTP = newPhase(*xg);
int nsp = gasTP->nSpecies();
cout << "Number of species = " << nsp << endl;
vector<ThermoPhase*> phaseList;
phaseList.push_back(gasTP);
GasKinetics* iKin_ptr = new GasKinetics();
importKinetics(*xg, phaseList, iKin_ptr);
int nr = iKin_ptr->nReactions();
cout << "Number of reactions = " << nr << endl;
int iH2 = gasTP->speciesIndex("H2");
int iH = gasTP->speciesIndex("H");
int iO2 = gasTP->speciesIndex("O2");
int iOH = gasTP->speciesIndex("OH");
int iH2O = gasTP->speciesIndex("H2O");
for (i = 0; i < nsp; i++) {
x[i] = 0.0;
}
x[iH2O] = 1.0/2.0;
x[iOH] = 0.1/2.0;
x[iH] = 0.2/2.0;
x[iO2] = 0.3/2.0;
x[iH2] = 0.4/2.0;
double p = OneAtm;
gasTP->setState_TPX(2000., p, x);
double src[20];
for (i = 0; i < 20; i++) {
src[i] = 0.0;
}
iKin_ptr->getNetProductionRates(src);
double fwd_rop[10];
iKin_ptr->getFwdRatesOfProgress(fwd_rop);
cout << "fwd_rop[0] = " << fwd_rop[0] << endl;
cout << "fwd_rop[1] = " << fwd_rop[1] << endl;
iKin_ptr->getCreationRates(cdot);
iKin_ptr->getDestructionRates(ddot);
for (k = 0; k < nsp; k++) {
string sss = gasTP->speciesName(k);
cout << k << " " << sss << " ";
printDbl(src[k]);
cout << endl;
}
printf("Creation Rates: \n");
for (k = 0; k < nsp - 1; k++) {
string sss = gasTP->speciesName(k);
cout << k << " " << sss << " ";
cout << cdot[k] << " ";
cout << cdot[k] / fwd_rop[0] << " ";
cout << endl;
}
string sss = gasTP->speciesName(iH2O);
cout << iH2O << " " << sss << " ";
cout << cdot[iH2O] << " ";
cout << cdot[iH2O] / fwd_rop[1] << " ";
cout << endl;
printf("Destruction Rates: \n");
for (k = 0; k < nsp-1; k++) {
string sss = gasTP->speciesName(k);
cout << k << " " << sss << " ";
cout << ddot[k] << " ";
cout << ddot[k] / fwd_rop[1] << " ";
cout << endl;
}
sss = gasTP->speciesName(iH2O);
cout << iH2O << " " << sss << " ";
cout << ddot[iH2O] << " ";
cout << ddot[iH2O] / fwd_rop[0] << " ";
cout << endl;
double c[10];
gasTP->getConcentrations(c);
double order_H2 = 0.8;
double order_OH = 2.0;
double order_O2 = 1.0;
double kf[10];
iKin_ptr->getFwdRateConstants(kf);
printf("kf[0] = %g\n", kf[0]);
printf("kf[1] = %g\n", kf[1]);
//double cprod0 = c[iH2O];
double cprod1 = pow(c[iH2], order_H2) * pow(c[iOH], order_OH) * pow(c[iO2], order_O2);
printf("equal numbers 0: %g %g \n", kf[0] * c[iH2O], fwd_rop[0]);
printf("equal numbers 1: %g %g\n", kf[1] * cprod1, fwd_rop[1]);
iKin_ptr->getEquilibriumConstants(kc);
printf("Equilibrium constants for irreversible fractional rxns:\n");
printf("Kc[0] = %g\n", kc[0]);
printf("Kc[1] = %g\n", kc[1]);
delete(iKin_ptr);
iKin_ptr = 0;
delete(gasTP);
delete(xc);
appdelete();
} catch (CanteraError) {
showErrors(cout);
}
return 0;
}
/***********************************************************/