LiquidTransportParams.h

Added some comments plus members
+       DenseMatrix  visc_Eij;
+       DenseMatrix  visc_Sij;
These members are not populated in any way at this point.  A message
to this effect is written in
TransportFactory::getLiquidTransportData. 


LiquidTransport.h LiquidTransport.cpp

Changed the types of viscosity models from 
   const int LVISC_CONSTANT     = 0;
-  const int LVISC_WILKES       = 1;
-  const int LVISC_MIXTUREAVG   = 2;
to
   const int LVISC_CONSTANT     = 0;
+  const int LVISC_INTERACTION  = 1;
+  const int LVISC_AVG_ENERGIES = 2;
These are not yet implemented.

Added members 
+    DenseMatrix m_visc_Eij;
+    DenseMatrix m_visc_Sij;
+    vector_fp  m_hydrodynamic_radius;
+    vector_fp  m_visc_logA; //logarithm of coefficient

Removed unneeded members:
-    vector_fp   m_eps;
-    doublereal m_sqrt_t;
-    doublereal m_t14;
-    doublereal m_t32;
-    doublereal m_sqrt_kbt;

Changed the name of m_cond to m_condSpecies in agreement with the
m_viscSpecies pattern.

Implemented some code in LiquidTransport::viscosity() to compute the
molecular interactions relevant to mixture viscosity, BUT none of the
required parameters or flags are implemented at this point.
This commit is contained in:
John Hewson 2009-09-25 18:40:29 +00:00
parent 1d1fdcd8f3
commit b933e64c79
4 changed files with 103 additions and 61 deletions

View file

@ -39,10 +39,6 @@ namespace Cantera {
m_iStateMF(-1),
m_temp(-1.0),
m_logt(0.0),
m_sqrt_t(-1.0),
m_t14(-1.0),
m_t32(-1.0),
m_sqrt_kbt(-1.0),
m_press(-1.0),
m_lambda(-1.0),
m_viscmix(-1.0),
@ -67,10 +63,6 @@ namespace Cantera {
m_iStateMF(-1),
m_temp(-1.0),
m_logt(0.0),
m_sqrt_t(-1.0),
m_t14(-1.0),
m_t32(-1.0),
m_sqrt_kbt(-1.0),
m_press(-1.0),
m_lambda(-1.0),
m_viscmix(-1.0),
@ -101,19 +93,24 @@ namespace Cantera {
m_tmax = right.m_tmax;
m_mw = right.m_mw;
m_visc_A = right.m_visc_A;
m_visc_logA = right.m_visc_logA;
m_visc_n = right.m_visc_n;
m_visc_Tact = right.m_visc_Tact;
m_visc_Eij = right.m_visc_Eij;
m_visc_Sij = right.m_visc_Sij;
m_thermCond_A = right.m_thermCond_A;
m_thermCond_n = right.m_thermCond_n;
m_thermCond_Tact = right.m_thermCond_Tact;
m_hydrodynamic_radius = right.m_hydrodynamic_radius;
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;
m_viscSpecies = right.m_viscSpecies;
m_cond = right.m_cond;
m_viscSpecies = right.m_viscSpecies;
m_logViscSpecies = right.m_logViscSpecies;
m_condSpecies = right.m_condSpecies;
m_iStateMF = -1;
m_molefracs = right.m_molefracs;
m_concentrations = right.m_concentrations;
@ -122,13 +119,8 @@ namespace Cantera {
viscosityModel_ = right.viscosityModel_;
m_B = right.m_B;
m_A = right.m_A;
m_eps = right.m_eps;
m_temp = right.m_temp;
m_logt = right.m_logt;
m_sqrt_t = right.m_sqrt_t;
m_t14 = right.m_t14;
m_t32 = right.m_t32;
m_sqrt_kbt = right.m_sqrt_kbt;
m_press = right.m_press;
m_flux = right.m_flux;
m_lambda = right.m_lambda;
@ -177,23 +169,28 @@ namespace Cantera {
m_visc_n = tr.visc_n ;
m_visc_Tact = tr.visc_Tact ;
//The following two are not yet filled in LiquidTransportParams
m_visc_Eij = tr.visc_Eij ;
m_visc_Sij = tr.visc_Sij ;
//save logarithm of pre-exponential for easier computation
m_visc_logA.resize(m_nsp);
for ( int i = 0; i < m_nsp; i++ )
m_visc_logA[i] = log( m_visc_A[i] );
m_thermCond_A = tr.thermCond_A ;
m_thermCond_n = tr.thermCond_n ;
m_thermCond_Tact = tr.thermCond_Tact ;
m_hydrodynamic_radius = tr.hydroRadius ;
//m_diffcoeffs = tr.diffcoeffs;
m_mode = tr.mode_;
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_viscSpecies.resize(m_nsp);
m_logViscSpecies.resize(m_nsp);
m_condSpecies.resize(m_nsp);
m_bdiff.resize(m_nsp, m_nsp);
@ -257,15 +254,24 @@ namespace Cantera {
/* We still need to implement interaction parameters */
/* This constant viscosity model has no input */
if (viscosityModel_ == LVISC_CONSTANT) {
err("constant viscosity not implemented for LiquidTransport.");
//return m_viscmix;
} else if (viscosityModel_ == LVISC_MIXTUREAVG) {
m_viscmix = dot_product(m_viscSpecies, m_molefracs);
} else if (viscosityModel_ == LVISC_AVG_ENERGIES) {
m_viscmix = exp( dot_product(m_logViscSpecies, 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) {
err("Wilkes method not implemented for LiquidTransport.");
// log_visc_mix = sum_i (X_i log_visc_i) + sum_i sum_j X_i X_j G_ij
double interaction = dot_product(m_logViscSpecies, m_molefracs);
for ( int i = 0; i < m_nsp; i++ )
for ( int j = 0; j < i; j++ )
interaction += m_molefracs[i] * m_molefracs[j]
* ( m_visc_Sij(i,j) + m_visc_Eij(i,j) / m_temp );
m_viscmix = exp( interaction );
}
return m_viscmix;
@ -540,10 +546,6 @@ namespace Cantera {
m_temp = t;
m_logt = log(m_temp);
m_kbt = Boltzmann * m_temp;
m_sqrt_t = sqrt(m_temp);
m_t14 = sqrt(m_sqrt_t);
m_t32 = m_temp * m_sqrt_t;
m_sqrt_kbt = sqrt(Boltzmann*m_temp);
// temperature has changed so temp flags are flipped
m_visc_temp_ok = false;
@ -749,9 +751,14 @@ namespace Cantera {
int 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 );
m_logViscSpecies[k] = m_visc_logA[k] + m_visc_n[k] * m_logt
+ m_visc_Tact[k] / m_temp ;
m_viscSpecies[k] = exp( m_logViscSpecies[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 );
//}
m_visc_temp_ok = true;
m_visc_mix_ok = false;
}

View file

@ -31,8 +31,8 @@ using namespace std;
namespace Cantera {
const int LVISC_CONSTANT = 0;
const int LVISC_WILKES = 1;
const int LVISC_MIXTUREAVG = 2;
const int LVISC_INTERACTION = 1;
const int LVISC_AVG_ENERGIES = 2;
const int LDIFF_MIXDIFF_UNCORRECTED = 0;
const int LDIFF_MIXDIFF_FLUXCORRECTED = 1;
@ -136,8 +136,13 @@ namespace Cantera {
class LiquidTransport : public Transport {
public:
//! default constructor
//! Default constructor.
/*!
* This requires call to initLiquid(LiquidTransportParams& tr)
* after filling LiquidTransportParams to complete instantiation.
* The filling of LiquidTransportParams is currently carried out
* in the TransportFactory class, but might be moved at some point.
*
* @param thermo ThermoPhase object holding species information.
* @param ndim Number of spatial dimensions.
*/
@ -371,14 +376,32 @@ namespace Cantera {
//! Pure species viscosities in Arrhenius temperature-dependent form.
vector_fp m_visc_A;
vector_fp m_visc_logA; //logarithm of coefficient
vector_fp m_visc_n;
vector_fp m_visc_Tact;
//! Molecular interaction energies associated with viscosity
/**
* These multiply the viscosity according to
* \f[ exp( \sum_{i} \sum_{j} X_i X_j E_{i,j} / T \f].
*/
DenseMatrix m_visc_Eij;
//! Molecular interaction entropies associated with viscosity
/**
* These multiply the viscosity according to
* \f[ exp( \sum_{i} \sum{j} X_i X_j S_{i,j} \f].
*/
DenseMatrix m_visc_Sij;
//! Pure species thermal conductivities in Arrhenius temperature-dependent form.
vector_fp m_thermCond_A;
vector_fp m_thermCond_n;
vector_fp m_thermCond_Tact;
//! Species hydrodynamic radius
vector_fp m_hydrodynamic_radius;
//! Polynomial coefficients of the binary diffusion coefficients
/*!
@ -469,9 +492,9 @@ namespace Cantera {
*/
DenseMatrix m_bdiff;
//! Species viscosities
//! Species viscosities and their logarithm
/*!
* Viscosity of the species
* Viscosity of the species and its logarithm
* Length = number of species
*
* Depends on the temperature. We have set the pressure dependence
@ -480,6 +503,7 @@ namespace Cantera {
* controlling update boolean -> m_visc_temp_ok
*/
vector_fp m_viscSpecies;
vector_fp m_logViscSpecies;
//! Internal value of the species individual thermal conductivities
/*!
@ -580,10 +604,6 @@ namespace Cantera {
//! Matrix for the stefan maxwell equation.
DenseMatrix m_A;
//! Internal storage for the species LJ well depth
vector_fp m_eps;
//! Current Temperature -> locally storred
/*!
* This is used to test whether new temperature computations
@ -597,21 +617,6 @@ namespace Cantera {
//! Current value of kT
doublereal m_kbt;
//! Current Temperature **0.5
doublereal m_sqrt_t;
//! Current Temperature **0.25
doublereal m_t14;
//! Current Temperature **1.5
doublereal m_t32;
//! Current temperature function
/*!
* This is equal to sqrt(Boltzmann * T)
*/
doublereal m_sqrt_kbt;
//! Current value of the pressure
doublereal m_press;

View file

@ -27,14 +27,37 @@ namespace Cantera {
//section for liquid transport properties
//Arrhenius parameters for transport coefficients
// std::vector<vector_fp> viscParams;
//Arrhenius parameters for transport coefficients:
//!Arrhenius pre-exponential parameter for viscosity.
vector_fp visc_A;
//!Temperature exponent for viscosity.
vector_fp visc_n;
//!Arrhenius activation temperature for viscosity.
vector_fp visc_Tact;
//!Arrhenius pre-exponential parameter for thermal conductivity.
vector_fp thermCond_A;
//!Temperature exponent for thermal conductivity.
vector_fp thermCond_n;
//!Arrhenius activation temperature for thermal conductivity.
vector_fp thermCond_Tact;
//! Energies of molecular interaction associated with viscosity.
/**
* These multiply the mixture viscosity by
* \f[ \exp( \sum_{i} \sum_{j} X_i X_j ( S_{i,j} + E_{i,j} / T ) ) \f].
*
* The overall formula for the logarithm of the mixture viscosity is
*
* \f[ \ln \eta_{mix} = \sum_i X_i \ln \eta_i
* + \sum_i \sum_j X_i X_j ( S_{i,j} + E_{i,j} / T ) \f].
*/
DenseMatrix visc_Eij;
//! Entropies of molecular interaction associated with viscosity.
DenseMatrix visc_Sij;
//Hydrodynamic radius of transported molecule
vector_fp hydroRadius;

View file

@ -940,6 +940,8 @@ namespace Cantera {
XML_Node& thermCond = trNode.child("thermal_conductivity");
getArrhenius(thermCond, A_thcond, n_thcond, Tact_thcond );
// Fill datatable with LiquidTransportData objects for error checking
// and then insertion into LiquidTransportData objects below.
LiquidTransportData data;
data.speciesName = name;
@ -996,6 +998,11 @@ namespace Cantera {
trParam.hydroRadius[i] = 1.e-10 * trdat.hydroradius;
}
// Need to identify a method to obtain interaction matrices.
// This will fill LiquidTransportParams members visc_Eij, visc_Sij
trParam.visc_Eij.resize(trParam.nsp_,trParam.nsp_);
cout << "No support for species viscosity interactions in TransportFactory.cpp" << endl;
}