[Doc] Add C++ example showing initializaton of Kinetics and Transport

This commit is contained in:
Ray Speth 2016-05-14 15:01:09 -04:00
parent 828cca3c42
commit a2aade2419
3 changed files with 114 additions and 0 deletions

View file

@ -0,0 +1,66 @@
#include "cantera/thermo/ThermoFactory.h"
#include "cantera/kinetics/KineticsFactory.h"
#include "cantera/transport/TransportFactory.h"
using namespace Cantera;
// The actual code is put into a function that can be called from the main
// program.
void simple_demo2()
{
// Create a new phase
std::unique_ptr<ThermoPhase> gas(newPhase("gri30.cti", "gri30_mix"));
// List of phases participating in reactions (just one for homogeneous
// kinetics)
std::vector<ThermoPhase*> phases{gas.get()};
// Create the Kinetics object. Based on the phase definition used, this will
// be a GasKinetics object.
std::unique_ptr<Kinetics> kin(newKineticsMgr(gas->xml(), phases));
// Set an "interesting" mixture state where we will observe non-zero reacton
// rates.
gas->setState_TPX(500.0, 2.0*OneAtm, "CH4:1.0, O2:1.0, N2:3.76");
gas->equilibrate("HP");
gas->setState_TP(gas->temperature() - 100, gas->pressure());
// Get the net reaction rates
vector_fp wdot(kin->nReactions());
kin->getNetRatesOfProgress(wdot.data());
writelog("Net reaction rates for reactions involving CO2\n");
size_t kCO2 = gas->speciesIndex("CO2");
for (size_t i = 0; i < kin->nReactions(); i++) {
if (kin->reactantStoichCoeff(kCO2, i)
|| kin->productStoichCoeff(kCO2, i)) {
writelog("{:3d} {:30s} {: .8e}\n",
i, kin->reactionString(i), wdot[i]);
}
}
writelog("\n");
// Create a Transport object. Based on the transport model specified in the
// "gri30_mix" phase, this will be a MixGasTransport object.
std::unique_ptr<Transport> trans(newDefaultTransportMgr(gas.get()));
writelog("T viscosity thermal conductivity\n");
writelog("------ ----------- --------------------\n");
for (size_t n = 0; n < 5; n++) {
double T = 300 + 100 * n;
gas->setState_TP(T, gas->pressure());
writelog("{:.1f} {:.4e} {:.4e}\n",
T, trans->viscosity(), trans->thermalConductivity());
}
}
// the main program just calls function simple_demo2 within a 'try' block, and
// catches exceptions that might be thrown
int main()
{
try {
simple_demo2();
} catch (std::exception& err) {
std::cout << err.what() << std::endl;
}
}

View file

@ -0,0 +1,47 @@
Creating ThermoPhase, Kinetics, and Transport objects
=====================================================
The following program demonstrates the general method for creating the following
object types:
- `ThermoPhase` - represents the thermodynamic properties of mixtures containing
one or more species)
- `Kinetics` - represents a kinetic mechanism involving one or more phases)
- `Transport` - computes transport properties for a `ThermoPhase`
This program uses "factory" functions to create derived objects objects of the
appropriate type which are specified in the input file `gri30.cti`.
.. literalinclude:: demo1b.cpp
:language: c++
This program produces the output below::
Net reaction rates for reactions involving CO2
11 CO + O (+M) <=> CO2 (+M) 3.54150724e-08
13 HCO + O <=> CO2 + H 1.95680014e-11
29 CH2CO + O <=> CH2 + CO2 3.45366988e-17
30 CO + O2 <=> CO2 + O 2.70102522e-13
41 CO2 + 2 H <=> CO2 + H2 3.45305359e-08
98 CO + OH <=> CO2 + H 6.46935907e-03
119 CO + HO2 <=> CO2 + OH 1.86807529e-10
131 CH + CO2 <=> CO + HCO 9.41365695e-14
151 CH2(S) + CO2 <=> CH2 + CO2 3.11161382e-12
152 CH2(S) + CO2 <=> CH2O + CO 2.85339329e-11
225 NCO + O2 <=> CO2 + NO 3.74127282e-19
228 NCO + NO <=> CO2 + N2 6.25672779e-14
261 HNCO + O <=> CO2 + NH 6.84524890e-13
267 HNCO + OH <=> CO2 + NH2 7.78871264e-10
279 CO2 + NH <=> CO + HNO -3.30333658e-09
281 NCO + NO2 <=> CO2 + N2O 2.14286686e-20
282 CO2 + N <=> CO + NO 6.42658283e-10
289 CH2 + O2 => CO2 + 2 H 1.51032319e-18
304 CH2CHO + O => CH2 + CO2 + H 1.00331734e-19
T viscosity thermal conductivity
------ ----------- --------------------
300.0 1.6658e-05 4.2089e-02
400.0 2.0861e-05 5.2537e-02
500.0 2.4681e-05 6.2451e-02
600.0 2.8218e-05 7.2157e-02
700.0 3.1534e-05 8.1754e-02

View file

@ -11,3 +11,4 @@ C++ Interface User's Guide
thermo
simple-example
equil-example
factories