added ability to compute mixture-averaged diffusion coefficients in class MultiTransport.

This commit is contained in:
Dave Goodwin 2004-05-14 21:15:23 +00:00
parent d93b8761e7
commit 1d3a254530
2 changed files with 40 additions and 2 deletions

View file

@ -550,8 +550,8 @@ namespace Cantera {
// invert L00,00
int ierr = invert(m_Lmatrix, m_nsp);
if (ierr != 0) {
cout << " invert returned ierr = " << ierr << endl;
exit(1);
throw CanteraError("MultiTransport::getMultiDiffCoeffs",
string(" invert returned ierr = ")+int2str(ierr));
}
m_l0000_ok = false; // matrix is overwritten by inverse
@ -569,6 +569,39 @@ namespace Cantera {
}
}
void MultiTransport::getMixDiffCoeffs(doublereal* d) {
// update the mole fractions
updateTransport_C();
// update the binary diffusion coefficients if necessary
updateDiff_T();
int k, j;
doublereal mmw = m_thermo->meanMolecularWeight();
doublereal sumxw = 0.0, sum2;
doublereal p = pressure_ig();
if (m_nsp == 1) {
d[0] = m_bdiff(0,0) / p;
} else {
for (k = 0; k < m_nsp; k++) sumxw += m_molefracs[k] * m_mw[k];
for (k = 0; k < m_nsp; k++) {
sum2 = 0.0;
for (j = 0; j < m_nsp; j++) {
if (j != k) {
sum2 += m_molefracs[j] / m_bdiff(j,k);
}
}
if (sum2 <= 0.0) {
d[k] = m_bdiff(k,k) / p;
} else {
d[k] = (sumxw - m_molefracs[k] * m_mw[k])/(p * mmw * sum2);
}
}
}
}
void MultiTransport::updateTransport_T() {
//m_thermo->update_T(m_update_transport_T);

View file

@ -97,6 +97,11 @@ namespace Cantera {
virtual void getBinaryDiffCoeffs(int ld, doublereal* d);
virtual void getMultiDiffCoeffs(int ld, doublereal* d);
/// Although this class implements a multicomponent diffusion
/// model, it is convenient to be able to compute
/// mixture-averaged diffusion coefficients too.
virtual void getMixDiffCoeffs(doublereal* d);
virtual void getSpeciesFluxes(int ndim,
doublereal* grad_T, int ldx, const doublereal* grad_X,