void STITbyPDSS::initAllPtrs(size_t speciesIndex, VPSSMgr* vpssmgr_ptr, PDSS* PDSS_ptr) { AssertThrow(speciesIndex == m_index, "STITbyPDSS::initAllPtrs internal confusion"); m_vpssmgr_ptr = vpssmgr_ptr; m_PDSS_ptr = PDSS_ptr; }
void MolalityVPSSTP::getActivityCoefficients(doublereal* ac) const { getMolalityActivityCoefficients(ac); AssertThrow(m_indexSolvent==0, "MolalityVPSSTP::getActivityCoefficients"); double xmolSolvent = std::max(moleFraction(m_indexSolvent), m_xmolSolventMIN); for (size_t k = 1; k < m_kk; k++) { ac[k] /= xmolSolvent; } }
void PDSS::initThermo() { AssertThrow(m_tp != 0, "PDSS::initThermo()"); m_vpssmgr_ptr = m_tp->provideVPSSMgr(); initPtrs(); m_mw = m_tp->molecularWeight(m_spindex); }
void PDSS::initThermoXML(const XML_Node& phaseNode, std::string& id) { AssertThrow(m_tp != 0, "PDSS::initThermoXML()"); m_p0 = m_vpssmgr_ptr->refPressure(m_spindex); m_minTemp = m_vpssmgr_ptr->minTemp(m_spindex); m_maxTemp = m_vpssmgr_ptr->maxTemp(m_spindex); }
void vcs_VolPhase::setElemGlobalIndex(const size_t eLocal, const size_t eGlobal) { AssertThrow(eLocal < m_numElemConstraints, "vcs_VolPhase::setElemGlobalIndex"); m_elemGlobalIndex[eLocal] = eGlobal; }
size_t vcs_VolPhase::elemGlobalIndex(const size_t e) const { AssertThrow(e < m_numElemConstraints, " vcs_VolPhase::elemGlobalIndex"); return m_elemGlobalIndex[e]; }
/* * * units = kg/m2/s * * Internally, gradients in the in mole fraction, temperature * and electrostatic potential contribute to the diffusive flux * * * The diffusive mass flux of species \e k is computed from the following * formula * * \f[ * j_k = - M_k z_k u^f_k F c_k \nabla \Psi - c M_k D_k \nabla X_k - Y_k V_c * \f] * * where V_c is the correction velocity * * \f[ * V_c = - \sum_j {M_k z_k u^f_k F c_k \nabla \Psi + c M_j D_j \nabla X_j} * \f] * * @param ldf stride of the fluxes array. Must be equal to * or greater than the number of species. * @param fluxes Vector of calculated fluxes */ void SimpleTransport::getSpeciesFluxesExt(size_t ldf, doublereal* fluxes) { AssertThrow(ldf >= m_nsp ,"SimpleTransport::getSpeciesFluxesExt: Stride must be greater than m_nsp"); update_T(); update_C(); getMixDiffCoeffs(DATA_PTR(m_spwork)); const vector_fp& mw = m_thermo->molecularWeights(); const doublereal* y = m_thermo->massFractions(); doublereal concTotal = m_thermo->molarDensity(); // Unroll wrt ndim if (doMigration_) { double FRT = ElectronCharge / (Boltzmann * m_temp); for (size_t n = 0; n < m_nDim; n++) { rhoVc[n] = 0.0; for (size_t k = 0; k < m_nsp; k++) { fluxes[n*ldf + k] = - concTotal * mw[k] * m_spwork[k] * (m_Grad_X[n*m_nsp + k] + FRT * m_molefracs[k] * m_chargeSpecies[k] * m_Grad_V[n]); rhoVc[n] += fluxes[n*ldf + k]; } } } else { for (size_t n = 0; n < m_nDim; n++) { rhoVc[n] = 0.0; for (size_t k = 0; k < m_nsp; k++) { fluxes[n*ldf + k] = - concTotal * mw[k] * m_spwork[k] * m_Grad_X[n*m_nsp + k]; rhoVc[n] += fluxes[n*ldf + k]; } } } if (m_velocityBasis == VB_MASSAVG) { for (size_t n = 0; n < m_nDim; n++) { rhoVc[n] = 0.0; for (size_t k = 0; k < m_nsp; k++) { rhoVc[n] += fluxes[n*ldf + k]; } } for (size_t n = 0; n < m_nDim; n++) { for (size_t k = 0; k < m_nsp; k++) { fluxes[n*ldf + k] -= y[k] * rhoVc[n]; } } } else if (m_velocityBasis == VB_MOLEAVG) { for (size_t n = 0; n < m_nDim; n++) { rhoVc[n] = 0.0; for (size_t k = 0; k < m_nsp; k++) { rhoVc[n] += fluxes[n*ldf + k] / mw[k]; } } for (size_t n = 0; n < m_nDim; n++) { for (size_t k = 0; k < m_nsp; k++) { fluxes[n*ldf + k] -= m_molefracs[k] * rhoVc[n] * mw[k]; } } } else if (m_velocityBasis >= 0) { for (size_t n = 0; n < m_nDim; n++) { rhoVc[n] = - fluxes[n*ldf + m_velocityBasis] / mw[m_velocityBasis]; for (size_t k = 0; k < m_nsp; k++) { rhoVc[n] += fluxes[n*ldf + k] / mw[k]; } } for (size_t n = 0; n < m_nDim; n++) { for (size_t k = 0; k < m_nsp; k++) { fluxes[n*ldf + k] -= m_molefracs[k] * rhoVc[n] * mw[k]; } fluxes[n*ldf + m_velocityBasis] = 0.0; } } else { throw CanteraError("SimpleTransport::getSpeciesFluxesExt()", "unknown velocity basis"); } }