double ApproxMixTransport::viscosity() { update_T(); update_C(); if (m_visc_ok) { return m_viscmix; } doublereal vismix = 0.0; // update m_visc and m_phi if necessary if (!m_viscwt_ok) { updateViscosity_T(); } for (size_t ik=0; ik<_kMajor.size(); ik++) { size_t k = _kMajor[ik]; double sum = 0; for (size_t ij=0; ij<_kMajor.size(); ij++) { size_t j = _kMajor[ij]; sum += m_molefracs[j]*m_phi(k,j); } vismix += m_molefracs[k]*m_visc[k] / sum; } m_visc_ok = true; m_viscmix = vismix; assert(m_viscmix > 0 && m_viscmix < 1e100); return vismix; }
/* * The viscosity is computed using the general mixture rules * specified in the variable compositionDepType_. * * Solvent-only: * \f[ * \mu = \mu_0 * \f] * Mixture-average: * \f[ * \mu = \sum_k {\mu_k X_k} * \f] * * Here \f$ \mu_k \f$ is the viscosity of pure species \e k. * * @see updateViscosity_T(); */ doublereal SimpleTransport::viscosity() { update_T(); update_C(); if (m_visc_mix_ok) { return m_viscmix; } // update m_viscSpecies[] if necessary if (!m_visc_temp_ok) { updateViscosity_T(); } if (compositionDepType_ == 0) { m_viscmix = m_viscSpecies[0]; } else if (compositionDepType_ == 1) { m_viscmix = 0.0; for (size_t k = 0; k < m_nsp; k++) { m_viscmix += m_viscSpecies[k] * m_molefracs[k]; } } m_visc_mix_ok = true; return m_viscmix; }
void LiquidTransport::getSpeciesViscosities(doublereal* const visc) { update_T(); if (!m_visc_temp_ok) { updateViscosity_T(); } copy(m_viscSpecies.begin(), m_viscSpecies.end(), visc); }
/* * * The viscosity is computed using the Wilke mixture rule. * * \f[ * \mu = \sum_k \frac{\mu_k X_k}{\sum_j \Phi_{k,j} 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] * * @see updateViscosity_T(); */ doublereal MixTransport::viscosity() { update_T(); update_C(); if (m_viscmix_ok) return m_viscmix; doublereal vismix = 0.0; int k; // update m_visc and m_phi if necessary if (!m_viscwt_ok) updateViscosity_T(); multiply(m_phi, DATA_PTR(m_molefracs), DATA_PTR(m_spwork)); for (k = 0; k < m_nsp; k++) { vismix += m_molefracs[k] * m_visc[k]/m_spwork[k]; //denom; } m_viscmix = vismix; return vismix; }
doublereal AqueousTransport::viscosity() { update_T(); update_C(); if (m_viscmix_ok) { return m_viscmix; } // update m_visc[] and m_phi[] if necessary if (!m_viscwt_ok) { updateViscosity_T(); } multiply(m_phi, DATA_PTR(m_molefracs), DATA_PTR(m_spwork)); m_viscmix = 0.0; for (size_t k = 0; k < m_nsp; k++) { m_viscmix += m_molefracs[k] * m_visc[k]/m_spwork[k]; //denom; } return m_viscmix; }
void AqueousTransport::getSpeciesViscosities(doublereal* const visc) { updateViscosity_T(); copy(m_visc.begin(), m_visc.end(), visc); }