Added core Transport methods to Cython module
This commit is contained in:
parent
44fe268615
commit
a9132d1fc3
3 changed files with 103 additions and 2 deletions
|
|
@ -157,10 +157,17 @@ cdef extern from "cantera/transport/TransportBase.h" namespace "Cantera":
|
|||
cdef cppclass CxxTransport "Cantera::Transport":
|
||||
CxxTransport(CxxThermoPhase*)
|
||||
double viscosity() except +
|
||||
double thermalConductivity() except +
|
||||
|
||||
|
||||
cdef extern from "cantera/transport/DustyGasTransport.h" namespace "Cantera":
|
||||
cdef cppclass CxxDustyGasTransport "Cantera::DustyGasTransport":
|
||||
void setPorosity(double) except +
|
||||
void setTortuosity(double) except +
|
||||
void setMeanPoreRadius(double) except +
|
||||
void setMeanParticleDiameter(double) except +
|
||||
void setPermeability(double) except +
|
||||
|
||||
|
||||
cdef extern from "cantera/equil/MultiPhase.h" namespace "Cantera":
|
||||
cdef cppclass CxxMultiPhase "Cantera::MultiPhase":
|
||||
|
|
@ -315,6 +322,15 @@ cdef extern from "wrappers.h":
|
|||
cdef void kin_getDestructionRates(CxxKinetics*, double*) except +
|
||||
cdef void kin_getNetProductionRates(CxxKinetics*, double*) except +
|
||||
|
||||
# Transport properties
|
||||
cdef void tran_getMixDiffCoeffs(CxxTransport*, double*) except +
|
||||
cdef void tran_getMixDiffCoeffsMass(CxxTransport*, double*) except +
|
||||
cdef void tran_getMixDiffCoeffsMole(CxxTransport*, double*) except +
|
||||
cdef void tran_getThermalDiffCoeffs(CxxTransport*, double*) except +
|
||||
|
||||
cdef void tran_getMultiDiffCoeffs(CxxTransport*, size_t, double*) except +
|
||||
cdef void tran_getBinaryDiffCoeffs(CxxTransport*, size_t, double*) except +
|
||||
|
||||
|
||||
cdef string stringify(x)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,24 @@
|
|||
ctypedef void (*transportMethod1d)(CxxTransport*, double*) except +
|
||||
ctypedef void (*transportMethod2d)(CxxTransport*, size_t, double*) except +
|
||||
|
||||
# NOTE: These cdef functions cannot be members of Transport because they would
|
||||
# cause "layout conflicts" when creating derived classes with multiple bases,
|
||||
# e.g. class Solution. [Cython 0.16]
|
||||
cdef np.ndarray get_transport_1d(Transport tran, transportMethod1d method):
|
||||
cdef np.ndarray[np.double_t, ndim=1] data = np.empty(tran.thermo.nSpecies())
|
||||
method(tran.transport, &data[0])
|
||||
if tran._selectedSpecies.size:
|
||||
return data[tran._selectedSpecies]
|
||||
else:
|
||||
return data
|
||||
|
||||
cdef np.ndarray get_transport_2d(Transport tran, transportMethod2d method):
|
||||
cdef size_t kk = tran.thermo.nSpecies()
|
||||
cdef np.ndarray[np.double_t, ndim=2] data = np.empty((kk, kk))
|
||||
method(tran.transport, kk, &data[0,0])
|
||||
return data
|
||||
|
||||
|
||||
cdef class Transport(_SolutionBase):
|
||||
def __init__(self, *args, **kwargs):
|
||||
if self.transport == NULL:
|
||||
|
|
@ -8,10 +29,56 @@ cdef class Transport(_SolutionBase):
|
|||
def __get__(self):
|
||||
return self.transport.viscosity()
|
||||
|
||||
property thermalConductivity:
|
||||
def __get__(self):
|
||||
return self.transport.thermalConductivity()
|
||||
|
||||
property mixDiffCoeffs:
|
||||
def __get__(self):
|
||||
return get_transport_1d(self, tran_getMixDiffCoeffs)
|
||||
|
||||
property mixDiffCoeffsMass:
|
||||
def __get__(self):
|
||||
return get_transport_1d(self, tran_getMixDiffCoeffsMass)
|
||||
|
||||
property mixDiffCoeffsMole:
|
||||
def __get__(self):
|
||||
return get_transport_1d(self, tran_getMixDiffCoeffsMole)
|
||||
|
||||
property thermalDiffCoeffs:
|
||||
def __get__(self):
|
||||
return get_transport_1d(self, tran_getThermalDiffCoeffs)
|
||||
|
||||
property multiDiffCoeffs:
|
||||
def __get__(self):
|
||||
return get_transport_2d(self, tran_getMultiDiffCoeffs)
|
||||
|
||||
property binaryDiffCoeffs:
|
||||
def __get__(self):
|
||||
return get_transport_2d(self, tran_getBinaryDiffCoeffs)
|
||||
|
||||
|
||||
cdef class DustyGasTransport(Transport):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.transport = newTransportMgr(stringify("DustyGas"), self.thermo)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def setPorosity(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setPorosity(value)
|
||||
property porosity:
|
||||
def __set__(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setPorosity(value)
|
||||
|
||||
property tortuosity:
|
||||
def __set__(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setTortuosity(value)
|
||||
|
||||
property meanPoreRadius:
|
||||
def __set__(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setMeanPoreRadius(value)
|
||||
|
||||
property meanParticleDiameter:
|
||||
def __set__(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setMeanParticleDiameter(value)
|
||||
|
||||
property permeability:
|
||||
def __set__(self, value):
|
||||
(<CxxDustyGasTransport*>self.transport).setPermeability(value)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,21 @@
|
|||
#include "cantera/thermo/ThermoPhase.h"
|
||||
#include "cantera/transport/TransportBase.h"
|
||||
|
||||
// Function which populates a 1D array
|
||||
#define ARRAY_FUNC(PREFIX, CLASS_NAME, FUNC_NAME) \
|
||||
void PREFIX ## _ ## FUNC_NAME(Cantera::CLASS_NAME* object, double* data) \
|
||||
{ object->FUNC_NAME(data); }
|
||||
|
||||
// function which takes a stride as the first argument and populates a 2D array
|
||||
#define ARRAY_FUNC2(PREFIX, CLASS_NAME, FUNC_NAME) \
|
||||
void PREFIX ## _ ## FUNC_NAME(Cantera::CLASS_NAME* object, size_t dim, double* data) \
|
||||
{ object->FUNC_NAME(dim, data); }
|
||||
|
||||
|
||||
#define THERMO_1D(FUNC_NAME) ARRAY_FUNC(thermo, ThermoPhase, FUNC_NAME)
|
||||
#define KIN_1D(FUNC_NAME) ARRAY_FUNC(kin, Kinetics, FUNC_NAME)
|
||||
#define TRANSPORT_1D(FUNC_NAME) ARRAY_FUNC(tran, Transport, FUNC_NAME)
|
||||
#define TRANSPORT_2D(FUNC_NAME) ARRAY_FUNC2(tran, Transport, FUNC_NAME)
|
||||
|
||||
THERMO_1D(getMassFractions)
|
||||
THERMO_1D(setMassFractions)
|
||||
|
|
@ -47,3 +57,11 @@ KIN_1D(getDeltaSSEntropy)
|
|||
KIN_1D(getCreationRates)
|
||||
KIN_1D(getDestructionRates)
|
||||
KIN_1D(getNetProductionRates)
|
||||
|
||||
TRANSPORT_1D(getMixDiffCoeffs)
|
||||
TRANSPORT_1D(getMixDiffCoeffsMass)
|
||||
TRANSPORT_1D(getMixDiffCoeffsMole)
|
||||
TRANSPORT_1D(getThermalDiffCoeffs)
|
||||
|
||||
TRANSPORT_2D(getMultiDiffCoeffs)
|
||||
TRANSPORT_2D(getBinaryDiffCoeffs)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue