added comments

This commit is contained in:
Dave Goodwin 2004-06-04 05:19:30 +00:00
parent e26bf5f6c2
commit cb97e7387a
17 changed files with 6978 additions and 4413 deletions

View file

@ -2,26 +2,36 @@
import sys
bindir = '/usr/local/bin'
libdir = '/Users/dgg/dv/sf/cantera/build/lib/powerpc-apple-darwin7.3.0'
libdir = '/Users/dgg/dv/sf/cantera/build/lib/powerpc-apple-darwin7.4.0'
incdir = '/Users/dgg/dv/sf/cantera/build/include'
libs = '-lclib -luser -loneD -lzeroD -ltransport -lcantera -lrecipes -lcvode -lctlapack -lctmath -lctblas -ltpx -lg2c -lgcc'
dflibdir = ''
libs = ['clib', 'oneD', 'zeroD', 'transport', 'cantera', 'recipes',
'cvode', 'ctlapack', 'ctmath', 'ctblas', 'tpx']
f = open('setup.m','w')
f.write('cd cantera\nbuildux\nexit\n')
f.write('cd cantera\nbuild_cantera\nexit\n')
f.close()
fb = open('cantera/buildux.m','w')
fb = open('cantera/build_cantera.m','w')
fb.write("""
disp('building Cantera..');
mex private/ctmethods.cpp private/ctfunctions.cpp ...
mex -I"""+incdir+""" private/ctmethods.cpp private/ctfunctions.cpp ...
private/xmlmethods.cpp private/phasemethods.cpp ...
private/thermomethods.cpp private/kineticsmethods.cpp ...
private/transportmethods.cpp private/reactormethods.cpp ...
private/reactornetmethods.cpp ...
private/wallmethods.cpp private/flowdevicemethods.cpp ...
private/funcmethods.cpp ...
private/funcmethods.cpp ...
private/onedimmethods.cpp private/surfmethods.cpp private/write.cpp ...
"""+'-I'+incdir+' -L'+libdir+' '+libs+'\n'+"""disp('done.');
""")
s = ''
for lib in libs:
s += ' '+libdir+'/'+lib+'.lib ...\n'
fb.write(s)
fb.write(' "'+dflibdir+'/dformd.lib" ...\n')
fb.write(' "'+dflibdir+'/dfconsol.lib" ...\n')
fb.write(' "'+dflibdir+'/dfport.lib" \n')
fb.close()
fp = open('cantera/ctbin.m','w')

View file

@ -6,47 +6,60 @@ Dusty Gas model for transport in porous media.
from Cantera.Transport import Transport
class DustyGasTransport(Transport):
"""The Dusty Gas transport model. This class implements a
transport manager for the Dusty Gas model for the effective
transport properties of a gas in a stationary, solid, porous
medium. The only properties computed are the multicomponent
diffusion coefficients. The model does not compute viscosity or
thermal conductivity.
This class is a Python shadow class for Cantera C++ class
DustyGasTransport.
"""
def __init__(self, phase = None):
"""
phase - The object representing the gas phase within the
pores.
"""
Transport.__init__(self, model = "DustyGas", phase = phase)
def setPorosity(self, porosity):
"""Set the porosity."""
"""Set the porosity. Internal. See: set"""
self.setParameters(0, 0, [porosity, 0.0])
def setTortuosity(self, tortuosity):
"""Set the tortuosity."""
"""Set the tortuosity. Internal. See: set"""
self.setParameters(1, 0, [tortuosity, 0.0])
def setMeanPoreRadius(self, pore_radius):
"""Set the mean pore radius."""
"""Set the mean pore radius [m]. Internal. See: set"""
self.setParameters(2, 0, [pore_radius, 0.0])
def setMeanParticleDiameter(self, diameter):
"""Set the mean particle diameter."""
"""Set the mean particle diameter [m]. Internal. See: set"""
self.setParameters(3, 0, [diameter, 0.0])
def setPermeability(self, permeability):
"""Set the permeability. If not called, the value for close-packed
spheres is used."""
spheres is used. Internal."""
self.setParameters(4, 0, [permeability, 0.0])
## def molarFluxes(self,
## conc = None,
## gradConc = None,
## gradPressure = 0.0):
## self.setConcentrations(concentrations)
def set(self, **p):
"""Set model parameters. This is a convenience method that simply
calls other methods depending on the keyword.
Keywords:
porosity - Porosity. Volume fraction of pores.
tortuosity - Tortuosity. A measure of the extent to which the
pores are straight cylinders (tortuosity = 1), or are more
tortuous.
pore_radius - The pore radius [m].
- porosity
- tortuosity
- pore_radius
- diameter
- permeability
All keywords are optional.
"""
for o in p.keys():
if o == "porosity":

View file

@ -13,19 +13,30 @@ import types
class Func1:
"""A class for functors of one variable.
"""Functors of one variable.
A Functor is an object that behaves like a function. Class 'Func1'
is the base class from which several functor classes derive. These
classes are designed to be used with the Cantera kernel. """
classes are designed to allow specifying functions of time from Python
that can be used by the C++ kernel.
Functors can be added, multiplied, and divided to yield new functors.
>>> f1 = Polynomial([1.0, 0.0, 3.0]) # 3*t*t + 1
>>> f1(2.0)
___13
>>> f2 = Polynomial([-1.0, 2.0]) # 2*t - 1
>>> f2(2.0)
___5
>>> f3 = f1/f2 # (3*t*t + 1)/(2*t - 1)
>>> f3(2.0)
___4.3333333
"""
def __init__(self, typ, n, coeffs=[]):
"""
typ - functor type
n - order
coeffs - coefficient array
The constructor is meant to be called from constructors of
subclasses of Func1.
See: Polynomial, Gaussian, Arrhenius, Fourier, Const, PeriodicFunction
"""
self.n = n
self.coeffs = asarray(coeffs,'d')
@ -80,7 +91,7 @@ class Func1:
return RatioFunction(other, self)
def func_id(self):
"""Return the integer index used internally to access the
"""Internal. Return the integer index used internally to access the
kernel-level object."""
return self._func_id
@ -109,20 +120,22 @@ class Gaussian(Func1):
\f]
where
\f[
\tau = \frac{\mbox{FWHM}}{2.0\sqrt{\log(2.0)}}
\tau = \frac{\mbox{FWHM}}{2.0\sqrt{\ln(2.0)}}
\f]
Here FWHM denotes the full width at half maximum.
'FWHM' denotes the full width at half maximum.
As an example, here is how to create
a Gaussian pulse with peak amplitude 10.0, centered at time 2.0,
with full-width at half max = 0.2:
>>> f = Gaussian(A = 10.0, t0 = 2.0, FWHM = 0.2)
>>> f(2.0)
___10
>>> f(1.9)
___5
>>> f(2.1)
___5
"""
def __init__(self, A = 0.0, t0 = 0.0, FWHM = 1.0):
"""
A - Peak value.
t0 - time at which pulse is centered.
FWHM - full width at half-maximum.
"""
def __init__(self, A, t0, FWHM):
coeffs = array([A, t0, FWHM], 'd')
Func1.__init__(self, 4, 0, coeffs)
@ -134,17 +147,22 @@ class Fourier(Func1):
\f]
where
\f[
a_n = \int_{-\pi/\omega}^{\pi/\omega} f(t) \cos(n \omega t) dt
a_n = \frac{\omega}{\pi}
\int_{-\pi/\omega}^{\pi/\omega} f(t) \cos(n \omega t) dt
\f]
and
\f[
b_n = \int_{-\pi/\omega}^{\pi/\omega} f(t) \sin(n \omega t) dt.
b_n = \frac{\omega}{\pi}
\int_{-\pi/\omega}^{\pi/\omega} f(t) \sin(n \omega t) dt.
\f]
The function \f$ f(t) \f$ must be periodic, with period \f$ T = 2\pi/\omega \f$.
The function \f$ f(t) \f$ is periodic, with period \f$ T = 2\pi/\omega \f$.
As an example, a function with Fourier components up to the second harmonic
is constructed as follows:
>>> coeffs = [(a0, b0), (a1, b1), (a2, b2)]
>>> f = Fourier(omega, coeffs)
Note that b0 must be specified, but is not
used. The value of b0 is arbitrary.
Note that 'b0' must be specified, but is not
used. The value of 'b0' is arbitrary.
"""
def __init__(self, omega, coefficients):
"""
@ -164,8 +182,9 @@ class Fourier(Func1):
class Arrhenius(Func1):
"""Sum of modified Arrhenius terms. Instances of class 'Arrhenius' evaluate
\f[
f(T) = \sum_{i=1}^n A_n T^{b_n}\exp(-E_n/T)
f(T) = \sum_{n=1}^N A_n T^{b_n}\exp(-E_n/T)
\f]
Example:
>>> f = Arrhenius([(a0, b0, e0), (a1, b1, e1)])
@ -186,7 +205,16 @@ class Arrhenius(Func1):
def Const(value):
"""Constant function.
>>> f = Const(4.0) # evaluates f(t) = 4.0.
Objects created by function Const
act as functions that have a constant value.
These are used internally whenever a statement like
>>> f = Gausian(2.0, 1.0, 0.1) + 4.0
is encountered. The addition operator of class Func1 is defined
so that this is equivalent to
>>> f = SumFunction(Gaussian(2.0, 1.0, 0.1), Const(4.0))
Function Const returns instances of class Polynomial that have
degree zero, with the constant term set to the desired value.
"""
return Polynomial([value])

View file

@ -8,7 +8,6 @@ from Kinetics import Kinetics
import XML
__revision__ = "$Id$"
__log__ = "$Log: "
class Interface(SurfacePhase, Kinetics):
"""
@ -27,7 +26,7 @@ class Interface(SurfacePhase, Kinetics):
def __init__(self, src="", root=None, phases=[]):
"""
src - CTML or CTI input file name. If more than one phase is
defined in the file, src should be specified as '<filename>#<id>'
defined in the file, src should be specified as 'filename\#id'
If the file is not CTML, it will be run through the CTI -> CTML
preprocessor first.

View file

@ -14,24 +14,25 @@ __revision__ = "$Id$"
class Phase:
"""Class Phase manages basic state and constituent property
information for a homogeneous phase of matter. It does not contain
information on the equation of state, homogeneous kinetics, or
transport properties -- these attributes of the phase are the
responsibility of other classes (see the ThermoPhase, Kinetics, and
Transport classes).
"""Phases of matter.
In the C++ kernel, class Phase is only a base class for
ThermoPhase. This structure is maintained in the Python wrapper
class. Class Phase implements methods of the C++ Phase class, but
the instance is actually a 'ThermoPhase' object. Also, in C++
class Phase is itself derived from more elementary classes (State
and Constituents), but these are not exposed in Python.
Class Phase manages basic state and constituent property
information for a homogeneous phase of matter. It handles only
those properties that do not require the equation of state, namely
the temperature, density, chemical composition, and attributes of
the elements and species.
It does not know about the pressure, or any other thermodynamic property
requiring the equation of state -- class ThermoPhase derives from Phase
and adds those properties.
Class Phase is not usually instantiated directly. It is used as a
base class for class ThermoPhase.
"""
def __init__(self, index = -1):
pass
#def __init__(self, index = -1):
# pass
def phase_id(self):
"""The integer index used to access the kernel-level object.

View file

@ -8,16 +8,27 @@ import types
class ReactorBase:
"""Base class for reactors."""
"""Base class for reactors and reservoirs.
Classes Reactor and Reservoir derive from a common base class
ReactorBase. They have the same set of methods, which are all
inherited from ReactorBase.
(This is not quite true in the corresponding classes in the
Cantera C++ kernel. There class Reactor defines some methods that
class Reservoir doesn't. These are used internally by the
ReactorNet instance that integrates the system of ODEs describing
the network to evaluate the portion of the ODE system associated
with that reactor.)
"""
def __init__(self, name = '', contents = None,
volume = 1.0, energy = 'on',
type = -1, verbose = 0):
"""
Create a new ReactorBase instance. If 'contents' is specified,
method 'insert' is invoked. The 'type' parameter determines
the type of C++ Reactor object that is instantiated (1 = Reactor,
2 = Reservoir).
See class 'Reactor' for a description of the constructor parameters.
The 'type' parameter specifies whether a Reactor (type = 1) or
Reservoir (type = 2) will be created.
"""
self.__reactor_id = _cantera.reactor_new(type)
self._type = type
@ -60,12 +71,12 @@ class ReactorBase:
return s
def name(self):
"""The name of the reactor specified when it was constructed."""
"""The name of the reactor."""
return self._name
def reactor_id(self):
"""The integer index used to access the kernel reactor
object. For internal use. """
object. For internal use."""
return self.__reactor_id
def insert(self, contents):
@ -73,17 +84,19 @@ class ReactorBase:
Insert 'contents' into the reactor. Sets the objects used to compute
thermodynamic properties and kinetic rates.
"""
# store a reference to contents so that it will live as long
# as this object
self._contents = contents
if contents:
_cantera.reactor_setThermoMgr(self.__reactor_id, contents._phase_id)
_cantera.reactor_setKineticsMgr(self.__reactor_id, contents.ckin)
def setInitialTime(self, T0):
"""Deprecated.
Set the initial time. Restarts integration from this time
using the current state as the initial condition. Default: 0.0 s"""
_cantera.reactor_setInitialTime(self.__reactor_id, T0)
## def setInitialTime(self, T0):
## """Deprecated.
## Set the initial time. Restarts integration from this time
## using the current state as the initial condition. Default: 0.0 s"""
## _cantera.reactor_setInitialTime(self.__reactor_id, T0)
def _setInitialVolume(self, V0):
"""Set the initial reactor volume. """
@ -155,7 +168,9 @@ class ReactorBase:
"""The mass fraction of species s, specified either by name or
index number.
>>> y1 = r.massFraction(7)
___0.02
>>> y2 = r.massFraction('CH3O')
___0.02
"""
if type(s) == types.StringType:
kk = self._contents.speciesIndex(s)
@ -180,8 +195,10 @@ class ReactorBase:
def moleFraction(self, s):
"""The mole fraction of species s, specified either by name or
index number.
>>> x1 = r.moleFraction(7)
>>> x2 = r.moleFraction('CH3O')
>>> x1 = r.moleFraction(9)
___0.00012
>>> x2 = r.moleFraction('CH3')
___0.00012
"""
if type(s) == types.StringType:
kk = self._contents.speciesIndex(s)
@ -196,7 +213,7 @@ class ReactorBase:
the reactor:
>>> for n in r.inlets():
... print n.name(), n.massFlowRate()
See MassFlowController, Valve.
See: MassFlowController, Valve, PressureController.
"""
return self._inlets
@ -205,7 +222,7 @@ class ReactorBase:
on this reactor.
>>> for o in r.outlets():
... print o.name(), o.massFlowRate()
See MassFlowController, Valve.
See: MassFlowController, Valve, PressureController.
"""
return self._outlets
@ -213,7 +230,7 @@ class ReactorBase:
"""Return the list of walls installed on this reactor.
>>> for w in r.walls():
... print w.name()
See Wall.
See: Wall.
"""
return self._walls
@ -292,7 +309,7 @@ class Reactor(ReactorBase):
verbose = 0):
"""
contents - Reactor contents. If not specified, the reactor is
initially empty. In this case, call method insert to specify
initially empty. In this case, call method 'insert' to specify
the contents.
name - Used only to identify this reactor in output. If not
@ -440,8 +457,10 @@ class MassFlowController(FlowDevice):
"""Mass flow controllers. A mass flow controller maintains a
specified mass flow rate independent of upstream and downstream
conditions. The equation used to compute the mass flow rate is \f[
\dot m = \max(\dot m_0, 0.0), \f] where \f$ \dot m_0 \f$ is either
conditions. The equation used to compute the mass flow rate is
\f[
\dot m = \max(\dot m_0, 0.0),
\f] where \f$ \dot m_0 \f$ is either
a constant value or a function of time. Note that if \f$\dot m_0 <
0\f$, the mass flow rate will be set to zero, since reversal of
the flow direction is not allowed.
@ -694,12 +713,79 @@ _wallcount = 0
class Wall:
"""
Reactor walls.
A Wall separates two reactors, or a reactor and a reservoir.
A Wall separates two reactors, or a reactor and a reservoir. A
wall has a finite area, may conduct or radiate heat between the
two reactors on either side, and may move like a piston.
Walls are stateless objects in Cantera, meaning that no
differential equation is integrated to determine any wall
property. Since it is the wall (piston) velocity that enters the
energy equation, this means that it is the velocity, not the
acceleration or displacement, that is specified. The wall
velocity is computed from
\f[
v = K(P_{\\rm left} - P_{\\rm right}) + v_0(t),
\f]
where $K$ is a non-negative constant, and \f$v_0(t)$ is a
specified function of time. The velocity is positive if the wall is
moving to the right.
The heat flux through the wall is computed from
\f[
q = U(T_{\\rm left} - T_{\\rm right}) + \epsilon\sigma (T_{\\rm left}^4
- T_{\\rm right}^4) + q_0(t),
\f]
where \f$ U \f$ is the overall heat transfer coefficient for
conduction/convection, and \f$ \\epsilon \f$ is the emissivity.
The function \f$ q_0(t)$ is a specified function of time.
The heat flux is positive when heat flows from the reactor on the left
to the reactor on the right.
A heterogeneous reaction mechanism may be specified for one or
both of the wall surfaces. The mechanism object (typically an
instance of class Interface) must be constructed so that it is
properly linked to the object representing the fluid in the
reactor the surface in question faces. The surface temperature on
each side is taken to be equal to the temperature of the reactor
it faces.
"""
def __init__(self, left=None, right=None, name = '',
def __init__(self, left, right, name = '',
A = 1.0, K = 0.0, U = 0.0,
Q = None, velocity = None,
kinetics = [None, None]):
"""
Constructor arguments:
left - Reactor or reservoir on the left. Required.
right - Reactor or reservoir on the right. Required.
name - Name string.
If omitted, the name is 'Wall_n', where 'n' is an integer
assigned in the order walls are created.
A - Wall area [m^2]. Defaults to 1.0 m^2.
K - Wall expansion rate parameter [m/s/Pa]. Defaults to 0.0.
U - Overall heat transfer coefficient [W/m^2]. Defaults to 0.0
(adiabbatic wall).
Q - Heat flux function \f$ q_0(t) \f$ [W/m^2]. Optional. Default:
\f$ q_0(t) = 0.0 \f$.
velocity - Wall velocity function \f$ v_0(t) \f$ [m/s].
Default: \f$ v_0(t) = 0.0 \f$.
kinetics - Surface reaction mechanisms for the left-facing and
right-facing surface, respectively. These must be instances of
class Kinetics, or of a class derived from Kinetics, such as
Interface. If chemistry occurs on only one side, enter 'None'
for the non-reactive side.
"""
typ = 0
self.__wall_id = _cantera.wall_new(typ)
@ -712,7 +798,7 @@ class Wall:
if left and right:
self.install(left, right)
elif left or right:
else:
raise CanteraError('both left and right reactors must be specified.')
self.setArea(A)
self.setExpansionRateCoeff(K)
@ -723,14 +809,17 @@ class Wall:
self.setKinetics(kinetics[0],kinetics[1])
def __del__(self):
"""
Delete the Wall instance.
"""
""" Delete the Wall instance. This method is called
automatically when no Python object stores a reference to this
Wall. Since reactors and reserviors store references to all
Walls installed on them, this method will only be called after
the reactors/reservoirs have been deleted. """
_cantera.wall_del(self.__wall_id)
def ready(self):
"""
Return 1 if the wall instance is ready for use, 0 otherwise.
Return 1 if the wall instance is ready for use, 0 otherwise. Deprecated.
"""
return _cantera.wall_ready(self.__wall_id)
@ -742,7 +831,7 @@ class Wall:
def setArea(self, a):
"""
Set the area (m^2).
Set the area (m^2). The wall area may be changed manually at any time during a simulation.
"""
_cantera.wall_setArea(self.__wall_id, a)
@ -759,14 +848,15 @@ class Wall:
def setEmissivity(self, epsilon):
"""
Set the emissivity.
The radiative heat flux through the wall is computed from
\f[ q_r = \epsion \sigma (T_\ell^4 - T_r^4) \f]
"""
_cantera.wall_setEmissivity(self.__wall_id, epsilon)
def setHeatFlux(self, qfunc=None):
def setHeatFlux(self, qfunc):
"""
Specify the time-dependent heat flux function [W/m2].
'qfunc' must be a functor.
'qfunc' must be a functor (an instance of a subclass of Cantera.Func1).
See: Func1.
"""
n = 0
if qfunc: n = qfunc.func_id()
@ -777,9 +867,11 @@ class Wall:
resulting from a unit pressure drop."""
_cantera.wall_setExpansionRateCoeff(self.__wall_id, k)
def setVelocity(self, vfunc=None):
def setVelocity(self, vfunc):
"""
Specify the velocity function [m/s].
Specify the velocity function [m/s]. 'vfunc' must
be a functor (an instance of a subclass of Cantera.Func1)
See: Func1.
"""
n = 0
if vfunc: n = vfunc.func_id()
@ -791,11 +883,17 @@ class Wall:
reactor volume decreasing."""
return _cantera.wall_vdot(self.__wall_id)
def velocity(self):
return self.vdot()/self.area()
def heatFlowRate(self):
"""Rate of heat flow through the wall. A positive value
corresponds to heat flowing from the left-hand reactor to the
right-hand one."""
return _cantera.wall_Q(self.__wall_id)
def heatFlux(self):
return self.heatFlowRate()/self.area()
def install(self, left, right):
left._addWall(self, right)
@ -814,6 +912,9 @@ class Wall:
_cantera.wall_setkinetics(self.__wall_id, ileft, iright)
def set(self, **p):
"""Set various wall parameters: 'A', 'U', 'K', 'Q'. 'velocity'.
These have the same meanings as in the constructor.
"""
for item in p.keys():
if item == 'A' or item == 'area':
self.setArea(p[item])
@ -825,8 +926,8 @@ class Wall:
self.setExpansionRateCoeff(p[item])
elif item == 'Q':
self.setHeatFlux(p[item])
elif item == 'Vdot':
self.setExpansionRate(p[item])
elif item == 'velocity':
self.setVelocity(p[item])
else:
raise 'unknown parameter: ',item

View file

@ -10,10 +10,17 @@ def thermoIndex(id):
return _cantera.thermo_thermoIndex(id)
class ThermoPhase(Phase):
""" Phases of matter.
""" A phase with an equation of state.
Class ThermoPhase may be used to represent the intensive state
of a homogeneous phase of matter, which might be a gas, liquid, or solid.
Class ThermoPhase may be used to represent the intensive
thermodynamic state of a phase of matter, which might be a gas,
liquid, or solid. Class ThermoPhase extends class Phase by
providing methods that require knowledge of the equation of state.
Class ThermoPhase is not usually instantiated directly. It is used
as base class for classes Solution and Interface.
See: Solution, Interface
"""
#used in the 'equilibrate' method
@ -26,7 +33,9 @@ class ThermoPhase(Phase):
xml_phase - CTML node specifying the attributes of this phase
index - optional. If positive, create only a Python wrapper for
an existing kernel object
an existing kernel object, instead of creating a new kernel object.
The value of 'index' is the integer index number to reference the
existing kernel object.
"""
self._phase_id = 0

View file

@ -1,3 +1,22 @@
""" Cantera provides a set of classes for 'transport managers' that
manage the computation of various transport properties of a phase of
matter. Every object
representing a phase of matter for which transport properties are needed
has a transport manager assigned to
it. The transport manager has only one job: to compute the values
of the transport properties of its assigned phase.
A transport manager may do additional things not apparent to the user
in order to improve the speed of transport property evaluation. For
example, it may cache intermediate results that depend only on
temperature, so that if it happens to be called again at the same
temperature (a common occurrence) it can skip over computing the
stored temperature-dependent intermediate properties.
This is why we use the term 'manager' rather than 'calculator'
In the Cantera kernel, each different transport model is implemented by a different class derived from the genericse class Transport. A highly simplified class structure is used in the Python interface -- there is only one class
"""
import _cantera
from Numeric import asarray
import exceptions

View file

@ -1,5 +1,7 @@
"""Functions to import phase and interface definitions from CTI or
CTML files."""
CTML files. This module is imported when the Cantera package is
imported, and therfore does not need to be explicitly imported in
application programs."""
import solution
import Interface

View file

@ -384,7 +384,7 @@ static PyObject*
py_wall_setArea(PyObject *self, PyObject *args)
{
int n;
double area;
double area;
if (!PyArg_ParseTuple(args, "id:wall_setArea", &n, &area))
return NULL;
int iok = wall_setArea(n, area);

View file

@ -87,7 +87,7 @@ namespace ctml {
if (!f) {
throw CanteraError("ct2ctml","cannot open "+path+" for writing.");
}
f << "from Cantera.ctml_writer import *\n"
f << "from ctml_writer import *\n"
<< "import sys, os, os.path\n"
<< "file = \"" << file << "\"\n"
<< "base = os.path.basename(file)\n"

View file

@ -126,17 +126,21 @@ endif
python:
ifeq ($(build_python),1)
ifeq ($(build_python),2)
ifeq ($(os_is_win),0)
cd Cantera/python; @MAKE@
else
cd Cantera/python; @MAKE@ win
endif
endif
ifeq ($(build_python),1)
cd Cantera/python; @MAKE@ minbuild
endif
python-install:
ifeq ($(build_python),1)
ifneq ($(build_python),0)
cd Cantera/python; @MAKE@ install
ifeq ($(build_python),2)
@INSTALL@ -d @ct_demodir@/python
@INSTALL@ Cantera/python/examples/*.py @ct_demodir@/python
@INSTALL@ -d @ct_tutdir@/python
@ -144,11 +148,16 @@ ifeq ($(build_python),1)
@ct_tutdir@/python
chown -R @username@ @ct_demodir@/python
chown -R @username@ @ct_tutdir@/python
else
@echo 'NOT installing Python demos or tutorials'
endif
endif
matlab:
ifeq ($(build_matlab),1)
cd Cantera/matlab; @MAKE@
else
@echo 'NOT installing the Matlab toolbox'
endif
#win-matlab:

5417
config/configure vendored

File diff suppressed because it is too large Load diff

View file

@ -415,12 +415,19 @@ BUILD_CLIB=1
#
# Python Interface
#
BUILD_PYTHON=1
BUILD_PYTHON=0
if test "x$PYTHON_PACKAGE" = "xfull"; then
BUILD_PYTHON=2
elif test "x$PYTHON_PACKAGE" = "xminimal"; then
BUILD_PYTHON=1
fi
WIN_PYTHON_CMD=python
if test $BUILD_PYTHON -gt 0; then
if test -z "$PYTHON_CMD"; then
AC_PATH_PROGS(PYTHON_CMD, python2 python, "none")
if test "x$OS_IS_WIN" = "x1"; then
AC_PATH_PROGS(WIN_PYTHON_CMD, pythonw python, "none")
AC_PATH_PROGS(WIN_PYTHON_CMD, python, "none")
WIN_PYTHON_CMD=`cygpath -a -w "$WIN_PYTHON_CMD" | sed 's/\\\/\\//g'`
echo "Windows Python command: $WIN_PYTHON_CMD"
fi
@ -436,6 +443,11 @@ if test "$PYTHON_CMD" = "none"; then
echo "********************************************************************"
exit 1
fi
else
PYTHON_CMD=none
WIN_PYTHON_CMD=none
fi
AC_SUBST(BUILD_PYTHON)
if test "x$OS_IS_WIN" = "x1"; then
AC_DEFINE_UNQUOTED(PYTHON_EXE,"$WIN_PYTHON_CMD")

53
configure vendored
View file

@ -21,10 +21,14 @@
#######################################################################
CANTERA_VERSION=${CANTERA_VERSION:="1.5.4"}
# If you define this to be <prefix>, then instead of running this
# script as ./configure --prefix=<prefix> you can just run it as
# ./configure
CANTERA_CONFIG_PREFIX=${CANTERA_CONFIG_PREFIX:=""}
#----------------------------------------------------------------------
# MS-Windows Options
#----------------------------------------------------------------------
@ -33,8 +37,8 @@ CANTERA_CONFIG_PREFIX=${CANTERA_CONFIG_PREFIX:=""}
# a Windows PC.
#
# Cantera will be installed by default in c:\cantera. Change this to
# install it somewhere else
CANTERA_INSTALL_DIR=${CANTERA_INSTALL_DIR:="c:\cantera"}
# install it somewhere else. Use forward slashes in the path name.
CANTERA_INSTALL_DIR=${CANTERA_INSTALL_DIR:="c:/cantera"}
# On a PC running MS-Windows, Cantera can be built either using
# Microsoft Visual Studio, with the Visual C++ and Visual Fortran
@ -48,6 +52,7 @@ USE_VISUAL_STUDIO=${USE_VISUAL_STUDIO:="y"}
FORTRAN_LIB_DIR="D:\Program Files\Microsoft Visual Studio\DF98\LIB"
#----------------------------------------------------------------------
# Language Interfaces
#----------------------------------------------------------------------
@ -59,9 +64,12 @@ FORTRAN_LIB_DIR="D:\Program Files\Microsoft Visual Studio\DF98\LIB"
#------------ Python -------------------------------------------------
# Cantera now requires that the Python interface be built, since it
# uses Python to process input files, even when Cantera is used from
# another language (e.g. MATLAB or C++). Python 2.0 or greater is
# Cantera uses Python to process .cti input files, so if you plan to
# use these, you need to have Python on your system. (If you will only
# use CTML input files, then you don't need Python at all.)
# You only need to build the full Cantera Python interface if you plan
# to use Cantera from Python. If so, Python 2.0 or greater is
# required, and the Numeric extensions for Python are needed too. See
# file INSTALLING for more details.
#
@ -73,16 +81,24 @@ FORTRAN_LIB_DIR="D:\Program Files\Microsoft Visual Studio\DF98\LIB"
# instead of the system Python interpreter.
#PYTHON_CMD=${PYTHON_CMD:="python"}
# Set to one of the following:
# full everything needed to use Cantera from Python
# minimal only enough to process .cti files
# none don't use Python at all; only CTML input files can be used.
PYTHON_PACKAGE=${PYTHON_PACKAGE:="full"}
# Use when site packages must be put in system directories
# but Cantera tutorials must be put in user space.
# (this is pretty much the norm on many multiuser unix systems)
# Use when site packages must be put in system directories but Cantera
# tutorials must be put in user space. Note: an alternative to doing
# this is to put everything in user space, and define environment
# variable PYTHONPATH to tell Python where to find the Cantera package
#
SET_PYTHON_SITE_PACKAGE_TOPDIR=${SET_PYTHON_SITE_PACKAGE_TOPDIR:="n"}
PYTHON_SITE_PACKAGE_TOPDIR=${PYTHON_SITE_PACKAGE_TOPDIR:="/usr/local"}
#----------- Matlab --------------------------------------------------
# Set this to "y" if you want to build the Matlab toolbox. Matlab must
@ -100,7 +116,8 @@ BUILD_MATLAB_TOOLBOX=${BUILD_MATLAB_TOOLBOX:="y"}
# This allows you to derive your own classes from those provided by
# Cantera and build them automatically along with the rest of Cantera.
# All you need to do is specify the directory where your source code is
# located.
# located. This capability is not yet fully functional, but should work
# for C++ applications.
USER_SRC_DIR="Cantera/user" # don't change this
@ -168,7 +185,8 @@ ENABLE_TPX='y'
#
# LAPACK_LIBRARY=-llapack
#
# The options below do not need be set if you are using the default libraries.
# The options below do not need to be set if you are using the default
# libraries.
#
# Set to 'lower' or 'upper', depending on whether the procedure names
# in the libraries are lowercase or uppercase. If you don't know, run
@ -216,6 +234,9 @@ SHARED=${SHARED:="-shared"}
# Fortran compiler options
#-------------------------------------------------------------------
# Note: the Fortran 90 interface is currently not available. Hopefully
# it will be back at a future date...
# Cantera uses some external procedures written in Fortran 77.
# In addition, Cantera implements an interface for Fortran 90
# application programs. The parameters in this section apply
@ -232,11 +253,11 @@ FFLAGS=${FFLAGS:='-O2'}
# the additional Fortran flags required for linking, if any
#LFORT_FLAGS="-lF77 -lFI77"
# Fortran 90 module directory
FORT_MODULE_DIRECTORY=${FORT_MODULE_DIRECTORY:=$CANTERA_ROOT/include/fortran}
# Fortran 90 module directory
## FORT_MODULE_DIRECTORY=${FORT_MODULE_DIRECTORY:=$CANTERA_ROOT/include/fortran}
# Fortran 90 module search path command
FORT_MODULE_PATH_CMD=${FORT_MODULE_PATH_CMD:="-I$FORT_MODULE_DIRECTORY"}
## FORT_MODULE_PATH_CMD=${FORT_MODULE_PATH_CMD:="-I$FORT_MODULE_DIRECTORY"}
@ -271,6 +292,8 @@ CT_SHARED_LIB=${CT_SHARED_LIB:=clib}
# lowercase 'helvetica'.
RPFONT=${RPFONT:="Helvetica"}
CANTERA_VERSION=${CANTERA_VERSION:="1.5.4"}
#-----------------------------------------------------------------------
@ -284,7 +307,7 @@ export RANLIB
export BLAS_LIBRARY
export BUILD_F90
export BUILD_FORTRAN_90_INTERFACE
export BUILD_PYTHON_INTERFACE
export PYTHON_PACKAGE
export BUILD_MATLAB_TOOLBOX
#export MATLAB_CMD
export CANTERA_ROOT

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,13 @@
<?xml version="1.0"?>
<ctml>
<validate reactions="yes" species="yes"/>
<!-- phase silane -->
<!-- phase silane -->
<phase dim="3" id="silane">
<elementArray datasrc="elements.xml"> Si H He </elementArray>
<elementArray datasrc="elements.xml">Si H He </elementArray>
<speciesArray datasrc="#species_data">
H2 H HE SIH4 SI SIH SIH2 SIH3 H3SISIH SI2H6
H2SISIH2 SI3H8 SI2 SI3 </speciesArray>
H2 H HE SIH4 SI SIH SIH2 SIH3 H3SISIH SI2H6
H2SISIH2 SI3H8 SI2 SI3 </speciesArray>
<reactionArray datasrc="#reaction_data"/>
<state>
<temperature units="K">300.0</temperature>
@ -17,495 +18,495 @@
<transport model="None"/>
</phase>
<!-- species definitions -->
<!-- species definitions -->
<speciesData id="species_data">
<!-- species H2 -->
<!-- species H2 -->
<species name="H2">
<atomArray>H:2 </atomArray>
<note>TPIS78</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="200.0">
<floatArray name="coeffs" size="7">
2.344331120E+00, 7.980520750E-03, -1.947815100E-05, 2.015720940E-08,
-7.376117610E-12, -9.179351730E+02, 6.830102380E-01</floatArray>
<NASA Tmax="1000.0" Tmin="200.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.344331120E+00, 7.980520750E-03, -1.947815100E-05, 2.015720940E-08,
-7.376117610E-12, -9.179351730E+02, 6.830102380E-01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="3500.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
3.337279200E+00, -4.940247310E-05, 4.994567780E-07, -1.795663940E-10,
2.002553760E-14, -9.501589220E+02, -3.205023310E+00</floatArray>
<NASA Tmax="3500.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.337279200E+00, -4.940247310E-05, 4.994567780E-07, -1.795663940E-10,
2.002553760E-14, -9.501589220E+02, -3.205023310E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species H -->
<!-- species H -->
<species name="H">
<atomArray>H:1 </atomArray>
<note>L 7/88</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="200.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 7.053328190E-13, -1.995919640E-15, 2.300816320E-18,
-9.277323320E-22, 2.547365990E+04, -4.466828530E-01</floatArray>
<NASA Tmax="1000.0" Tmin="200.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 7.053328190E-13, -1.995919640E-15, 2.300816320E-18,
-9.277323320E-22, 2.547365990E+04, -4.466828530E-01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="3500.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
2.500000010E+00, -2.308429730E-11, 1.615619480E-14, -4.735152350E-18,
4.981973570E-22, 2.547365990E+04, -4.466829140E-01</floatArray>
<NASA Tmax="3500.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.500000010E+00, -2.308429730E-11, 1.615619480E-14, -4.735152350E-18,
4.981973570E-22, 2.547365990E+04, -4.466829140E-01</floatArray>
</NASA>
</thermo>
</species>
<!-- species HE -->
<!-- species HE -->
<species name="HE">
<atomArray>He:1 </atomArray>
<note>120186</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00,
0.000000000E+00, -7.453750000E+02, 9.153488000E-01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00,
0.000000000E+00, -7.453750000E+02, 9.153488000E-01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="5000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00,
0.000000000E+00, -7.453750000E+02, 9.153489000E-01</floatArray>
<NASA Tmax="5000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00,
0.000000000E+00, -7.453750000E+02, 9.153489000E-01</floatArray>
</NASA>
</thermo>
</species>
<!-- species SIH4 -->
<!-- species SIH4 -->
<species name="SIH4">
<atomArray>H:4 Si:1 </atomArray>
<note>90784</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
1.451640400E+00, 1.398736300E-02, -4.234563900E-06, -2.360614200E-09,
1.371208900E-12, 3.113410500E+03, 1.232185500E+01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
1.451640400E+00, 1.398736300E-02, -4.234563900E-06, -2.360614200E-09,
1.371208900E-12, 3.113410500E+03, 1.232185500E+01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="2000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
7.935938000E-01, 1.767189900E-02, -1.139800900E-05, 3.599260400E-09,
-4.524157100E-13, 3.198212700E+03, 1.524225700E+01</floatArray>
<NASA Tmax="2000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
7.935938000E-01, 1.767189900E-02, -1.139800900E-05, 3.599260400E-09,
-4.524157100E-13, 3.198212700E+03, 1.524225700E+01</floatArray>
</NASA>
</thermo>
</species>
<!-- species SI -->
<!-- species SI -->
<species name="SI">
<atomArray>Si:1 </atomArray>
<note>J 3/67</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
3.179353700E+00, -2.764699200E-03, 4.478403800E-06, -3.283317700E-09,
9.121363100E-13, 5.333903200E+04, 2.727320400E+00</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.179353700E+00, -2.764699200E-03, 4.478403800E-06, -3.283317700E-09,
9.121363100E-13, 5.333903200E+04, 2.727320400E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="5000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
2.650601400E+00, -3.576385200E-04, 2.959229300E-07, -7.280482900E-11,
5.796332900E-15, 5.343705400E+04, 5.220405700E+00</floatArray>
<NASA Tmax="5000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.650601400E+00, -3.576385200E-04, 2.959229300E-07, -7.280482900E-11,
5.796332900E-15, 5.343705400E+04, 5.220405700E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species SIH -->
<!-- species SIH -->
<species name="SIH">
<atomArray>H:1 Si:1 </atomArray>
<note>121986</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
3.836010000E+00, -2.702657000E-03, 6.849070000E-06, -5.424184000E-09,
1.472131000E-12, 4.507593000E+04, 9.350778000E-01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.836010000E+00, -2.702657000E-03, 6.849070000E-06, -5.424184000E-09,
1.472131000E-12, 4.507593000E+04, 9.350778000E-01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="2000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
3.110430000E+00, 1.094946000E-03, 2.898629000E-08, -2.745104000E-10,
7.051799000E-14, 4.516898000E+04, 4.193487000E+00</floatArray>
<NASA Tmax="2000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.110430000E+00, 1.094946000E-03, 2.898629000E-08, -2.745104000E-10,
7.051799000E-14, 4.516898000E+04, 4.193487000E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species SIH2 -->
<!-- species SIH2 -->
<species name="SIH2">
<atomArray>H:2 Si:1 </atomArray>
<note>42489</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
3.475092000E+00, 2.139338000E-03, 7.672306000E-07, 5.217668000E-10,
-9.898824000E-13, 3.147397000E+04, 4.436585000E+00</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.475092000E+00, 2.139338000E-03, 7.672306000E-07, 5.217668000E-10,
-9.898824000E-13, 3.147397000E+04, 4.436585000E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="3000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
4.142390000E+00, 2.150191000E-03, -2.190730000E-07, -2.073725000E-10,
4.741018000E-14, 3.110484000E+04, 2.930745000E-01</floatArray>
<NASA Tmax="3000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
4.142390000E+00, 2.150191000E-03, -2.190730000E-07, -2.073725000E-10,
4.741018000E-14, 3.110484000E+04, 2.930745000E-01</floatArray>
</NASA>
</thermo>
</species>
<!-- species SIH3 -->
<!-- species SIH3 -->
<species name="SIH3">
<atomArray>H:3 Si:1 </atomArray>
<note>42489</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
2.946733000E+00, 6.466764000E-03, 5.991653000E-07, -2.218413000E-09,
3.052670000E-13, 2.270173000E+04, 7.347948000E+00</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.946733000E+00, 6.466764000E-03, 5.991653000E-07, -2.218413000E-09,
3.052670000E-13, 2.270173000E+04, 7.347948000E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="3000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
5.015906000E+00, 3.732750000E-03, -3.609053000E-07, -3.729193000E-10,
8.468490000E-14, 2.190233000E+04, -4.291368000E+00</floatArray>
<NASA Tmax="3000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
5.015906000E+00, 3.732750000E-03, -3.609053000E-07, -3.729193000E-10,
8.468490000E-14, 2.190233000E+04, -4.291368000E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species H3SISIH -->
<!-- species H3SISIH -->
<species name="H3SISIH">
<atomArray>H:4 Si:2 </atomArray>
<note>111191</note>
<thermo>
<NASA P0="100000.0" Tmax="1500.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
3.698707000E+00, 1.870180000E-02, -1.430704000E-05, 6.005836000E-09,
-1.116293000E-12, 3.590825000E+04, 8.825191000E+00</floatArray>
<NASA Tmax="1500.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.698707000E+00, 1.870180000E-02, -1.430704000E-05, 6.005836000E-09,
-1.116293000E-12, 3.590825000E+04, 8.825191000E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="4000.0" Tmin="1500.0">
<floatArray name="coeffs" size="7">
1.127202000E+01, 2.538145000E-03, -2.998472000E-07, -9.465367000E-11,
1.855053000E-14, 3.297169000E+04, -3.264598000E+01</floatArray>
<NASA Tmax="4000.0" Tmin="1500.0" P0="100000.0">
<floatArray name="coeffs" size="7">
1.127202000E+01, 2.538145000E-03, -2.998472000E-07, -9.465367000E-11,
1.855053000E-14, 3.297169000E+04, -3.264598000E+01</floatArray>
</NASA>
</thermo>
</species>
<!-- species SI2H6 -->
<!-- species SI2H6 -->
<species name="SI2H6">
<atomArray>H:6 Si:2 </atomArray>
<note>90784</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
6.734798300E-01, 4.093153100E-02, -4.484125500E-05, 2.995223200E-08,
-8.901085400E-12, 7.932787500E+03, 1.862740300E+01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
6.734798300E-01, 4.093153100E-02, -4.484125500E-05, 2.995223200E-08,
-8.901085400E-12, 7.932787500E+03, 1.862740300E+01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="2000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
3.407493600E+00, 2.720647900E-02, -1.771320400E-05, 5.639117700E-09,
-7.137868200E-13, 7.532184200E+03, 6.132175400E+00</floatArray>
<NASA Tmax="2000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
3.407493600E+00, 2.720647900E-02, -1.771320400E-05, 5.639117700E-09,
-7.137868200E-13, 7.532184200E+03, 6.132175400E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species H2SISIH2 -->
<!-- species H2SISIH2 -->
<species name="H2SISIH2">
<atomArray>H:4 Si:2 </atomArray>
<note>42489</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
5.133186000E+00, 1.252855000E-02, -4.620421000E-07, -6.606075000E-09,
2.864345000E-12, 2.956915000E+04, 7.605133000E-01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
5.133186000E+00, 1.252855000E-02, -4.620421000E-07, -6.606075000E-09,
2.864345000E-12, 2.956915000E+04, 7.605133000E-01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="3000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
8.986817000E+00, 5.405047000E-03, -5.214022000E-07, -5.313742000E-10,
1.188727000E-13, 2.832748000E+04, -2.004478000E+01</floatArray>
<NASA Tmax="3000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
8.986817000E+00, 5.405047000E-03, -5.214022000E-07, -5.313742000E-10,
1.188727000E-13, 2.832748000E+04, -2.004478000E+01</floatArray>
</NASA>
</thermo>
</species>
<!-- species SI3H8 -->
<!-- species SI3H8 -->
<species name="SI3H8">
<atomArray>H:8 Si:3 </atomArray>
<note>90784</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
7.719684600E-01, 6.344274000E-02, -7.672610900E-05, 5.454371500E-08,
-1.661172900E-11, 1.207126300E+04, 2.153250700E+01</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
7.719684600E-01, 6.344274000E-02, -7.672610900E-05, 5.454371500E-08,
-1.661172900E-11, 1.207126300E+04, 2.153250700E+01</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="2000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
6.093334100E+00, 3.658011200E-02, -2.389236100E-05, 7.627193200E-09,
-9.676938400E-13, 1.129720500E+04, -2.747565400E+00</floatArray>
<NASA Tmax="2000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
6.093334100E+00, 3.658011200E-02, -2.389236100E-05, 7.627193200E-09,
-9.676938400E-13, 1.129720500E+04, -2.747565400E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species SI2 -->
<!-- species SI2 -->
<species name="SI2">
<atomArray>Si:2 </atomArray>
<note>90784</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
2.967197600E+00, 6.311955800E-03, -1.097079000E-05, 8.927868000E-09,
-2.787368900E-12, 6.987073800E+04, 9.278950300E+00</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
2.967197600E+00, 6.311955800E-03, -1.097079000E-05, 8.927868000E-09,
-2.787368900E-12, 6.987073800E+04, 9.278950300E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="2000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
4.144677900E+00, 6.523467700E-04, -5.010852000E-07, 1.806284300E-10,
-2.516111100E-14, 6.969470700E+04, 3.862736600E+00</floatArray>
<NASA Tmax="2000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
4.144677900E+00, 6.523467700E-04, -5.010852000E-07, 1.806284300E-10,
-2.516111100E-14, 6.969470700E+04, 3.862736600E+00</floatArray>
</NASA>
</thermo>
</species>
<!-- species SI3 -->
<!-- species SI3 -->
<species name="SI3">
<atomArray>Si:3 </atomArray>
<note>J 3/67</note>
<thermo>
<NASA P0="100000.0" Tmax="1000.0" Tmin="300.0">
<floatArray name="coeffs" size="7">
4.597912900E+00, 1.071527400E-02, -1.610042200E-05, 1.096920700E-08,
-2.783287500E-12, 7.476632400E+04, 3.442167100E+00</floatArray>
<NASA Tmax="1000.0" Tmin="300.0" P0="100000.0">
<floatArray name="coeffs" size="7">
4.597912900E+00, 1.071527400E-02, -1.610042200E-05, 1.096920700E-08,
-2.783287500E-12, 7.476632400E+04, 3.442167100E+00</floatArray>
</NASA>
<NASA P0="100000.0" Tmax="5000.0" Tmin="1000.0">
<floatArray name="coeffs" size="7">
7.421336000E+00, -1.170994800E-04, 8.982077500E-08, 7.193596400E-12,
-2.567083700E-15, 7.414669900E+04, -1.036527400E+01</floatArray>
<NASA Tmax="5000.0" Tmin="1000.0" P0="100000.0">
<floatArray name="coeffs" size="7">
7.421336000E+00, -1.170994800E-04, 8.982077500E-08, 7.193596400E-12,
-2.567083700E-15, 7.414669900E+04, -1.036527400E+01</floatArray>
</NASA>
</thermo>
</species>
</speciesData>
<reactionData id="reaction_data">
<!-- reaction 0001 -->
<reaction id="0001" reversible="yes">
<!-- reaction 0001 -->
<reaction reversible="yes" id="0001">
<equation>SIH4 + H [=] SIH3 + H2</equation>
<rateCoeff>
<Arrhenius>
<A> 7.800000E+11</A>
<b>0</b>
<E units="cal/mol">2260.000000</E>
<A>7.800000E+11</A>
<b>0</b>
<E units="cal/mol">2260.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>SIH4:1 H:1</reactants>
<products>H2:1 SIH3:1</products>
</reaction>
<!-- reaction 0002 -->
<reaction id="0002" reversible="yes" type="threeBody">
<!-- reaction 0002 -->
<reaction reversible="yes" type="threeBody" id="0002">
<equation>SIH4 + M [=] SIH3 + H + M</equation>
<rateCoeff>
<Arrhenius>
<A> 3.910000E+12</A>
<b>0</b>
<E units="cal/mol">89356.000000</E>
<A>3.910000E+12</A>
<b>0</b>
<E units="cal/mol">89356.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>SIH4:1</reactants>
<products>H:1 SIH3:1</products>
</reaction>
<!-- reaction 0003 -->
<reaction id="0003" reversible="yes">
<!-- reaction 0003 -->
<reaction reversible="yes" id="0003">
<equation>SIH3 + H [=] SIH2 + H2</equation>
<rateCoeff>
<Arrhenius>
<A> 7.800000E+11</A>
<b>0</b>
<E units="cal/mol">2260.000000</E>
<A>7.800000E+11</A>
<b>0</b>
<E units="cal/mol">2260.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 SIH3:1</reactants>
<products>H2:1 SIH2:1</products>
</reaction>
<!-- reaction 0004 -->
<reaction id="0004" reversible="yes" type="threeBody">
<!-- reaction 0004 -->
<reaction reversible="yes" type="threeBody" id="0004">
<equation>SI + SI + M [=] SI2 + M</equation>
<rateCoeff>
<Arrhenius>
<A> 2.470000E+10</A>
<b>0</b>
<E units="cal/mol">1178.000000</E>
<A>2.470000E+10</A>
<b>0</b>
<E units="cal/mol">1178.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>SI:2</reactants>
<products>SI2:1</products>
</reaction>
<!-- reaction 0005 -->
<reaction id="0005" reversible="yes">
<!-- reaction 0005 -->
<reaction reversible="yes" id="0005">
<equation>SIH4 + SIH2 [=] H3SISIH + H2</equation>
<rateCoeff>
<Arrhenius>
<A> 1.300000E+10</A>
<b>0</b>
<E units="cal/mol">0.000000</E>
<A>1.300000E+10</A>
<b>0</b>
<E units="cal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>SIH4:1 SIH2:1</reactants>
<products>H2:1 H3SISIH:1</products>
</reaction>
<!-- reaction 0006 -->
<reaction id="0006" reversible="yes">
<!-- reaction 0006 -->
<reaction reversible="yes" id="0006">
<equation>SIH + H2 [=] SIH2 + H</equation>
<rateCoeff>
<Arrhenius>
<A> 4.800000E+11</A>
<b>0</b>
<E units="cal/mol">23.640000</E>
<A>4.800000E+11</A>
<b>0</b>
<E units="cal/mol">23.640000</E>
</Arrhenius>
</rateCoeff>
<reactants>H2:1 SIH:1</reactants>
<products>H:1 SIH2:1</products>
</reaction>
<!-- reaction 0007 -->
<reaction id="0007" reversible="yes">
<!-- reaction 0007 -->
<reaction reversible="yes" id="0007">
<equation>SIH + SIH4 [=] H3SISIH + H</equation>
<rateCoeff>
<Arrhenius>
<A> 1.600000E+11</A>
<b>0</b>
<E units="cal/mol">0.000000</E>
<A>1.600000E+11</A>
<b>0</b>
<E units="cal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>SIH4:1 SIH:1</reactants>
<products>H:1 H3SISIH:1</products>
</reaction>
<!-- reaction 0008 -->
<reaction id="0008" reversible="yes">
<!-- reaction 0008 -->
<reaction reversible="yes" id="0008">
<equation>SI + H2 [=] SIH + H</equation>
<rateCoeff>
<Arrhenius>
<A> 1.500000E+12</A>
<b>0</b>
<E units="cal/mol">31.800000</E>
<A>1.500000E+12</A>
<b>0</b>
<E units="cal/mol">31.800000</E>
</Arrhenius>
</rateCoeff>
<reactants>H2:1 SI:1</reactants>
<products>H:1 SIH:1</products>
</reaction>
<!-- reaction 0009 -->
<reaction id="0009" reversible="yes" type="falloff">
<!-- reaction 0009 -->
<reaction reversible="yes" type="falloff" id="0009">
<equation>SIH4 (+ M) [=] SIH2 + H2 (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 3.119000E+09</A>
<b>1.669</b>
<E units="cal/mol">54710.000000</E>
<A>3.119000E+09</A>
<b>1.669</b>
<E units="cal/mol">54710.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 5.214000E+26</A>
<b>-3.5449999999999999</b>
<E units="cal/mol">57550.000000</E>
<A>5.214000E+26</A>
<b>-3.5449999999999999</b>
<E units="cal/mol">57550.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">-0.4984 888.3 209.4 2760 </falloff>
</rateCoeff>
<reactants>SIH4:1</reactants>
<products>H2:1 SIH2:1</products>
</reaction>
<!-- reaction 0010 -->
<reaction id="0010" reversible="yes" type="falloff">
<!-- reaction 0010 -->
<reaction reversible="yes" type="falloff" id="0010">
<equation>H3SISIH (+ M) [=] H2SISIH2 (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 2.540000E+13</A>
<b>-0.22389999999999999</b>
<E units="cal/mol">5381.000000</E>
<A>2.540000E+13</A>
<b>-0.22389999999999999</b>
<E units="cal/mol">5381.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 1.099000E+30</A>
<b>-5.7649999999999997</b>
<E units="cal/mol">9152.000000</E>
<A>1.099000E+30</A>
<b>-5.7649999999999997</b>
<E units="cal/mol">9152.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">-0.4202 214.5 103 136.3 </falloff>
</rateCoeff>
<reactants>H3SISIH:1</reactants>
<products>H2SISIH2:1</products>
</reaction>
<!-- reaction 0011 -->
<reaction id="0011" reversible="yes" type="falloff">
<!-- reaction 0011 -->
<reaction reversible="yes" type="falloff" id="0011">
<equation>SI3H8 (+ M) [=] SIH4 + H3SISIH (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 3.730000E+12</A>
<b>0.99199999999999999</b>
<E units="cal/mol">50850.000000</E>
<A>3.730000E+12</A>
<b>0.99199999999999999</b>
<E units="cal/mol">50850.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 4.360000E+73</A>
<b>-17.260000000000002</b>
<E units="cal/mol">59303.000000</E>
<A>4.360000E+73</A>
<b>-17.260000000000002</b>
<E units="cal/mol">59303.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">0.4157 365.3 3102 9.724 </falloff>
</rateCoeff>
<reactants>SI3H8:1</reactants>
<products>SIH4:1 H3SISIH:1</products>
</reaction>
<!-- reaction 0012 -->
<reaction id="0012" reversible="yes" type="falloff">
<!-- reaction 0012 -->
<reaction reversible="yes" type="falloff" id="0012">
<equation>SI3H8 (+ M) [=] SIH2 + SI2H6 (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 6.970000E+12</A>
<b>0.96909999999999996</b>
<E units="cal/mol">52677.000000</E>
<A>6.970000E+12</A>
<b>0.96909999999999996</b>
<E units="cal/mol">52677.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 1.730000E+66</A>
<b>-15.07</b>
<E units="cal/mol">60491.000000</E>
<A>1.730000E+66</A>
<b>-15.07</b>
<E units="cal/mol">60491.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">-3.47e-05 442 2412 128.3 </falloff>
</rateCoeff>
<reactants>SI3H8:1</reactants>
<products>SI2H6:1 SIH2:1</products>
</reaction>
<!-- reaction 0013 -->
<reaction id="0013" reversible="yes" type="falloff">
<!-- reaction 0013 -->
<reaction reversible="yes" type="falloff" id="0013">
<equation>SI2H6 (+ M) [=] H2 + H3SISIH (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 9.086000E+09</A>
<b>1.8340000000000001</b>
<E units="cal/mol">54197.000000</E>
<A>9.086000E+09</A>
<b>1.8340000000000001</b>
<E units="cal/mol">54197.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 1.945000E+41</A>
<b>-7.7720000000000002</b>
<E units="cal/mol">59023.000000</E>
<A>1.945000E+41</A>
<b>-7.7720000000000002</b>
<E units="cal/mol">59023.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">-0.1224 793.3 2400 11.39 </falloff>
</rateCoeff>
<reactants>SI2H6:1</reactants>
<products>H2:1 H3SISIH:1</products>
</reaction>
<!-- reaction 0014 -->
<reaction id="0014" reversible="yes" type="falloff">
<!-- reaction 0014 -->
<reaction reversible="yes" type="falloff" id="0014">
<equation>SI2H6 (+ M) [=] SIH4 + SIH2 (+ M)</equation>
<rateCoeff>
<Arrhenius>
<A> 1.810000E+10</A>
<b>1.7470000000000001</b>
<E units="cal/mol">50203.000000</E>
<A>1.810000E+10</A>
<b>1.7470000000000001</b>
<E units="cal/mol">50203.000000</E>
</Arrhenius>
<Arrhenius name="k0">
<A> 5.090000E+50</A>
<b>-10.369999999999999</b>
<E units="cal/mol">56034.000000</E>
<A>5.090000E+50</A>
<b>-10.369999999999999</b>
<E units="cal/mol">56034.000000</E>
</Arrhenius>
<efficiencies default="1.0"> SI2H6:4 SIH4:4 </efficiencies>
<efficiencies default="1.0">SI2H6:4 SIH4:4 </efficiencies>
<falloff type="Troe">4.375e-05 438.5 2726 438.2 </falloff>
</rateCoeff>
<reactants>SI2H6:1</reactants>