Cantera/Gases: Difference between revisions
From charlesreid1
No edit summary |
|||
| Line 1: | Line 1: | ||
Some scattered notes on Cantera gas objects. | Some scattered notes on Cantera gas objects. | ||
=Theory= | |||
We can begin with the Gibbs phase rule, which relates the number of phases and components in a system to the number of degrees of freedom - the number of independent thermodynamic parameters that must be set to fix the state of a gas. | |||
More info over at [[Cantera/Phases]] | |||
=Specifying Thermochemical State= | =Specifying Thermochemical State= | ||
Revision as of 02:17, 27 March 2014
Some scattered notes on Cantera gas objects.
Theory
We can begin with the Gibbs phase rule, which relates the number of phases and components in a system to the number of degrees of freedom - the number of independent thermodynamic parameters that must be set to fix the state of a gas.
More info over at Cantera/Phases
Specifying Thermochemical State
The Basics
For a multicomponent mixture of gas containing N components, the thermochemical state of the gas can be specified by specifying N+1 thermodynamic variables.
The gas state can be specified using the set method, which takes a couple of keywords for specifying which variable you wish to set. The following parameters are mass-specific, meaning they are specified per unit mass:
- Pressure
P - Temperature
T - Specific volume
V - Mass density
Rho - Mass fractions
Y - Mole fractions
X - Enthalpy
H - Entropy
S - Internal energy
U
(Note that if composition is not specified, it remains unchanged.)
These keywords can be used with the phase set method,
from Cantera import *
g = GRI30()
g.set(X="H2:1.0, CO2:3.0", T=298.15, P=OneAtm)
g.set(P=OneAtm, Rho=0.10)
Specifying Composition
Composition can be specified either as a string, or as an array. If a specified composition sums to greater than 1, the values for each species are normalized.
Specifying composition as a string is the "human method": it ensures the user can specify which species have which quantities, in an arbitrary order.
Specifying composition as an array is the "machine method": it ensures that scripts can pass composition information quickly and easily to gases, without having to translate back and forth between strings or lose information through string formatting.
Let's make a simple gas from an H2O2 oxidation mechanism:
In [11]: g = importPhase('h2o2.cti')
In [12]: g.set(T=298.15,P=OneAtm)
In [13]: g.nSpecies()
Out[13]: 9
In [14]: g.speciesNames()
Out[14]: ['H2', 'H', 'O', 'O2', 'OH', 'H2O', 'HO2', 'H2O2', 'AR']
String Specification
We can specify composition with a string. Using mole fractions first:
In [15]: g.set(X="H2:2.0, O2:1.0")
Using mass fractions:
In [16]: g.set(Y="H2:1.0, O2:8.0")
Vector Specification
Similarly, we can specify composition with a vector. First, we set up the problem by grabbing some information:
In [26]: iO2 = g.speciesIndex('O2')
In [27]: iH2 = g.speciesIndex('H2')
In [28]: nsp = g.nSpecies()
Now we can set our mole fractions:
In [29]: molefracs = zeros(nsp,); molefracs[iO2] = 1; molefracs[iH2] = 2 In [30]: g.set(X=molefracs)
Alternatively, we can set the mass fractions:
In [29]: massfracs = zeros(nsp,); massfracs[iO2] = 1.0; massfracs[iH2] = 8.0 In [30]: g.set(X=massfracs)
Code
Python Interface
The Python interface implements the set() method as a standalone function, in the following file:
/path/to/cantera/interfaces/python/Cantera/set.py
The set() method is a wrapper function to methods that individually set thermodynamic property, like setTemperature() or setDensity(), or methods that set pairs of properties, like setState_UV() or setState_HP().
These methods, in turn, are defined in the Phase classes, which themselves utilize the C API to specify these thermodynamic properties.