void jeffrey(const Ty* X1, const Ty* X2, Ty* M, int d, int n1, int n2) { // compute xlogx and ylogy Ty* xs1 = new Ty[n1]; Ty* xs2 = new Ty[n2]; sum_xlogx(X1, d, n1, xs1); sum_xlogx(X2, d, n2, xs2); // compute metrics const Ty* v2 = X2; for (int j = 0; j < n2; ++j, v2 += d) { const Ty* v1 = X1; for (int i = 0; i < n1; ++i, v1 += d) { Ty sa = 0; for (int k = 0; k < d; ++k) { Ty ua = (v1[k] + v2[k]) * 0.5; sa += (ua > 0 ? ua * log(ua) : 0); } *M++ = xs1[i] + xs2[j] - 2 * sa; } } // release memory delete[] xs1; delete[] xs2; }
void kldiv(const Ty* X1, const Ty* X2, Ty* M, int d, int n1, int n2) { // compute xlogx Ty* xs = new Ty[n1]; sum_xlogx(X1, d, n1, xs); // compute metrics const Ty* v2 = X2; for (int j = 0; j < n2; ++j, v2 += d) { const Ty* v1 = X1; for (int i = 0; i < n1; ++i, v1 += d) { Ty sa = 0; for (int k = 0; k < d; ++k) { Ty u1 = v1[k]; Ty u2 = v2[k]; sa += (u1 > 0 ? u1 * log(u2) : 0); } *M++ = xs[i] - sa; } } // release memory delete[] xs; }
doublereal IdealGasPhase::entropy_mole() const { return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx() - std::log(pressure() / m_spthermo->refPressure())); }
doublereal LatticePhase::entropy_mole() const { return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx()); }
doublereal ConstDensityThermo::entropy_mole() const { return GasConstant * (mean_X(&entropy_R()[0]) - sum_xlogx()); }
doublereal IdealSolidSolnPhase::gibbs_mole() const { return GasConstant * temperature() * (mean_X(gibbs_RT_ref()) + sum_xlogx()); }
doublereal IdealSolidSolnPhase::entropy_mole() const { return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx()); }
/// Molar entropy. Units: J/kmol/K. doublereal IdealSolnGasVPSS::entropy_mole() const { updateStandardStateThermo(); const vector_fp &entrop_R = m_VPSS_ptr->entropy_R(); return GasConstant * (mean_X(DATA_PTR(entrop_R)) - sum_xlogx()); }