[Python] Add ability to get/set species transport data
This commit is contained in:
parent
fd659c09ea
commit
184bff328d
4 changed files with 121 additions and 0 deletions
|
|
@ -82,10 +82,13 @@ cdef extern from "cantera/thermo/SpeciesThermoFactory.h":
|
|||
(int, double, double, double, double*) except +
|
||||
|
||||
cdef extern from "cantera/thermo/Species.h" namespace "Cantera":
|
||||
cdef cppclass CxxTransportData "Cantera::TransportData"
|
||||
|
||||
cdef cppclass CxxSpecies "Cantera::Species":
|
||||
CxxSpecies()
|
||||
CxxSpecies(string, Composition)
|
||||
shared_ptr[CxxSpeciesThermo] thermo
|
||||
shared_ptr[CxxTransportData] transport
|
||||
|
||||
string name
|
||||
Composition composition
|
||||
|
|
@ -379,6 +382,24 @@ cdef extern from "cantera/transport/DustyGasTransport.h" namespace "Cantera":
|
|||
void getMolarFluxes(double*, double*, double, double*) except +
|
||||
|
||||
|
||||
cdef extern from "cantera/transport/TransportData.h" namespace "Cantera":
|
||||
cdef cppclass CxxTransportData "Cantera::TransportData":
|
||||
CxxTransportData()
|
||||
|
||||
cdef cppclass CxxGasTransportData "Cantera::GasTransportData" (CxxTransportData):
|
||||
CxxGasTransportData()
|
||||
CxxGasTransportData(string, double, double, double, double, double, double)
|
||||
void setCustomaryUnits(string, double, double, double, double, double, double)
|
||||
|
||||
string geometry
|
||||
double diameter
|
||||
double well_depth
|
||||
double dipole
|
||||
double polarizability
|
||||
double rotational_relaxation
|
||||
double acentric_factor
|
||||
|
||||
|
||||
cdef extern from "cantera/equil/MultiPhase.h" namespace "Cantera":
|
||||
cdef cppclass CxxMultiPhase "Cantera::MultiPhase":
|
||||
CxxMultiPhase()
|
||||
|
|
@ -777,6 +798,11 @@ cdef class SpeciesThermo:
|
|||
cdef CxxSpeciesThermo* spthermo
|
||||
cdef _assign(self, shared_ptr[CxxSpeciesThermo] other)
|
||||
|
||||
cdef class GasTransportData:
|
||||
cdef shared_ptr[CxxTransportData] _data
|
||||
cdef CxxGasTransportData* data
|
||||
cdef _assign(self, shared_ptr[CxxTransportData] other)
|
||||
|
||||
cdef class _SolutionBase:
|
||||
cdef CxxThermoPhase* thermo
|
||||
cdef CxxKinetics* kinetics
|
||||
|
|
|
|||
|
|
@ -131,3 +131,29 @@ class TestDustyGas(utilities.CanteraTest):
|
|||
|
||||
# Not sure why the following condition is not satisfied:
|
||||
# self.assertNear(sum(fluxes1) / sum(abs(fluxes1)), 0.0)
|
||||
|
||||
|
||||
class TestTransportData(utilities.CanteraTest):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.gas = ct.Solution('h2o2.xml')
|
||||
cls.gas.X = 'H2O:0.6, H2:0.4'
|
||||
|
||||
def test_read(self):
|
||||
tr = self.gas.species('H2').transport
|
||||
self.assertEqual(tr.geometry, 'linear')
|
||||
self.assertNear(tr.diameter, 2.92e-10)
|
||||
self.assertNear(tr.well_depth, 38.0 * ct.boltzmann)
|
||||
self.assertNear(tr.polarizability, 0.79e-30)
|
||||
self.assertNear(tr.rotational_relaxation, 280)
|
||||
|
||||
def test_set_customary_units(self):
|
||||
tr1 = ct.GasTransportData()
|
||||
tr1.set_customary_units('nonlinear', 2.60, 572.40, 1.84, 0.0, 4.00)
|
||||
tr2 = self.gas.species('H2O').transport
|
||||
self.assertEqual(tr1.geometry, tr2.geometry)
|
||||
self.assertNear(tr1.diameter, tr2.diameter)
|
||||
self.assertNear(tr1.well_depth, tr2.well_depth)
|
||||
self.assertNear(tr1.dipole, tr2.dipole)
|
||||
self.assertNear(tr1.polarizability, tr2.polarizability)
|
||||
self.assertNear(tr1.rotational_relaxation, tr2.rotational_relaxation)
|
||||
|
|
|
|||
|
|
@ -123,6 +123,12 @@ cdef class Species:
|
|||
def __set__(self, SpeciesThermo spthermo):
|
||||
self.species.thermo = spthermo._spthermo
|
||||
|
||||
property transport:
|
||||
def __get__(self):
|
||||
data = GasTransportData(init=False)
|
||||
data._assign(self.species.transport)
|
||||
return data
|
||||
|
||||
|
||||
cdef class ThermoPhase(_SolutionBase):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -16,6 +16,69 @@ cdef np.ndarray get_transport_2d(Transport tran, transportMethod2d method):
|
|||
return data
|
||||
|
||||
|
||||
cdef class GasTransportData:
|
||||
def __cinit__(self, geometry='', diameter=-1, well_depth=-1,
|
||||
dipole=0.0, polarizability=0.0, rotational_relaxation=0.0,
|
||||
acentric_factor=0.0, *, init=True):
|
||||
if init:
|
||||
self._data.reset(new CxxGasTransportData(stringify(geometry),
|
||||
diameter, well_depth, dipole, polarizability,
|
||||
rotational_relaxation, acentric_factor))
|
||||
self.data = <CxxGasTransportData*?>self._data.get()
|
||||
|
||||
cdef _assign(self, shared_ptr[CxxTransportData] other):
|
||||
self._data = other
|
||||
self.data = <CxxGasTransportData*?>self._data.get()
|
||||
|
||||
def set_customary_units(self, geometry, diameter, well_depth, dipole=0.0,
|
||||
polarizability=0.0, rotational_relaxation=0.0,
|
||||
acentric_factor=0.0):
|
||||
self.data.setCustomaryUnits(stringify(geometry), diameter, well_depth,
|
||||
dipole, polarizability, rotational_relaxation, acentric_factor)
|
||||
|
||||
property geometry:
|
||||
def __get__(self):
|
||||
return pystr(self.data.geometry)
|
||||
def __set__(self, geometry):
|
||||
self.data.geometry = stringify(geometry)
|
||||
|
||||
property diameter:
|
||||
def __get__(self):
|
||||
return self.data.diameter
|
||||
def __set__(self, diameter):
|
||||
self.data.diameter = diameter
|
||||
|
||||
property well_depth:
|
||||
def __get__(self):
|
||||
return self.data.well_depth
|
||||
def __set__(self, well_depth):
|
||||
self.data.well_depth = well_depth
|
||||
|
||||
property dipole:
|
||||
def __get__(self):
|
||||
return self.data.dipole
|
||||
def __set__(self, dipole):
|
||||
self.data.dipole = dipole
|
||||
|
||||
property polarizability:
|
||||
def __get__(self):
|
||||
return self.data.polarizability
|
||||
def __set__(self, polarizability):
|
||||
self.data.polarizability = polarizability
|
||||
|
||||
property rotational_relaxation:
|
||||
def __get__(self):
|
||||
return self.data.rotational_relaxation
|
||||
def __set__(self, rotational_relaxation):
|
||||
self.data.rotational_relaxation = rotational_relaxation
|
||||
|
||||
property acentric_factor:
|
||||
def __get__(self):
|
||||
return self.data.acentric_factor
|
||||
def __set__(self, acentric_factor):
|
||||
self.data.acentric_factor = acentric_factor
|
||||
|
||||
|
||||
cdef class Transport(_SolutionBase):
|
||||
"""
|
||||
This class is used to compute transport properties for a phase of matter.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue