[Transport] Replace numerical constants for Transport types with strings

This commit is contained in:
Ray Speth 2016-07-07 22:25:05 -04:00
parent 45099255de
commit bd8a5d0bc9
15 changed files with 105 additions and 73 deletions

View file

@ -24,11 +24,6 @@ const size_t c_offset_T = 2; // temperature
const size_t c_offset_L = 3; // (1/r)dP/dr const size_t c_offset_L = 3; // (1/r)dP/dr
const size_t c_offset_Y = 4; // mass fractions const size_t c_offset_Y = 4; // mass fractions
// Transport option flags
const int c_Mixav_Transport = 0;
const int c_Multi_Transport = 1;
const int c_Soret = 2;
class Transport; class Transport;
/** /**
@ -394,7 +389,7 @@ protected:
std::vector<bool> m_do_energy; std::vector<bool> m_do_energy;
bool m_do_soret; bool m_do_soret;
std::vector<bool> m_do_species; std::vector<bool> m_do_species;
int m_transport_option; bool m_do_multicomponent;
//! flag for the radiative heat loss //! flag for the radiative heat loss
bool m_do_radiation; bool m_do_radiation;

View file

@ -89,9 +89,15 @@ public:
virtual void setThermo(thermo_t& thermo); virtual void setThermo(thermo_t& thermo);
virtual int model() const { virtual int model() const {
warn_deprecated("DustyGasTransport::model",
"To be removed after Cantera 2.3.");
return cDustyGasTransport; return cDustyGasTransport;
} }
virtual std::string transportType() const {
return "DustyGas";
}
virtual void getMultiDiffCoeffs(const size_t ld, doublereal* const d); virtual void getMultiDiffCoeffs(const size_t ld, doublereal* const d);
//! Get the molar fluxes [kmol/m^2/s], given the thermodynamic state at two nearby points. //! Get the molar fluxes [kmol/m^2/s], given the thermodynamic state at two nearby points.

View file

@ -35,6 +35,8 @@ protected:
public: public:
virtual int model() const { virtual int model() const {
warn_deprecated("HighPressureGasTransport::model",
"To be removed after Cantera 2.3.");
if (m_mode == CK_Mode) { if (m_mode == CK_Mode) {
throw CanteraError("HighPressureGasTransport::model", throw CanteraError("HighPressureGasTransport::model",
"CK_Mode not accepted"); "CK_Mode not accepted");
@ -43,6 +45,10 @@ public:
} }
} }
virtual std::string transportType() const {
return "HighPressureGas";
}
//! Return the thermal diffusion coefficients (kg/m/s) //! Return the thermal diffusion coefficients (kg/m/s)
/*! /*!
* Currently not implemented for this model * Currently not implemented for this model

View file

@ -95,9 +95,15 @@ public:
friend class TransportFactory; friend class TransportFactory;
virtual int model() const { virtual int model() const {
warn_deprecated("LiquidTransport::model",
"To be removed after Cantera 2.3.");
return cLiquidTransport; return cLiquidTransport;
} }
virtual std::string transportType() const {
return "Liquid";
}
//! Returns the viscosity of the solution //! Returns the viscosity of the solution
/*! /*!
* The viscosity calculation is handled by subclasses of * The viscosity calculation is handled by subclasses of

View file

@ -67,9 +67,15 @@ public:
* @return cMixtureAverage * @return cMixtureAverage
*/ */
virtual int model() const { virtual int model() const {
warn_deprecated("MixTransport::model",
"To be removed after Cantera 2.3.");
return cMixtureAveraged; return cMixtureAveraged;
} }
virtual std::string transportType() const {
return "Mix";
}
//! Return the thermal diffusion coefficients //! Return the thermal diffusion coefficients
/*! /*!
* For this approximation, these are all zero. * For this approximation, these are all zero.

View file

@ -32,6 +32,8 @@ public:
MultiTransport(thermo_t* thermo=0); MultiTransport(thermo_t* thermo=0);
virtual int model() const { virtual int model() const {
warn_deprecated("MultiTransport::model",
"To be removed after Cantera 2.3.");
if (m_mode == CK_Mode) { if (m_mode == CK_Mode) {
return CK_Multicomponent; return CK_Multicomponent;
} else { } else {
@ -39,6 +41,10 @@ public:
} }
} }
virtual std::string transportType() const {
return "Multi";
}
//! Return the thermal diffusion coefficients (kg/m/s) //! Return the thermal diffusion coefficients (kg/m/s)
/*! /*!
* Eqn. (12.126) displays how they are calculated. The reference work is * Eqn. (12.126) displays how they are calculated. The reference work is

View file

@ -207,9 +207,15 @@ public:
virtual bool initLiquid(LiquidTransportParams& tr); virtual bool initLiquid(LiquidTransportParams& tr);
virtual int model() const { virtual int model() const {
warn_deprecated("SimpleTransport::model",
"To be removed after Cantera 2.3.");
return cSimpleTransport; return cSimpleTransport;
} }
virtual std::string transportType() const {
return "Simple";
}
//! Returns the mixture viscosity of the solution //! Returns the mixture viscosity of the solution
/*! /*!
* The viscosity is computed using the general mixture rules * The viscosity is computed using the general mixture rules

View file

@ -26,9 +26,15 @@ public:
virtual Transport* duplMyselfAsTransport() const; virtual Transport* duplMyselfAsTransport() const;
virtual int model() const { virtual int model() const {
warn_deprecated("SolidTransport::model",
"To be removed after Cantera 2.3.");
return cSolidTransport; return cSolidTransport;
} }
virtual std::string transportType() const {
return "Solid";
}
//! Returns the ionic conductivity of the phase //! Returns the ionic conductivity of the phase
/*! /*!
* The thermo phase needs to be updated (temperature) prior to calling this. * The thermo phase needs to be updated (temperature) prior to calling this.

View file

@ -33,6 +33,7 @@ class SolidTransportData;
const int CK_Mode = 10; const int CK_Mode = 10;
// types of transport models that can be constructed // types of transport models that can be constructed
// @deprecated To be removed after Cantera 2.3.
const int None = 199; const int None = 199;
const int cMulticomponent = 200; const int cMulticomponent = 200;
const int CK_Multicomponent = 202; const int CK_Multicomponent = 202;
@ -181,11 +182,20 @@ public:
* The transport model is the set of equations used to compute the transport * The transport model is the set of equations used to compute the transport
* properties. This method returns an integer flag that identifies the * properties. This method returns an integer flag that identifies the
* transport model implemented. The base class returns 0. * transport model implemented. The base class returns 0.
* @deprecated Use `transportType()` instead. To be removed after Cantera
* 2.3.
*/ */
virtual int model() const { virtual int model() const {
warn_deprecated("Transport::model", "To be removed after Cantera 2.3.");
return 0; return 0;
} }
//! Identifies the Transport object type. Each derived class should override
//! this method to return a meaningful identifier.
virtual std::string transportType() const {
return "Transport";
}
/*! /*!
* Phase object. Every transport manager is designed to compute properties * Phase object. Every transport manager is designed to compute properties
* for a specific phase of a mixture, which might be a liquid solution, a * for a specific phase of a mixture, which might be a liquid solution, a

View file

@ -55,6 +55,7 @@ public:
//! Get the name of the transport model corresponding to the specified constant. //! Get the name of the transport model corresponding to the specified constant.
/*! /*!
* @param model Integer representing the model name * @param model Integer representing the model name
* @deprecated To be removed after Cantera 2.3.
*/ */
static std::string modelName(int model); static std::string modelName(int model);
@ -225,9 +226,11 @@ private:
//! Mapping between between the string name for a transport model and the //! Mapping between between the string name for a transport model and the
//! integer name. //! integer name.
//! @deprecated To be removed after Cantera 2.3.
std::map<std::string, int> m_models; std::map<std::string, int> m_models;
//! Inverse mapping of transport models, from integer constant to string //! Inverse mapping of transport models, from integer constant to string
//! @deprecated To be removed after Cantera 2.3.
std::map<int, std::string> m_modelNames; std::map<int, std::string> m_modelNames;
//! Mapping between between the string name //! Mapping between between the string name

View file

@ -41,9 +41,15 @@ public:
virtual Transport* duplMyselfAsTransport() const; virtual Transport* duplMyselfAsTransport() const;
virtual int model() const { virtual int model() const {
warn_deprecated("WaterTransport::model",
"To be removed after Cantera 2.3.");
return cWaterTransport; return cWaterTransport;
} }
virtual std::string transportType() const {
return "Water";
}
//! Returns the viscosity of water at the current conditions (kg/m/s) //! Returns the viscosity of water at the current conditions (kg/m/s)
/*! /*!
* This function calculates the value of the viscosity of pure water at the * This function calculates the value of the viscosity of pure water at the

View file

@ -372,14 +372,10 @@ cdef extern from "cantera/kinetics/InterfaceKinetics.h":
void advanceCoverages(double) except + void advanceCoverages(double) except +
cdef extern from "cantera/transport/TransportFactory.h":
cdef string transportModelName "Cantera::TransportFactory::modelName" (int)
cdef extern from "cantera/transport/TransportBase.h" namespace "Cantera": cdef extern from "cantera/transport/TransportBase.h" namespace "Cantera":
cdef cppclass CxxTransport "Cantera::Transport": cdef cppclass CxxTransport "Cantera::Transport":
CxxTransport(CxxThermoPhase*) CxxTransport(CxxThermoPhase*)
int model() string transportType()
double viscosity() except + double viscosity() except +
double thermalConductivity() except + double thermalConductivity() except +
double electricalConductivity() except + double electricalConductivity() except +

View file

@ -132,7 +132,7 @@ cdef class Transport(_SolutionBase):
object and replaces it with a new one implementing the specified model. object and replaces it with a new one implementing the specified model.
""" """
def __get__(self): def __get__(self):
return pystr(transportModelName(self.transport.model())) return pystr(self.transport.transportType())
def __set__(self, model): def __set__(self, model):
cdef CxxTransport* old = self.transport cdef CxxTransport* old = self.transport

View file

@ -22,7 +22,7 @@ StFlow::StFlow(IdealGasPhase* ph, size_t nsp, size_t points) :
m_epsilon_left(0.0), m_epsilon_left(0.0),
m_epsilon_right(0.0), m_epsilon_right(0.0),
m_do_soret(false), m_do_soret(false),
m_transport_option(-1), m_do_multicomponent(false),
m_do_radiation(false), m_do_radiation(false),
m_kExcessLeft(0), m_kExcessLeft(0),
m_kExcessRight(0) m_kExcessRight(0)
@ -103,11 +103,9 @@ void StFlow::resize(size_t ncomponents, size_t points)
m_visc.resize(m_points, 0.0); m_visc.resize(m_points, 0.0);
m_tcon.resize(m_points, 0.0); m_tcon.resize(m_points, 0.0);
if (m_transport_option == c_Mixav_Transport) { m_diff.resize(m_nsp*m_points);
m_diff.resize(m_nsp*m_points); if (m_do_multicomponent) {
} else {
m_multidiff.resize(m_nsp*m_nsp*m_points); m_multidiff.resize(m_nsp*m_nsp*m_points);
m_diff.resize(m_nsp*m_points);
m_dthermal.resize(m_nsp, m_points, 0.0); m_dthermal.resize(m_nsp, m_points, 0.0);
} }
m_flux.resize(m_nsp,m_points); m_flux.resize(m_nsp,m_points);
@ -149,29 +147,22 @@ void StFlow::setTransport(Transport& trans, bool withSoret)
{ {
m_trans = &trans; m_trans = &trans;
m_do_soret = withSoret; m_do_soret = withSoret;
m_do_multicomponent = (m_trans->transportType() == "Multi");
int model = m_trans->model(); m_diff.resize(m_nsp*m_points);
if (model == cMulticomponent || model == CK_Multicomponent) { if (m_do_multicomponent) {
m_transport_option = c_Multi_Transport;
m_multidiff.resize(m_nsp*m_nsp*m_points); m_multidiff.resize(m_nsp*m_nsp*m_points);
m_diff.resize(m_nsp*m_points);
m_dthermal.resize(m_nsp, m_points, 0.0); m_dthermal.resize(m_nsp, m_points, 0.0);
} else if (model == cMixtureAveraged || model == CK_MixtureAveraged) { } else if (withSoret) {
m_transport_option = c_Mixav_Transport; throw CanteraError("setTransport",
m_diff.resize(m_nsp*m_points); "Thermal diffusion (the Soret effect) "
if (withSoret) { "requires using a multicomponent transport model.");
throw CanteraError("setTransport",
"Thermal diffusion (the Soret effect) "
"requires using a multicomponent transport model.");
}
} else {
throw CanteraError("setTransport","unknown transport model.");
} }
} }
void StFlow::enableSoret(bool withSoret) void StFlow::enableSoret(bool withSoret)
{ {
if (m_transport_option == c_Multi_Transport) { if (m_do_multicomponent) {
m_do_soret = withSoret; m_do_soret = withSoret;
} else { } else {
throw CanteraError("setTransport", throw CanteraError("setTransport",
@ -458,14 +449,7 @@ void StFlow::eval(size_t jg, doublereal* xg,
void StFlow::updateTransport(doublereal* x, size_t j0, size_t j1) void StFlow::updateTransport(doublereal* x, size_t j0, size_t j1)
{ {
if (m_transport_option == c_Mixav_Transport) { if (m_do_multicomponent) {
for (size_t j = j0; j < j1; j++) {
setGasAtMidpoint(x,j);
m_visc[j] = (m_dovisc ? m_trans->viscosity() : 0.0);
m_trans->getMixDiffCoeffs(&m_diff[j*m_nsp]);
m_tcon[j] = m_trans->thermalConductivity();
}
} else if (m_transport_option == c_Multi_Transport) {
for (size_t j = j0; j < j1; j++) { for (size_t j = j0; j < j1; j++) {
setGasAtMidpoint(x,j); setGasAtMidpoint(x,j);
doublereal wtm = m_thermo->meanMolecularWeight(); doublereal wtm = m_thermo->meanMolecularWeight();
@ -483,6 +467,13 @@ void StFlow::updateTransport(doublereal* x, size_t j0, size_t j1)
m_trans->getThermalDiffCoeffs(m_dthermal.ptrColumn(0) + j*m_nsp); m_trans->getThermalDiffCoeffs(m_dthermal.ptrColumn(0) + j*m_nsp);
} }
} }
} else { // mixture averaged transport
for (size_t j = j0; j < j1; j++) {
setGasAtMidpoint(x,j);
m_visc[j] = (m_dovisc ? m_trans->viscosity() : 0.0);
m_trans->getMixDiffCoeffs(&m_diff[j*m_nsp]);
m_tcon[j] = m_trans->thermalConductivity();
}
} }
} }
@ -505,8 +496,18 @@ void StFlow::showSolution(const doublereal* x)
void StFlow::updateDiffFluxes(const doublereal* x, size_t j0, size_t j1) void StFlow::updateDiffFluxes(const doublereal* x, size_t j0, size_t j1)
{ {
switch (m_transport_option) { if (m_do_multicomponent) {
case c_Mixav_Transport: for (size_t j = j0; j < j1; j++) {
double dz = z(j+1) - z(j);
for (double k = 0; k < m_nsp; k++) {
doublereal sum = 0.0;
for (size_t m = 0; m < m_nsp; m++) {
sum += m_wt[m] * m_multidiff[mindex(k,m,j)] * (X(x,m,j+1)-X(x,m,j));
}
m_flux(k,j) = sum * m_diff[k+j*m_nsp] / dz;
}
}
} else {
for (size_t j = j0; j < j1; j++) { for (size_t j = j0; j < j1; j++) {
double sum = 0.0; double sum = 0.0;
double wtm = m_wtm[j]; double wtm = m_wtm[j];
@ -522,23 +523,6 @@ void StFlow::updateDiffFluxes(const doublereal* x, size_t j0, size_t j1)
m_flux(k,j) += sum*Y(x,k,j); m_flux(k,j) += sum*Y(x,k,j);
} }
} }
break;
case c_Multi_Transport:
for (size_t j = j0; j < j1; j++) {
double dz = z(j+1) - z(j);
for (double k = 0; k < m_nsp; k++) {
doublereal sum = 0.0;
for (size_t m = 0; m < m_nsp; m++) {
sum += m_wt[m] * m_multidiff[mindex(k,m,j)] * (X(x,m,j+1)-X(x,m,j));
}
m_flux(k,j) = sum * m_diff[k+j*m_nsp] / dz;
}
}
break;
default:
throw CanteraError("updateDiffFluxes","unknown transport model");
} }
if (m_do_soret) { if (m_do_soret) {

View file

@ -104,6 +104,8 @@ void TransportFactory::deleteFactory()
std::string TransportFactory::modelName(int model) std::string TransportFactory::modelName(int model)
{ {
warn_deprecated("TransportFactory::modelName",
"To be removed after Cantera 2.3.");
return getValue<int,string>(factory()->m_modelNames, model, ""); return getValue<int,string>(factory()->m_modelNames, model, "");
} }
@ -184,34 +186,28 @@ Transport* TransportFactory::newTransport(const std::string& transportModel,
thermo_t* phase, int log_level, int ndim) thermo_t* phase, int log_level, int ndim)
{ {
vector_fp state; vector_fp state;
Transport* tr = 0, *gastr = 0; Transport* tr = 0;
DustyGasTransport* dtr = 0;
phase->saveState(state); phase->saveState(state);
switch (m_models[transportModel]) { if (transportModel == "Solid") {
case cSolidTransport:
tr = new SolidTransport; tr = new SolidTransport;
initSolidTransport(tr, phase, log_level); initSolidTransport(tr, phase, log_level);
tr->setThermo(*phase); tr->setThermo(*phase);
break; } else if (transportModel == "DustyGas") {
case cDustyGasTransport:
tr = new DustyGasTransport; tr = new DustyGasTransport;
gastr = new MultiTransport; Transport* gastr = new MultiTransport;
gastr->init(phase, 0, log_level); gastr->init(phase, 0, log_level);
dtr = (DustyGasTransport*)tr; DustyGasTransport* dtr = (DustyGasTransport*)tr;
dtr->initialize(phase, gastr); dtr->initialize(phase, gastr);
break; } else if (transportModel == "Simple") {
case cSimpleTransport:
tr = new SimpleTransport(); tr = new SimpleTransport();
initLiquidTransport(tr, phase, log_level); initLiquidTransport(tr, phase, log_level);
tr->setThermo(*phase); tr->setThermo(*phase);
break; } else if (transportModel == "Liquid") {
case cLiquidTransport:
tr = new LiquidTransport(phase, ndim); tr = new LiquidTransport(phase, ndim);
initLiquidTransport(tr, phase, log_level); initLiquidTransport(tr, phase, log_level);
tr->setThermo(*phase); tr->setThermo(*phase);
break; } else {
default:
tr = create(transportModel); tr = create(transportModel);
tr->init(phase, m_CK_mode[transportModel], log_level); tr->init(phase, m_CK_mode[transportModel], log_level);
} }