void RedlichKisterVPSSTP::getdlnActCoeffdlnN_diag(doublereal* dlnActCoeffdlnN_diag) const { s_update_dlnActCoeff_dX_(); for (size_t l = 0; l < m_kk; l++) { dlnActCoeffdlnN_diag[l] = dlnActCoeff_dX_(l, l); for (size_t k = 0; k < m_kk; k++) { dlnActCoeffdlnN_diag[k] -= dlnActCoeff_dX_(l, k) * moleFractions_[k]; } } }
void RedlichKisterVPSSTP::getdlnActCoeffdlnN_diag(doublereal* dlnActCoeffdlnN_diag) const { s_update_dlnActCoeff_dX_(); for (size_t j = 0; j < m_kk; j++) { dlnActCoeffdlnN_diag[j] = dlnActCoeff_dX_(j, j); for (size_t k = 0; k < m_kk; k++) { dlnActCoeffdlnN_diag[k] -= dlnActCoeff_dX_(j, k) * moleFractions_[k]; } } }
void RedlichKisterVPSSTP::getdlnActCoeffds(const doublereal dTds, const doublereal* const dXds, doublereal* dlnActCoeffds) const { s_update_dlnActCoeff_dT(); s_update_dlnActCoeff_dX_(); for (size_t k = 0; k < m_kk; k++) { dlnActCoeffds[k] = dlnActCoeffdT_Scaled_[k] * dTds; for (size_t l = 0; l < m_kk; l++) { dlnActCoeffds[k] += dlnActCoeff_dX_(k, l) * dXds[l]; } } }
void RedlichKisterVPSSTP::s_update_dlnActCoeff_dX_() const { doublereal T = temperature(); dlnActCoeff_dX_.zero(); for (size_t i = 0; i < numBinaryInteractions_; i++) { size_t iA = m_pSpecies_A_ij[i]; size_t iB = m_pSpecies_B_ij[i]; double XA = moleFractions_[iA]; double XB = moleFractions_[iB]; doublereal deltaX = XA - XB; size_t N = m_N_ij[i]; doublereal poly = 1.0; doublereal sum = 0.0; vector_fp& he_vec = m_HE_m_ij[i]; vector_fp& se_vec = m_SE_m_ij[i]; doublereal sumMm1 = 0.0; doublereal polyMm1 = 1.0; doublereal polyMm2 = 1.0; doublereal sum2 = 0.0; doublereal sum2Mm1 = 0.0; doublereal sumMm2 = 0.0; for (size_t m = 0; m < N; m++) { doublereal A_ge = he_vec[m] - T * se_vec[m]; sum += A_ge * poly; sum2 += A_ge * (m + 1) * poly; poly *= deltaX; if (m >= 1) { sumMm1 += (A_ge * polyMm1 * m); sum2Mm1 += (A_ge * polyMm1 * m * (1.0 + m)); polyMm1 *= deltaX; } if (m >= 2) { sumMm2 += (A_ge * polyMm2 * m * (m - 1.0)); polyMm2 *= deltaX; } } for (size_t k = 0; k < m_kk; k++) { if (iA == k) { dlnActCoeff_dX_(k, iA) += (- XB * sum + (1.0 - XA) * XB * sumMm1 + XB * sumMm1 * (1.0 - 2.0 * XA + XB) + XA * XB * sumMm2 * (1.0 - XA + XB)); dlnActCoeff_dX_(k, iB) += ((1.0 - XA) * sum - (1.0 - XA) * XB * sumMm1 + XA * sumMm1 * (1.0 + 2.0 * XB - XA) - XA * XB * sumMm2 * (1.0 - XA + XB)); } else if (iB == k) { dlnActCoeff_dX_(k, iA) += ((1.0 - XB) * sum + (1.0 - XA) * XB * sumMm1 + XB * sumMm1 * (1.0 - 2.0 * XA + XB) + XA * XB * sumMm2 * (1.0 - XA + XB)); dlnActCoeff_dX_(k, iB) += (- XA * sum - (1.0 - XB) * XA * sumMm1 + XA * sumMm1 * (XB - XA - (1.0 - XB)) - XA * XB * sumMm2 * (-XA - (1.0 - XB))); } else { dlnActCoeff_dX_(k, iA) += (- XB * sum2 - XA * XB * sum2Mm1); dlnActCoeff_dX_(k, iB) += (- XA * sum2 + XA * XB * sum2Mm1); } } } }