From 1d3a25453057ccff10b48bf7241c29239a98b6f9 Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Fri, 14 May 2004 21:15:23 +0000 Subject: [PATCH] added ability to compute mixture-averaged diffusion coefficients in class MultiTransport. --- Cantera/src/transport/MultiTransport.cpp | 37 ++++++++++++++++++++++-- Cantera/src/transport/MultiTransport.h | 5 ++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Cantera/src/transport/MultiTransport.cpp b/Cantera/src/transport/MultiTransport.cpp index f7ac3a31e..23bf98743 100755 --- a/Cantera/src/transport/MultiTransport.cpp +++ b/Cantera/src/transport/MultiTransport.cpp @@ -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); diff --git a/Cantera/src/transport/MultiTransport.h b/Cantera/src/transport/MultiTransport.h index 670385a45..9c61ffc2c 100755 --- a/Cantera/src/transport/MultiTransport.h +++ b/Cantera/src/transport/MultiTransport.h @@ -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,