CoolProp 8.0.0
An open-source fluid property and humid air property database
MixtureDerivatives.h
Go to the documentation of this file.
1
8// ***************************************************************
9// ***************************************************************
10// ***************** MIXTURE DERIVATIVES ***********************
11// ***************************************************************
12// ***************************************************************
13
14#ifndef MIXTURE_DERIVATIVES_H
15#define MIXTURE_DERIVATIVES_H
16
17#include <Eigen/Core>
19#include "ReducingFunctions.h"
20
21namespace CoolProp {
22
23class HelmholtzEOSMixtureBackend;
24
34{
35 public:
45
55
57
69
81
89 static CoolPropDbl fugacity_i(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
90
98
110
122
135
138 static CoolPropDbl dln_fugacity_dxj__constT_p_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
141 static CoolPropDbl dln_fugacity_dxj__constT_rho_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
142
143 static CoolPropDbl ndln_fugacity_i_dnj__constT_V_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
145 x_N_dependency_flag xN_flag);
147 x_N_dependency_flag xN_flag);
149 x_N_dependency_flag xN_flag);
151 x_N_dependency_flag xN_flag);
153 x_N_dependency_flag xN_flag);
154 static CoolPropDbl d_ndln_fugacity_i_dnj_ddxk__consttau_delta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
155 x_N_dependency_flag xN_flag);
156
157 static CoolPropDbl d2_ndln_fugacity_i_dnj_dxk_dTau__constdelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
158 x_N_dependency_flag xN_flag);
159 static CoolPropDbl d2_ndln_fugacity_i_dnj_dxk_dDelta__consttau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
160 x_N_dependency_flag xN_flag);
161
162 static CoolPropDbl nd_ndln_fugacity_i_dnj_dnk__constT_V_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
163 x_N_dependency_flag xN_flag);
164
165 static CoolPropDbl nAij(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) {
166 return ndln_fugacity_i_dnj__constT_V_xi(HEOS, i, j, xN_flag);
167 }
168 static CoolPropDbl n2Aijk(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag) {
169 return nd_ndln_fugacity_i_dnj_dnk__constT_V_xi(HEOS, i, j, k, xN_flag) - nAij(HEOS, i, j, xN_flag);
170 }
171 static CoolPropDbl d_nAij_dTau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) {
172 return d_nAij_dX(HEOS, i, j, xN_flag, iTau);
173 }
174 static CoolPropDbl d_nAij_dDelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) {
175 return d_nAij_dX(HEOS, i, j, xN_flag, iDelta);
176 }
177 static CoolPropDbl d_nAij_dX(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag, parameters WRT) {
178 if (WRT == iTau) {
180 } else if (WRT == iDelta) {
182 } else {
183 throw ValueError(format("wrong WRT"));
184 }
185 }
186 static CoolPropDbl d_n2Aijk_dTau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag) {
187 return d_n2Aijk_dX(HEOS, i, j, k, xN_flag, iTau);
188 }
189 static CoolPropDbl d_n2Aijk_dDelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag) {
190 return d_n2Aijk_dX(HEOS, i, j, k, xN_flag, iDelta);
191 }
192 static CoolPropDbl d_n2Aijk_dX(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag,
193 parameters WRT) {
194 double summer = 0;
195 if (WRT == iTau) {
196 summer += d2_ndln_fugacity_i_dnj_dtau2__constdelta_x(HEOS, i, j, xN_flag) * ndtaudni__constT_V_nj(HEOS, k, xN_flag);
197 summer += d_ndln_fugacity_i_dnj_dtau__constdelta_x(HEOS, i, j, xN_flag) * d_ndtaudni_dTau(HEOS, k, xN_flag);
198 summer += d2_ndln_fugacity_i_dnj_ddelta_dtau__constx(HEOS, i, j, xN_flag) * nddeltadni__constT_V_nj(HEOS, k, xN_flag);
199 summer += d2_ndln_fugacity_i_dnj_dxk_dTau__constdelta(HEOS, i, j, k, xN_flag);
200 std::size_t mmax = HEOS.mole_fractions.size();
201 if (xN_flag == XN_DEPENDENT) {
202 mmax--;
203 }
204 for (std::size_t m = 0; m < mmax; ++m) {
205 summer -= HEOS.mole_fractions[m] * d2_ndln_fugacity_i_dnj_dxk_dTau__constdelta(HEOS, i, j, m, xN_flag);
206 }
207 } else if (WRT == iDelta) {
208 summer += d2_ndln_fugacity_i_dnj_ddelta_dtau__constx(HEOS, i, j, xN_flag) * ndtaudni__constT_V_nj(HEOS, k, xN_flag);
209 summer += d2_ndln_fugacity_i_dnj_ddelta2__consttau_x(HEOS, i, j, xN_flag) * nddeltadni__constT_V_nj(HEOS, k, xN_flag);
210 summer += d_ndln_fugacity_i_dnj_ddelta__consttau_x(HEOS, i, j, xN_flag) * d_nddeltadni_dDelta(HEOS, k, xN_flag);
211 summer += d2_ndln_fugacity_i_dnj_dxk_dDelta__consttau(HEOS, i, j, k, xN_flag);
212 std::size_t mmax = HEOS.mole_fractions.size();
213 if (xN_flag == XN_DEPENDENT) {
214 mmax--;
215 }
216 for (std::size_t m = 0; m < mmax; ++m) {
217 summer -= HEOS.mole_fractions[m] * d2_ndln_fugacity_i_dnj_dxk_dDelta__consttau(HEOS, i, j, m, xN_flag);
218 }
219 } else {
220 return _HUGE;
221 }
222 return summer - d_nAij_dX(HEOS, i, j, xN_flag, WRT);
223 }
224 static Eigen::MatrixXd Lstar(HelmholtzEOSMixtureBackend& HEOS, x_N_dependency_flag xN_flag) {
225 std::size_t N = HEOS.mole_fractions.size();
226 Eigen::MatrixXd L;
227 L.resize(N, N);
228 for (std::size_t i = 0; i < N; ++i) {
229 for (std::size_t j = i; j < N; ++j) {
230 L(i, j) = nAij(HEOS, i, j, xN_flag);
231 }
232 }
233 // Fill in the symmetric elements
234 for (std::size_t i = 0; i < N; ++i) {
235 for (std::size_t j = 0; j < i; ++j) {
236 L(i, j) = L(j, i);
237 }
238 }
239 return L;
240 }
241 static Eigen::MatrixXd dLstar_dX(HelmholtzEOSMixtureBackend& HEOS, x_N_dependency_flag xN_flag, parameters WRT) {
242
243 std::size_t N = HEOS.mole_fractions.size();
244 Eigen::MatrixXd dLstar_dX(N, N);
245 for (std::size_t i = 0; i < N; ++i) {
246 for (std::size_t j = i; j < N; ++j) {
247 dLstar_dX(i, j) = d_nAij_dX(HEOS, i, j, xN_flag, WRT);
248 }
249 }
250 // Fill in the symmetric elements
251 for (std::size_t i = 0; i < N; ++i) {
252 for (std::size_t j = 0; j < i; ++j) {
253 dLstar_dX(i, j) = dLstar_dX(j, i);
254 }
255 }
256 return dLstar_dX;
257 }
258 static Eigen::MatrixXd d2Lstar_dX2(HelmholtzEOSMixtureBackend& HEOS, x_N_dependency_flag xN_flag, parameters WRT1, parameters WRT2) {
259
260 std::size_t N = HEOS.mole_fractions.size();
261 Eigen::MatrixXd d2Lstar_dX2(N, N);
262 for (std::size_t i = 0; i < N; ++i) {
263 for (std::size_t j = i; j < N; ++j) {
264 if (WRT1 == iTau && WRT2 == iTau) {
266 } else {
267 throw ValueError(format("d2Lstar_dX2 invalid WRT"));
268 }
269 }
270 }
271 // Fill in the symmetric elements
272 for (std::size_t i = 0; i < N; ++i) {
273 for (std::size_t j = 0; j < i; ++j) {
274 d2Lstar_dX2(i, j) = d2Lstar_dX2(j, i);
275 }
276 }
277 return d2Lstar_dX2;
278 }
279 static Eigen::MatrixXd Mstar(HelmholtzEOSMixtureBackend& HEOS, x_N_dependency_flag xN_flag, Eigen::MatrixXd& L) {
280
281 std::size_t N = HEOS.mole_fractions.size();
282 Eigen::MatrixXd M = L, adjL = adjugate(L);
283
284 // Last row
285 for (std::size_t i = 0; i < N; ++i) {
286 Eigen::MatrixXd n2dLdni(N, N);
287 for (std::size_t j = 0; j < N; ++j) {
288 for (std::size_t k = j; k < N; ++k) {
289 n2dLdni(j, k) = n2Aijk(HEOS, j, k, i, xN_flag);
290 // Fill in the symmetric elements
291 n2dLdni(k, j) = n2dLdni(j, k);
292 }
293 }
294 M(N - 1, i) = (adjL * n2dLdni).trace();
295 }
296 return M;
297 }
298 static Eigen::MatrixXd dMstar_dX(HelmholtzEOSMixtureBackend& HEOS, x_N_dependency_flag xN_flag, parameters WRT, Eigen::MatrixXd& L,
299 Eigen::MatrixXd& dL_dX) {
300
301 std::size_t N = HEOS.mole_fractions.size();
302 Eigen::MatrixXd dMstar = dL_dX, adjL = adjugate(L), d_adjL_dX = adjugate_derivative(L, dL_dX);
303
304 // Last row in the d(Mstar)/d(X) requires derivatives of
305 for (std::size_t i = 0; i < N; ++i) {
306 Eigen::MatrixXd n2dLdni(N, N), d_n2dLdni_dX(N, N);
307 for (std::size_t j = 0; j < N; ++j) {
308 for (std::size_t k = j; k < N; ++k) {
309 n2dLdni(j, k) = n2Aijk(HEOS, j, k, i, xN_flag);
310 d_n2dLdni_dX(j, k) = d_n2Aijk_dX(HEOS, j, k, i, xN_flag, WRT);
311 // Fill in the symmetric elements
312 n2dLdni(k, j) = n2dLdni(j, k);
313 d_n2dLdni_dX(k, j) = d_n2dLdni_dX(j, k);
314 }
315 }
316 dMstar(N - 1, i) = (n2dLdni * d_adjL_dX + adjL * d_n2dLdni_dX).trace();
317 }
318 return dMstar;
319 }
320
338
341
353
369 static CoolPropDbl ndln_fugacity_coefficient_dnj__constT_p(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
370 x_N_dependency_flag xN_flag);
371
385 x_N_dependency_flag xN_flag);
386
398
410 static CoolPropDbl d2nalphar_dxj_dni__constT_V(HelmholtzEOSMixtureBackend& HEOS, std::size_t j, std::size_t i, x_N_dependency_flag xN_flag) {
413 };
414
418
421 static CoolPropDbl d_ndalphardni_dxj__constT_V_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
422
426
430
434
449
463
475
477
491
505
507
522
525
541 static CoolPropDbl d2_ndalphardni_dxj_dDelta__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
542 x_N_dependency_flag xN_flag);
543
559 static CoolPropDbl d2_ndalphardni_dxj_dTau__constdelta_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
560 x_N_dependency_flag xN_flag);
561 static CoolPropDbl d3_ndalphardni_dxj_dTau2__constdelta_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
562 x_N_dependency_flag xN_flag);
563 static CoolPropDbl d3_ndalphardni_dxj_dDelta2__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
564 x_N_dependency_flag xN_flag);
565 static CoolPropDbl d3_ndalphardni_dxj_dDelta_dTau__constxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
566 x_N_dependency_flag xN_flag);
567
590 static CoolPropDbl nd2nalphardnidnj__constT_V(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
591
592 /* \brief GERG 2004 Eqn. 7.47
593 * \f{eqnarray*}{
594 * n\left( \frac{\partial}{\partial n_j}\left(n\left(\frac{\partial \alpha^r}{\partial n_i}\right)_{T,V,n_j} \right) \right)_{T,V,n_i} &=& \left( \frac{\partial}{\partial \delta}\left(n\left(\frac{\partial\alpha^r}{\partial n_i}\right)_{T,V,n_j}\right)\right)_{\tau,\bar x}\cdot n\left(\frac{\partial\delta}{\partial n_j}\right)_{T,V,n_i}\\
595 * &+& \left( \frac{\partial}{\partial \tau}\left(n\left(\frac{\partial\alpha^r}{\partial n_i}\right)_{T,V,n_j}\right)\right)_{\tau,\bar x}\cdot n\left(\frac{\partial\tau}{\partial n_j}\right)_{T,V,n_i}\\
596 * &+& \left( \frac{\partial}{\partial x_j}\left(n\left(\frac{\partial\alpha^r}{\partial n_i}\right)_{T,V,n_j}\right)\right)_{\delta,\tau,x_i}-\sum_{k=1}^{N}x_k \left( \frac{\partial}{\partial x_k}\left(n\left(\frac{\partial\alpha^r}{\partial n_i}\right)_{T,V,n_j}\right)\right)_{\delta,\tau,x_i}\\
597 * \f}
598 * @param HEOS The HelmholtzEOSMixtureBackend to be used
599 * @param i The index of interest
600 * @param j The second index of interest
601 * @param xN_flag A flag specifying whether the all mole fractions are independent or only the first N-1
602 */
603 static CoolPropDbl nd_ndalphardni_dnj__constT_V(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
604
605 /* \brief \f$\tau\f$ derivative of GERG 2004 7.47
606 *
607 */
608 static CoolPropDbl d_nd_ndalphardni_dnj_dTau__constdelta_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
609 x_N_dependency_flag xN_flag);
611 x_N_dependency_flag xN_flag);
613 x_N_dependency_flag xN_flag);
615 x_N_dependency_flag xN_flag);
616
617 /* \brief \f$\delta\f$ derivative of GERG 2004 7.47
618 *
619 */
620 static CoolPropDbl d_nd_ndalphardni_dnj_dDelta__consttau_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
621 x_N_dependency_flag xN_flag);
622
623 /* \brief \f$x_k\f$ derivative of GERG 2004 7.47
624 *
625 */
626 static CoolPropDbl d_nd_ndalphardni_dnj_dxk__consttau_delta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
627 x_N_dependency_flag xN_flag);
628
629 static CoolPropDbl d2_nd_ndalphardni_dnj_dxk_dTau__constdelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
630 x_N_dependency_flag xN_flag);
631 static CoolPropDbl d2_nd_ndalphardni_dnj_dxk_dDelta__consttau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
632 x_N_dependency_flag xN_flag);
633
645
647
648 static CoolPropDbl d_nddeltadni_dxj__constdelta_tau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
649
650 static CoolPropDbl d2_nddeltadni_dxj_dDelta__consttau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
651 x_N_dependency_flag xN_flag);
652
664
666
667 static CoolPropDbl d_ndtaudni_dxj__constdelta_tau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
668
669 static CoolPropDbl d2_ndtaudni_dxj_dTau__constdelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
670
686 static CoolPropDbl d_ndalphardni_dxj__constdelta_tau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
687 x_N_dependency_flag xN_flag);
688
689 /* \brief \f$x_k\f$ derivative of GERG 2004 7.52
690 *
691 */
692 static CoolPropDbl d2_ndalphardni_dxj_dxk__constdelta_tau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
693 x_N_dependency_flag xN_flag);
694
695 static CoolPropDbl d3_ndalphardni_dxj_dxk_dTau__constdelta_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
696 x_N_dependency_flag xN_flag);
697 static CoolPropDbl d3_ndalphardni_dxj_dxk_dDelta__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
698 x_N_dependency_flag xN_flag);
699
700 static CoolPropDbl dalpha0_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
703 static CoolPropDbl d2alpha0dxidxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
704
707 return (HEOS.alphar() + HEOS.alpha0()) * HEOS.rhomolar() * HEOS.gas_constant() * HEOS.T();
708 }
711
714
717
719 static CoolPropDbl dpsi_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
720
722 static CoolPropDbl dpsir_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
723
725 static CoolPropDbl d_rhorTr_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
726
728 static CoolPropDbl d2_rhorTr_dxidxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
729
732
735
738
741
744
747
750
753
755 static CoolPropDbl d2psi_dxi_dxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag = XN_INDEPENDENT);
756
758 static CoolPropDbl d2psir_dxi_dxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag = XN_INDEPENDENT);
759
768
770 return HEOS.Reducing->PSI_rho(HEOS.mole_fractions, i, xN_flag);
771 }
772 static CoolPropDbl d_PSI_rho_dxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
774 return HEOS.Reducing->d_PSI_rho_dxj(HEOS.mole_fractions, i, j, xN_flag);
775 }
776 static CoolPropDbl d2_PSI_rho_dxj_dxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
778 return HEOS.Reducing->d2_PSI_rho_dxj_dxk(HEOS.mole_fractions, i, j, k, xN_flag);
779 }
781 return HEOS.Reducing->PSI_T(HEOS.mole_fractions, i, xN_flag);
782 }
784 return HEOS.Reducing->d_PSI_T_dxj(HEOS.mole_fractions, i, j, xN_flag);
785 }
786 static CoolPropDbl d2_PSI_T_dxj_dxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
788 return HEOS.Reducing->d2_PSI_T_dxj_dxk(HEOS.mole_fractions, i, j, k, xN_flag);
789 }
790
792 return HEOS.calc_alpha0_deriv_nocache(0, 0, HEOS.mole_fractions, HEOS.tau(), HEOS.delta(), HEOS.T_reducing(), HEOS.rhomolar_reducing());
793 }
794
796 bool cache_values = false;
797 HelmholtzDerivatives HD = HEOS.residual_helmholtz->all(HEOS, HEOS.mole_fractions, HEOS.tau(), HEOS.delta(), cache_values);
798 return HD.alphar;
799 }
801 return HEOS.residual_helmholtz->dalphar_dxi(HEOS, i, xN_flag);
802 }
804 return HEOS.residual_helmholtz->d2alphar_dxi_dTau(HEOS, i, xN_flag);
805 }
807 return HEOS.residual_helmholtz->d3alphar_dxi_dTau2(HEOS, i, xN_flag);
808 }
810 return HEOS.residual_helmholtz->d4alphar_dxi_dTau3(HEOS, i, xN_flag);
811 }
813 return HEOS.residual_helmholtz->d2alphar_dxi_dDelta(HEOS, i, xN_flag);
814 }
816 return HEOS.residual_helmholtz->d3alphar_dxi_dDelta2(HEOS, i, xN_flag);
817 }
819 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta3(HEOS, i, xN_flag);
820 }
822 return HEOS.residual_helmholtz->d3alphar_dxi_dDelta_dTau(HEOS, i, xN_flag);
823 }
825 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta2_dTau(HEOS, i, xN_flag);
826 }
828 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta_dTau2(HEOS, i, xN_flag);
829 }
830 static CoolPropDbl d2alphardxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
832 return HEOS.residual_helmholtz->d2alphardxidxj(HEOS, i, j, xN_flag);
833 }
836 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dTau2(HEOS, i, j, xN_flag);
837 }
840 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dDelta2(HEOS, i, j, xN_flag);
841 }
844 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dDelta_dTau(HEOS, i, j, xN_flag);
845 }
848 return HEOS.residual_helmholtz->d3alphar_dxi_dxj_dDelta(HEOS, i, j, xN_flag);
849 }
852 return HEOS.residual_helmholtz->d3alphar_dxi_dxj_dTau(HEOS, i, j, xN_flag);
853 }
854 static CoolPropDbl d3alphardxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
856 return HEOS.residual_helmholtz->d3alphardxidxjdxk(HEOS, i, j, k, xN_flag);
857 }
859 return HEOS.tau();
860 }
862 return HEOS.Reducing->Tr(HEOS.get_mole_fractions());
863 }
865 return HEOS.Reducing->dTrdxi__constxj(HEOS.get_mole_fractions(), i, xN_flag);
866 }
868 return HEOS.Reducing->d2Trdxi2__constxj(HEOS.get_mole_fractions(), i, xN_flag);
869 }
871 return HEOS.Reducing->d2Trdxidxj(HEOS.get_mole_fractions(), i, j, xN_flag);
872 }
873 static CoolPropDbl d3Trdxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
875 return HEOS.Reducing->d3Trdxidxjdxk(HEOS.get_mole_fractions(), i, j, k, xN_flag);
876 }
878 return HEOS.Reducing->ndTrdni__constnj(HEOS.get_mole_fractions(), i, xN_flag);
879 }
882 return HEOS.Reducing->d_ndTrdni_dxj__constxi(HEOS.get_mole_fractions(), i, j, xN_flag);
883 }
884 static CoolPropDbl d2_ndTrdni_dxj_dxk__constxi(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
886 return HEOS.Reducing->d2_ndTrdni_dxj_dxk__constxi(HEOS.get_mole_fractions(), i, j, k, xN_flag);
887 }
889 return HEOS.Reducing->dTr_dgammaT(HEOS.get_mole_fractions());
890 }
892 return HEOS.Reducing->dTr_dbetaT(HEOS.get_mole_fractions());
893 }
895 return HEOS.Reducing->d2Tr_dxidgammaT(HEOS.get_mole_fractions(), i, xN_flag);
896 }
898 return HEOS.Reducing->d2Tr_dxidbetaT(HEOS.get_mole_fractions(), i, xN_flag);
899 }
900
902 return HEOS.delta();
903 }
905 return HEOS.Reducing->rhormolar(HEOS.get_mole_fractions());
906 }
908 return HEOS.Reducing->drhormolardxi__constxj(HEOS.get_mole_fractions(), i, xN_flag);
909 }
910 static CoolPropDbl d2rhormolardxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
912 return HEOS.Reducing->d2rhormolardxidxj(HEOS.get_mole_fractions(), i, j, xN_flag);
913 }
914 static CoolPropDbl d3rhormolardxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
916 return HEOS.Reducing->d3rhormolardxidxjdxk(HEOS.get_mole_fractions(), i, j, k, xN_flag);
917 }
919 return HEOS.Reducing->drhormolar_dgammaV(HEOS.get_mole_fractions());
920 }
922 return HEOS.Reducing->drhormolar_dbetaV(HEOS.get_mole_fractions());
923 }
925 return HEOS.Reducing->d2rhormolar_dxidgammaV(HEOS.get_mole_fractions(), i, xN_flag);
926 }
928 return HEOS.Reducing->d2rhormolar_dxidbetaV(HEOS.get_mole_fractions(), i, xN_flag);
929 }
931 return HEOS.Reducing->ndrhorbardni__constnj(HEOS.get_mole_fractions(), i, xN_flag);
932 }
935 return HEOS.Reducing->d_ndrhorbardni_dxj__constxi(HEOS.get_mole_fractions(), i, j, xN_flag);
936 }
937 static CoolPropDbl d2_ndrhorbardni_dxj_dxk__constxi(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
939 return HEOS.Reducing->d2_ndrhorbardni_dxj_dxk__constxi(HEOS.get_mole_fractions(), i, j, k, xN_flag);
940 }
942 return HEOS.p();
943 }
944
946 return HEOS.dalpha0_dDelta();
947 }
949 return HEOS.d2alpha0_dDelta2();
950 }
952 return HEOS.dalpha0_dTau();
953 }
955 return HEOS.d2alpha0_dTau2();
956 }
957
959 return HEOS.dalphar_dDelta();
960 }
962 return HEOS.d2alphar_dDelta2();
963 }
965 return HEOS.d2alphar_dDelta_dTau();
966 }
968 return HEOS.dalphar_dTau();
969 }
971 return HEOS.d2alphar_dTau2();
972 }
973
975 return HEOS.alphar() + alpha0(HEOS, xN_flag);
976 }
978 return HEOS.dalphar_dDelta() + HEOS.dalpha0_dDelta();
979 }
981 return HEOS.dalphar_dTau() + HEOS.dalpha0_dTau();
982 }
984 return HEOS.d2alphar_dDelta2() + HEOS.d2alpha0_dDelta2();
985 }
987 return HEOS.d2alphar_dDelta_dTau() + HEOS.d2alpha0_dDelta_dTau();
988 }
990 return HEOS.d2alphar_dTau2() + HEOS.d2alpha0_dTau2();
991 }
993 return dalphar_dxi(HEOS, i, xN_flag) + dalpha0_dxi(HEOS, i, xN_flag);
994 }
996 return d2alphar_dxi_dDelta(HEOS, i, xN_flag) + d2alpha0_dxi_dDelta(HEOS, i, xN_flag);
997 }
999 return d2alphar_dxi_dTau(HEOS, i, xN_flag) + d2alpha0_dxi_dTau(HEOS, i, xN_flag);
1000 }
1001 static CoolPropDbl d2alphadxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
1003 return d2alphardxidxj(HEOS, i, j, xN_flag) + d2alpha0dxidxj(HEOS, i, j, xN_flag);
1004 }
1006 double f_i = MixtureDerivatives::fugacity_i(HEOS, i, xN_flag);
1007 return log(f_i);
1008 }
1009
1010}; /* class MixtureDerivatives */
1011
1012} /* namespace CoolProp*/
1013#endif