LiquidTransport.h LiquidTransport.cpp

Removed a number of variables relevant only to the gas-phase transport
coefficient models.  These include the following:
-    vector_fp  m_cond;
-    vector_fp                    m_polytempvec;
-    vector<vector_fp>            m_condcoeffs;
-    std::vector<vector_fp> viscCoeffsVector_;
-    vector_fp m_sqvisc;
-    vector_fp viscSpecies_;
-    DenseMatrix m_wratkj1;
-    DenseMatrix m_phi;
-    DenseMatrix m_wratjk;

Removed much code related to these variables.

Added a number of variables relevant to the liquid-phase transport
models including: 
+    vector_fp  m_condSpecies;
+    vector_fp m_viscSpecies;
+    vector_fp  m_visc_A;
+    vector_fp  m_visc_n;
+    vector_fp  m_visc_Tact;
+    vector_fp  m_thermCond_A;
+    vector_fp  m_thermCond_n;
+    vector_fp  m_thermCond_Tact;

Changed some of the relevant comments to
pertain to the liquid-phase models.
This commit is contained in:
John Hewson 2009-09-24 20:46:26 +00:00
parent 330e7666aa
commit 1dad7e320a
2 changed files with 104 additions and 157 deletions

View file

@ -100,27 +100,26 @@ namespace Cantera {
m_tmin = right.m_tmin;
m_tmax = right.m_tmax;
m_mw = right.m_mw;
viscCoeffsVector_ = right.viscCoeffsVector_;
m_condcoeffs = right.m_condcoeffs;
m_visc_A = right.m_visc_A;
m_visc_n = right.m_visc_n;
m_visc_Tact = right.m_visc_Tact;
m_thermCond_A = right.m_thermCond_A;
m_thermCond_n = right.m_thermCond_n;
m_thermCond_Tact = right.m_thermCond_Tact;
m_diffcoeffs = right.m_diffcoeffs;
m_Grad_X = right.m_Grad_X;
m_Grad_T = right.m_Grad_T;
m_Grad_V = right.m_Grad_V;
m_ck_Grad_mu = right.m_ck_Grad_mu;
m_bdiff = right.m_bdiff;
viscSpecies_ = right.viscSpecies_;
m_sqvisc = right.m_sqvisc;
m_viscSpecies = right.m_viscSpecies;
m_cond = right.m_cond;
m_polytempvec = right.m_polytempvec;
m_iStateMF = -1;
m_molefracs = right.m_molefracs;
m_concentrations = right.m_concentrations;
m_chargeSpecies = right.m_chargeSpecies;
m_DiffCoeff_StefMax = right.m_DiffCoeff_StefMax;
viscosityModel_ = right.viscosityModel_;
m_phi = right.m_phi;
m_wratjk = right.m_wratjk;
m_wratkj1 = right.m_wratkj1;
m_B = right.m_B;
m_A = right.m_A;
m_eps = right.m_eps;
@ -173,30 +172,29 @@ namespace Cantera {
copy(m_thermo->molecularWeights().begin(),
m_thermo->molecularWeights().end(), m_mw.begin());
// copy polynomials and parameters into local storage
viscCoeffsVector_ = tr.visccoeffs;
m_condcoeffs = tr.condcoeffs;
// copy parameters into local storage
m_visc_A = tr.visc_A ;
m_visc_n = tr.visc_n ;
m_visc_Tact = tr.visc_Tact ;
m_thermCond_A = tr.thermCond_A ;
m_thermCond_n = tr.thermCond_n ;
m_thermCond_Tact = tr.thermCond_Tact ;
//m_diffcoeffs = tr.diffcoeffs;
m_mode = tr.mode_;
m_phi.resize(m_nsp, m_nsp, 0.0);
m_visc_A.resize(m_nsp);
m_visc_n.resize(m_nsp);
m_visc_Tact.resize(m_nsp);
m_thermCond_A.resize(m_nsp);
m_thermCond_n.resize(m_nsp);
m_thermCond_Tact.resize(m_nsp);
m_wratjk.resize(m_nsp, m_nsp, 0.0);
m_wratkj1.resize(m_nsp, m_nsp, 0.0);
int j, k;
for (j = 0; j < m_nsp; j++)
for (k = j; k < m_nsp; k++) {
m_wratjk(j,k) = sqrt(m_mw[j]/m_mw[k]);
m_wratjk(k,j) = sqrt(m_wratjk(j,k));
m_wratkj1(j,k) = sqrt(1.0 + m_mw[k]/m_mw[j]);
}
m_polytempvec.resize(5);
viscSpecies_.resize(m_nsp);
m_sqvisc.resize(m_nsp);
m_cond.resize(m_nsp);
m_viscSpecies.resize(m_nsp);
m_condSpecies.resize(m_nsp);
m_bdiff.resize(m_nsp, m_nsp);
m_molefracs.resize(m_nsp);
@ -247,7 +245,7 @@ namespace Cantera {
if (m_visc_mix_ok) return m_viscmix;
// update viscSpecies_[] and m_phi[] if necessary
// update m_viscSpecies[] if necessary
if (!m_visc_temp_ok) {
updateViscosity_temp();
}
@ -256,16 +254,18 @@ namespace Cantera {
updateViscosities_conc();
}
/* We still need to implement interaction parameters */
/* This constant viscosity model has no input */
if (viscosityModel_ == LVISC_CONSTANT) {
return m_viscmix;
err("constant viscosity not implemented for LiquidTransport.");
//return m_viscmix;
} else if (viscosityModel_ == LVISC_MIXTUREAVG) {
m_viscmix = dot_product(viscSpecies_, m_molefracs);
m_viscmix = dot_product(m_viscSpecies, m_molefracs);
} else if (viscosityModel_ == LVISC_INTERACTION) {
m_viscmix = dot_product(m_viscSpecies, m_molefracs);
//now sum over i,j : Gij*Xi*Xj
} else if (viscosityModel_ == LVISC_WILKES) {
multiply(m_phi, DATA_PTR(m_molefracs), DATA_PTR(m_spwork));
m_viscmix = 0.0;
for (int k = 0; k < m_nsp; k++) {
m_viscmix += m_molefracs[k] * viscSpecies_[k]/m_spwork[k];
}
err("Wilkes method not implemented for LiquidTransport.");
}
return m_viscmix;
@ -276,7 +276,7 @@ namespace Cantera {
if (!m_visc_temp_ok) {
updateViscosity_temp();
}
copy(viscSpecies_.begin(), viscSpecies_.end(), visc);
copy(m_viscSpecies.begin(), m_viscSpecies.end(), visc);
}
@ -354,8 +354,8 @@ namespace Cantera {
if (!m_cond_mix_ok) {
doublereal sum1 = 0.0, sum2 = 0.0;
for (int k = 0; k < m_nsp; k++) {
sum1 += m_molefracs[k] * m_cond[k];
sum2 += m_molefracs[k] / m_cond[k];
sum1 += m_molefracs[k] * m_condSpecies[k];
sum2 += m_molefracs[k] / m_condSpecies[k];
}
m_lambda = 0.5*(sum1 + 1.0/sum2);
m_cond_mix_ok = true;
@ -683,11 +683,11 @@ namespace Cantera {
/*
if (m_mode == CK_Mode) {
for (k = 0; k < m_nsp; k++) {
m_cond[k] = exp(m_condcoeffs[k]);
m_condSpecies[k] = exp(m_condcoeffs[k]);
}
} else {
for (k = 0; k < m_nsp; k++) {
m_cond[k] = m_sqrt_t * m_condcoeffs[k];
m_condSpecies[k] = m_sqrt_t * m_condcoeffs[k];
}
}
m_cond_temp_ok = true;
@ -747,42 +747,13 @@ namespace Cantera {
*/
void LiquidTransport::updateViscosity_temp() {
int k;
doublereal vratiokj, wratiojk, factor1;
/*
if (m_mode == CK_Mode) {
for (k = 0; k < m_nsp; k++) {
viscSpecies_[k] = exp(viscCoeffsVector_[k]);
m_sqvisc[k] = sqrt(viscSpecies_[k]);
}
for (k = 0; k < m_nsp; k++) {
m_viscSpecies[k] = m_visc_A[k] * exp( m_visc_n[k] * m_logt
- m_visc_Tact[k] / m_temp );
}
else {
for (k = 0; k < m_nsp; k++) {
// the polynomial fit is done for sqrt(visc/sqrt(T))
m_sqvisc[k] = m_t14 * viscCoeffsVector_[k];
viscSpecies_[k] = (m_sqvisc[k]*m_sqvisc[k]);
}
}
// see Eq. (9-5.15) of Reid, Prausnitz, and Poling
int j;
for (j = 0; j < m_nsp; j++) {
for (k = j; k < m_nsp; k++) {
vratiokj = viscSpecies_[k]/viscSpecies_[j];
wratiojk = m_mw[j]/m_mw[k];
// Note that m_wratjk(k,j) holds the square root of
// m_wratjk(j,k)!
factor1 = 1.0 + (m_sqvisc[k]/m_sqvisc[j]) * m_wratjk(k,j);
m_phi(k,j) = factor1*factor1 /
(SqrtEight * m_wratkj1(j,k));
m_phi(j,k) = m_phi(k,j)/(vratiokj * wratiojk);
}
}
m_visc_temp_ok = true;
m_visc_mix_ok = false;
*/
}

View file

@ -137,11 +137,15 @@ namespace Cantera {
public:
//! default constructor
/*!
* @param thermo ThermoPhase object holding species information.
* @param ndim Number of spatial dimensions.
*/
LiquidTransport(thermo_t* thermo = 0, int ndim = 1);
//!Copy Constructor for the %LiquidThermo object.
/*!
* @param right ThermoPhase to be copied
* @param right %LiquidTransport to be copied
*/
LiquidTransport(const LiquidTransport &right);
@ -149,8 +153,8 @@ namespace Cantera {
/*!
* This is NOT a virtual function.
*
* @param right Reference to %ThermoPhase object to be copied into the
* current one.
* @param right Reference to %LiquidTransport object to be copied
* into the current one.
*/
LiquidTransport& operator=(const LiquidTransport& right);
@ -170,6 +174,19 @@ namespace Cantera {
//! virtual destructor
virtual ~LiquidTransport() {}
//! Initialize the transport object
/*!
* Here we change all of the internal dimensions to be sufficient.
* We get the object ready to do property evaluations.
*
* @param tr Transport parameters for all of the species
* in the phase.
*/
virtual bool initLiquid(LiquidTransportParams& tr);
friend class TransportFactory;
//! Return the model id for this transport parameterization
virtual int model() {
return cLiquidTransport;
@ -179,17 +196,14 @@ namespace Cantera {
//! Returns the viscosity of the solution
/*!
* The viscosity is computed using the Wilke mixture rule.
* The viscosity is computed using mixture averaging plus
* any information on interaction parameters
* \f[
* \mu = \sum_k \frac{\mu_k X_k}{\sum_j \Phi_{k,j} X_j}.
* \mu = \sum_k {\mu_k X_k} {\sum_j \sum_k {G_{j,k} X_k X_j} }.
* \f]
* Here \f$ \mu_k \f$ is the viscosity of pure species \e k,
* and
* \f[
* \Phi_{k,j} = \frac{\left[1
* + \sqrt{\left(\frac{\mu_k}{\mu_j}\sqrt{\frac{M_j}{M_k}}\right)}\right]^2}
* {\sqrt{8}\sqrt{1 + M_k/M_j}}
* \f]
* and \f$ G_{k,j} \f$ is the interaction parameter.
* @see updateViscosity_T();
*
* Controlling update boolean m_viscmix_ok
@ -198,25 +212,11 @@ namespace Cantera {
//! Returns the pure species viscosities
/*!
*
*
* The pure species viscosities are to be given in an Arrhenius
* form in accordance with activated-jump-process dominated transport.
*/
virtual void getSpeciesViscosities(doublereal* const visc);
virtual void getThermalDiffCoeffs(doublereal* const dt);
//! Return the thermal conductivity of the solution
/*!
* The thermal conductivity is computed from the following mixture rule:
* \f[
* \lambda = 0.5 \left( \sum_k X_k \lambda_k
* + \frac{1}{\sum_k X_k/\lambda_k}\right)
* \f]
*
* Controlling update boolean = m_condmix_ok
*/
virtual doublereal thermalConductivity();
//! Returns the binary diffusion coefficients
/*!
* @param ld
@ -232,6 +232,20 @@ namespace Cantera {
virtual void getMixDiffCoeffs(doublereal* const d);
virtual void getThermalDiffCoeffs(doublereal* const dt);
//! Return the thermal conductivity of the solution
/*!
* The thermal conductivity is computed from the following mixture rule:
* \f[
* \lambda = 0.5 \left( \sum_k X_k \lambda_k
* + \frac{1}{\sum_k X_k/\lambda_k}\right)
* \f]
*
* Controlling update boolean = m_condmix_ok
*/
virtual doublereal thermalConductivity();
//! Get the Mobilities
/*!
* @param mobil
@ -332,20 +346,6 @@ namespace Cantera {
virtual void getSpeciesFluxesExt(int ldf, doublereal* fluxes);
//! Initialize the transport object
/*!
* Here we change all of the internal dimensions to be sufficient.
* We get the object ready to do property evaluations.
*
* @param tr Transport parameters for all of the species
* in the phase.
*/
virtual bool initLiquid(LiquidTransportParams& tr);
friend class TransportFactory;
//! Solve the stefan_maxell equations for the diffusive fluxes.
void stefan_maxwell_solve();
@ -369,19 +369,16 @@ namespace Cantera {
*/
vector_fp m_mw;
//! Polynomial coefficients of the viscosity
/*!
* These express the temperature dependendence of the pures
* species viscosities.
*/
std::vector<vector_fp> viscCoeffsVector_;
//! Pure species viscosities in Arrhenius temperature-dependent form.
vector_fp m_visc_A;
vector_fp m_visc_n;
vector_fp m_visc_Tact;
//! Pure species thermal conductivities in Arrhenius temperature-dependent form.
vector_fp m_thermCond_A;
vector_fp m_thermCond_n;
vector_fp m_thermCond_Tact;
//! Polynomial coefficients of the conductivities
/*!
* These express the temperature dependendence of the pures
* species conductivities
*/
vector<vector_fp> m_condcoeffs;
//! Polynomial coefficients of the binary diffusion coefficients
/*!
@ -391,10 +388,6 @@ namespace Cantera {
*/
vector<vector_fp> m_diffcoeffs;
//! Temperature polynomial for transport property temperature fits.
vector_fp m_polytempvec;
//! Internal value of the gradient of the mole fraction vector
/*!
* Note, this is the only gradient value that can and perhaps
@ -486,19 +479,7 @@ namespace Cantera {
*
* controlling update boolean -> m_visc_temp_ok
*/
vector_fp viscSpecies_;
//! Sqrt of the species viscosities
/*!
* The sqrt(visc) is used in the mixing formulas
* Length = m_nsp
*
* Depends on the temperature and perhaps pressure, but
* not the species concentrations
*
* controlling update boolean m_visc_temp_ok
*/
vector_fp m_sqvisc;
vector_fp m_viscSpecies;
//! Internal value of the species individual thermal conductivities
/*!
@ -509,7 +490,7 @@ namespace Cantera {
*
* controlling update boolean -> m_cond_temp_ok
*/
vector_fp m_cond;
vector_fp m_condSpecies;
//! State of the mole fraction vector.
int m_iStateMF;
@ -593,21 +574,6 @@ namespace Cantera {
*/
int viscosityModel_;
//! viscosity weighting functions
DenseMatrix m_phi;
//! Matrix of the ratios of the species molecular weights
/*!
* m_wratjk(i,j) = (m_mw[j]/m_mw[k])**0.25
*/
DenseMatrix m_wratjk;
//! Matrix of the ratios of the species molecular weights
/*!
* m_wratkj1(i,j) = (1.0 + m_mw[k]/m_mw[j])**0.5
*/
DenseMatrix m_wratkj1;
//! RHS to the stefan-maxwell equation
DenseMatrix m_B;
@ -746,6 +712,16 @@ namespace Cantera {
* Either 1, 2, or 3
*/
int m_nDim;
private:
/**
* Throw an exception if this method is invoked.
* This probably indicates something is not yet implemented.
*/
doublereal err(std::string msg) const;
};
}
#endif