[Python] Move composite classes out of Cython
This makes it easier to add more features to these composite classes without increasing the size of the compiled Cython extension.
This commit is contained in:
parent
e332fcbba2
commit
8a86fed0ca
4 changed files with 89 additions and 85 deletions
|
|
@ -19,7 +19,6 @@ include "thermo.pyx"
|
|||
include "reaction.pyx"
|
||||
include "kinetics.pyx"
|
||||
include "transport.pyx"
|
||||
include "composite.pyx"
|
||||
|
||||
include "mixture.pyx"
|
||||
include "reactor.pyx"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,94 @@ from ._cantera import *
|
|||
import numpy as np
|
||||
import csv as _csv
|
||||
|
||||
class Solution(ThermoPhase, Kinetics, Transport):
|
||||
"""
|
||||
A class for chemically-reacting solutions. Instances can be created to
|
||||
represent any type of solution -- a mixture of gases, a liquid solution, or
|
||||
a solid solution, for example.
|
||||
|
||||
Class `Solution` derives from classes `ThermoPhase`, `Kinetics`, and
|
||||
`Transport`. It defines no methods of its own, and is provided so that a
|
||||
single object can be used to compute thermodynamic, kinetic, and transport
|
||||
properties of a solution.
|
||||
|
||||
To skip initialization of the Transport object, pass the keyword argument
|
||||
``transport_model=None`` to the `Solution` constructor.
|
||||
|
||||
The most common way to instantiate `Solution` objects is by using a phase
|
||||
definition, species and reactions defined in an input file::
|
||||
|
||||
gas = ct.Solution('gri30.cti')
|
||||
|
||||
If an input file defines multiple phases, the phase *name* (in CTI) or *id*
|
||||
(in XML) can be used to specify the desired phase::
|
||||
|
||||
gas = ct.Solution('diamond.cti', 'gas')
|
||||
diamond = ct.Solution('diamond.cti', 'diamond')
|
||||
|
||||
`Solution` objects can also be constructed using `Species` and `Reaction`
|
||||
objects which can themselves either be imported from input files or defined
|
||||
directly in Python::
|
||||
|
||||
spec = ct.Species.listFromFile('gri30.cti')
|
||||
rxns = ct.Reaction.listFromFile('gri30.cti')
|
||||
gas = ct.Solution(thermo='IdealGas', kinetics='GasKinetics',
|
||||
species=spec, reactions=rxns)
|
||||
|
||||
where the ``thermo`` and ``kinetics`` keyword arguments are strings
|
||||
specifying the thermodynamic and kinetics model, respectively, and
|
||||
``species`` and ``reactions`` keyword arguments are lists of `Species` and
|
||||
`Reaction` objects, respectively.
|
||||
|
||||
For non-trivial uses cases of this functionality, see the examples
|
||||
:ref:`py-example-extract_submechanism.py` and
|
||||
:ref:`py-example-mechanism_reduction.py`.
|
||||
|
||||
In addition, `Solution` objects can be constructed by passing the text of
|
||||
the CTI or XML phase definition in directly, using the ``source`` keyword
|
||||
argument::
|
||||
|
||||
cti_def = '''
|
||||
ideal_gas(name='gas', elements='O H Ar',
|
||||
species='gri30: all',
|
||||
reactions='gri30: all',
|
||||
options=['skip_undeclared_elements', 'skip_undeclared_species', 'skip_undeclared_third_bodies'],
|
||||
initial_state=state(temperature=300, pressure=101325))'''
|
||||
gas = ct.Solution(source=cti_def)
|
||||
"""
|
||||
__slots__ = ()
|
||||
|
||||
|
||||
class Interface(InterfacePhase, InterfaceKinetics):
|
||||
"""
|
||||
Two-dimensional interfaces.
|
||||
|
||||
Instances of class `Interface` represent reacting 2D interfaces between bulk
|
||||
3D phases. Class `Interface` defines no methods of its own. All of its
|
||||
methods derive from either `InterfacePhase` or `InterfaceKinetics`.
|
||||
|
||||
To construct an `Interface` object, adjacent bulk phases which participate
|
||||
in reactions need to be created and then passed in as a list in the
|
||||
``phases`` argument to the constructor::
|
||||
|
||||
gas = ct.Solution('diamond.cti', 'gas')
|
||||
diamond = ct.Solution('diamond.cti', 'diamond')
|
||||
diamond_surf = ct.Interface('diamond.cti', 'diamond_100', [gas, diamond])
|
||||
"""
|
||||
__slots__ = ('_phase_indices',)
|
||||
|
||||
|
||||
class DustyGas(ThermoPhase, Kinetics, DustyGasTransport):
|
||||
"""
|
||||
A composite class which models a gas in a stationary, solid, porous medium.
|
||||
|
||||
The only transport properties computed are the multicomponent diffusion
|
||||
coefficients. The model does not compute viscosity or thermal conductivity.
|
||||
|
||||
"""
|
||||
__slots__ = ()
|
||||
|
||||
|
||||
class Quantity(object):
|
||||
"""
|
||||
A class representing a specific quantity of a `Solution`. In addition to the
|
||||
|
|
|
|||
|
|
@ -1,84 +0,0 @@
|
|||
class Solution(ThermoPhase, Kinetics, Transport):
|
||||
"""
|
||||
A class for chemically-reacting solutions. Instances can be created to
|
||||
represent any type of solution -- a mixture of gases, a liquid solution, or
|
||||
a solid solution, for example.
|
||||
|
||||
Class `Solution` derives from classes `ThermoPhase`, `Kinetics`, and
|
||||
`Transport`. It defines no methods of its own, and is provided so that a
|
||||
single object can be used to compute thermodynamic, kinetic, and transport
|
||||
properties of a solution.
|
||||
|
||||
To skip initialization of the Transport object, pass the keyword argument
|
||||
``transport_model=None`` to the `Solution` constructor.
|
||||
|
||||
The most common way to instantiate `Solution` objects is by using a phase
|
||||
definition, species and reactions defined in an input file::
|
||||
|
||||
gas = ct.Solution('gri30.cti')
|
||||
|
||||
If an input file defines multiple phases, the phase *name* (in CTI) or *id*
|
||||
(in XML) can be used to specify the desired phase::
|
||||
|
||||
gas = ct.Solution('diamond.cti', 'gas')
|
||||
diamond = ct.Solution('diamond.cti', 'diamond')
|
||||
|
||||
`Solution` objects can also be constructed using `Species` and `Reaction`
|
||||
objects which can themselves either be imported from input files or defined
|
||||
directly in Python::
|
||||
|
||||
spec = ct.Species.listFromFile('gri30.cti')
|
||||
rxns = ct.Reaction.listFromFile('gri30.cti')
|
||||
gas = ct.Solution(thermo='IdealGas', kinetics='GasKinetics',
|
||||
species=spec, reactions=rxns)
|
||||
|
||||
where the ``thermo`` and ``kinetics`` keyword arguments are strings
|
||||
specifying the thermodynamic and kinetics model, respectively, and
|
||||
``species`` and ``reactions`` keyword arguments are lists of `Species` and
|
||||
`Reaction` objects, respectively.
|
||||
|
||||
For non-trivial uses cases of this functionality, see the examples
|
||||
:ref:`py-example-extract_submechanism.py` and
|
||||
:ref:`py-example-mechanism_reduction.py`.
|
||||
|
||||
In addition, `Solution` objects can be constructed by passing the text of
|
||||
the CTI or XML phase definition in directly, using the ``source`` keyword
|
||||
argument::
|
||||
|
||||
cti_def = '''
|
||||
ideal_gas(name='gas', elements='O H Ar',
|
||||
species='gri30: all',
|
||||
reactions='gri30: all',
|
||||
options=['skip_undeclared_elements', 'skip_undeclared_species', 'skip_undeclared_third_bodies'],
|
||||
initial_state=state(temperature=300, pressure=101325))'''
|
||||
gas = ct.Solution(source=cti_def)
|
||||
"""
|
||||
__slots__ = ()
|
||||
|
||||
class Interface(InterfacePhase, InterfaceKinetics):
|
||||
"""
|
||||
Two-dimensional interfaces.
|
||||
|
||||
Instances of class `Interface` represent reacting 2D interfaces between bulk
|
||||
3D phases. Class `Interface` defines no methods of its own. All of its
|
||||
methods derive from either `InterfacePhase` or `InterfaceKinetics`.
|
||||
|
||||
To construct an `Interface` object, adjacent bulk phases which participate
|
||||
in reactions need to be created and then passed in as a list in the
|
||||
``phases`` argument to the constructor::
|
||||
|
||||
gas = ct.Solution('diamond.cti', 'gas')
|
||||
diamond = ct.Solution('diamond.cti', 'diamond')
|
||||
diamond_surf = ct.Interface('diamond.cti', 'diamond_100', [gas, diamond])
|
||||
"""
|
||||
__slots__ = ('_phase_indices',)
|
||||
|
||||
class DustyGas(ThermoPhase, Kinetics, DustyGasTransport):
|
||||
"""
|
||||
A composite class which models a gas in a stationary, solid, porous medium.
|
||||
|
||||
The only transport properties computed are the multicomponent diffusion
|
||||
coefficients. The model does not compute viscosity or thermal conductivity.
|
||||
|
||||
"""
|
||||
__slots__ = ()
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
import numpy as np
|
||||
from ._cantera import *
|
||||
from .composite import Solution
|
||||
import csv as _csv
|
||||
|
||||
try:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue