CoolProp 6.8.1dev
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
540 static CoolPropDbl d2_ndalphardni_dxj_dDelta__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
541 x_N_dependency_flag xN_flag);
542
557 static CoolPropDbl d2_ndalphardni_dxj_dTau__constdelta_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
558 x_N_dependency_flag xN_flag);
559 static CoolPropDbl d3_ndalphardni_dxj_dTau2__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_dDelta2__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
562 x_N_dependency_flag xN_flag);
563 static CoolPropDbl d3_ndalphardni_dxj_dDelta_dTau__constxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
564 x_N_dependency_flag xN_flag);
565
588 static CoolPropDbl nd2nalphardnidnj__constT_V(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
589
590 /* \brief GERG 2004 Eqn. 7.47
591 * \f{eqnarray*}{
592 * 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}\\
593 * &+& \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}\\
594 * &+& \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}\\
595 * \f}
596 * @param HEOS The HelmholtzEOSMixtureBackend to be used
597 * @param i The index of interest
598 * @param j The second index of interest
599 * @param xN_flag A flag specifying whether the all mole fractions are independent or only the first N-1
600 */
601 static CoolPropDbl nd_ndalphardni_dnj__constT_V(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
602
603 /* \brief \f$\tau\f$ derivative of GERG 2004 7.47
604 *
605 */
606 static CoolPropDbl d_nd_ndalphardni_dnj_dTau__constdelta_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
607 x_N_dependency_flag xN_flag);
609 x_N_dependency_flag xN_flag);
611 x_N_dependency_flag xN_flag);
613 x_N_dependency_flag xN_flag);
614
615 /* \brief \f$\delta\f$ derivative of GERG 2004 7.47
616 *
617 */
618 static CoolPropDbl d_nd_ndalphardni_dnj_dDelta__consttau_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
619 x_N_dependency_flag xN_flag);
620
621 /* \brief \f$x_k\f$ derivative of GERG 2004 7.47
622 *
623 */
624 static CoolPropDbl d_nd_ndalphardni_dnj_dxk__consttau_delta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
625 x_N_dependency_flag xN_flag);
626
627 static CoolPropDbl d2_nd_ndalphardni_dnj_dxk_dTau__constdelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
628 x_N_dependency_flag xN_flag);
629 static CoolPropDbl d2_nd_ndalphardni_dnj_dxk_dDelta__consttau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
630 x_N_dependency_flag xN_flag);
631
643
645
646 static CoolPropDbl d_nddeltadni_dxj__constdelta_tau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
647
648 static CoolPropDbl d2_nddeltadni_dxj_dDelta__consttau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
649 x_N_dependency_flag xN_flag);
650
662
664
665 static CoolPropDbl d_ndtaudni_dxj__constdelta_tau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
666
667 static CoolPropDbl d2_ndtaudni_dxj_dTau__constdelta(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
668
684 static CoolPropDbl d_ndalphardni_dxj__constdelta_tau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
685 x_N_dependency_flag xN_flag);
686
687 /* \brief \f$x_k\f$ derivative of GERG 2004 7.52
688 *
689 */
690 static CoolPropDbl d2_ndalphardni_dxj_dxk__constdelta_tau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
691 x_N_dependency_flag xN_flag);
692
693 static CoolPropDbl d3_ndalphardni_dxj_dxk_dTau__constdelta_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
694 x_N_dependency_flag xN_flag);
695 static CoolPropDbl d3_ndalphardni_dxj_dxk_dDelta__consttau_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
696 x_N_dependency_flag xN_flag);
697
698 static CoolPropDbl dalpha0_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
701 static CoolPropDbl d2alpha0dxidxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
702
705 return (HEOS.alphar() + HEOS.alpha0()) * HEOS.rhomolar() * HEOS.gas_constant() * HEOS.T();
706 }
709
712
715
717 static CoolPropDbl dpsi_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
718
720 static CoolPropDbl dpsir_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
721
723 static CoolPropDbl d_rhorTr_dxi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
724
726 static CoolPropDbl d2_rhorTr_dxidxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag);
727
730
733
736
739
742
745
748
751
753 static CoolPropDbl d2psi_dxi_dxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag = XN_INDEPENDENT);
754
756 static CoolPropDbl d2psir_dxi_dxj(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag = XN_INDEPENDENT);
757
766
768 return HEOS.Reducing->PSI_rho(HEOS.mole_fractions, i, xN_flag);
769 }
770 static CoolPropDbl d_PSI_rho_dxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
772 return HEOS.Reducing->d_PSI_rho_dxj(HEOS.mole_fractions, i, j, xN_flag);
773 }
774 static CoolPropDbl d2_PSI_rho_dxj_dxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
776 return HEOS.Reducing->d2_PSI_rho_dxj_dxk(HEOS.mole_fractions, i, j, k, xN_flag);
777 }
779 return HEOS.Reducing->PSI_T(HEOS.mole_fractions, i, xN_flag);
780 }
782 return HEOS.Reducing->d_PSI_T_dxj(HEOS.mole_fractions, i, j, xN_flag);
783 }
784 static CoolPropDbl d2_PSI_T_dxj_dxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
786 return HEOS.Reducing->d2_PSI_T_dxj_dxk(HEOS.mole_fractions, i, j, k, xN_flag);
787 }
788
790 return HEOS.calc_alpha0_deriv_nocache(0, 0, HEOS.mole_fractions, HEOS.tau(), HEOS.delta(), HEOS.T_reducing(), HEOS.rhomolar_reducing());
791 }
792
794 bool cache_values = false;
795 HelmholtzDerivatives HD = HEOS.residual_helmholtz->all(HEOS, HEOS.mole_fractions, HEOS.tau(), HEOS.delta(), cache_values);
796 return HD.alphar;
797 }
799 return HEOS.residual_helmholtz->dalphar_dxi(HEOS, i, xN_flag);
800 }
802 return HEOS.residual_helmholtz->d2alphar_dxi_dTau(HEOS, i, xN_flag);
803 }
805 return HEOS.residual_helmholtz->d3alphar_dxi_dTau2(HEOS, i, xN_flag);
806 }
808 return HEOS.residual_helmholtz->d4alphar_dxi_dTau3(HEOS, i, xN_flag);
809 }
811 return HEOS.residual_helmholtz->d2alphar_dxi_dDelta(HEOS, i, xN_flag);
812 }
814 return HEOS.residual_helmholtz->d3alphar_dxi_dDelta2(HEOS, i, xN_flag);
815 }
817 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta3(HEOS, i, xN_flag);
818 }
820 return HEOS.residual_helmholtz->d3alphar_dxi_dDelta_dTau(HEOS, i, xN_flag);
821 }
823 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta2_dTau(HEOS, i, xN_flag);
824 }
826 return HEOS.residual_helmholtz->d4alphar_dxi_dDelta_dTau2(HEOS, i, xN_flag);
827 }
828 static CoolPropDbl d2alphardxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
830 return HEOS.residual_helmholtz->d2alphardxidxj(HEOS, i, j, xN_flag);
831 }
834 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dTau2(HEOS, i, j, xN_flag);
835 }
838 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dDelta2(HEOS, i, j, xN_flag);
839 }
842 return HEOS.residual_helmholtz->d4alphar_dxi_dxj_dDelta_dTau(HEOS, i, j, xN_flag);
843 }
846 return HEOS.residual_helmholtz->d3alphar_dxi_dxj_dDelta(HEOS, i, j, xN_flag);
847 }
850 return HEOS.residual_helmholtz->d3alphar_dxi_dxj_dTau(HEOS, i, j, xN_flag);
851 }
852 static CoolPropDbl d3alphardxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
854 return HEOS.residual_helmholtz->d3alphardxidxjdxk(HEOS, i, j, k, xN_flag);
855 }
857 return HEOS.tau();
858 }
860 return HEOS.Reducing->Tr(HEOS.get_mole_fractions());
861 }
863 return HEOS.Reducing->dTrdxi__constxj(HEOS.get_mole_fractions(), i, xN_flag);
864 }
866 return HEOS.Reducing->d2Trdxi2__constxj(HEOS.get_mole_fractions(), i, xN_flag);
867 }
869 return HEOS.Reducing->d2Trdxidxj(HEOS.get_mole_fractions(), i, j, xN_flag);
870 }
871 static CoolPropDbl d3Trdxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
873 return HEOS.Reducing->d3Trdxidxjdxk(HEOS.get_mole_fractions(), i, j, k, xN_flag);
874 }
876 return HEOS.Reducing->ndTrdni__constnj(HEOS.get_mole_fractions(), i, xN_flag);
877 }
880 return HEOS.Reducing->d_ndTrdni_dxj__constxi(HEOS.get_mole_fractions(), i, j, xN_flag);
881 }
882 static CoolPropDbl d2_ndTrdni_dxj_dxk__constxi(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
884 return HEOS.Reducing->d2_ndTrdni_dxj_dxk__constxi(HEOS.get_mole_fractions(), i, j, k, xN_flag);
885 }
887 return HEOS.Reducing->dTr_dgammaT(HEOS.get_mole_fractions());
888 }
890 return HEOS.Reducing->dTr_dbetaT(HEOS.get_mole_fractions());
891 }
893 return HEOS.Reducing->d2Tr_dxidgammaT(HEOS.get_mole_fractions(), i, xN_flag);
894 }
896 return HEOS.Reducing->d2Tr_dxidbetaT(HEOS.get_mole_fractions(), i, xN_flag);
897 }
898
900 return HEOS.delta();
901 }
903 return HEOS.Reducing->rhormolar(HEOS.get_mole_fractions());
904 }
906 return HEOS.Reducing->drhormolardxi__constxj(HEOS.get_mole_fractions(), i, xN_flag);
907 }
908 static CoolPropDbl d2rhormolardxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
910 return HEOS.Reducing->d2rhormolardxidxj(HEOS.get_mole_fractions(), i, j, xN_flag);
911 }
912 static CoolPropDbl d3rhormolardxidxjdxk(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
914 return HEOS.Reducing->d3rhormolardxidxjdxk(HEOS.get_mole_fractions(), i, j, k, xN_flag);
915 }
917 return HEOS.Reducing->drhormolar_dgammaV(HEOS.get_mole_fractions());
918 }
920 return HEOS.Reducing->drhormolar_dbetaV(HEOS.get_mole_fractions());
921 }
923 return HEOS.Reducing->d2rhormolar_dxidgammaV(HEOS.get_mole_fractions(), i, xN_flag);
924 }
926 return HEOS.Reducing->d2rhormolar_dxidbetaV(HEOS.get_mole_fractions(), i, xN_flag);
927 }
929 return HEOS.Reducing->ndrhorbardni__constnj(HEOS.get_mole_fractions(), i, xN_flag);
930 }
933 return HEOS.Reducing->d_ndrhorbardni_dxj__constxi(HEOS.get_mole_fractions(), i, j, xN_flag);
934 }
935 static CoolPropDbl d2_ndrhorbardni_dxj_dxk__constxi(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, std::size_t k,
937 return HEOS.Reducing->d2_ndrhorbardni_dxj_dxk__constxi(HEOS.get_mole_fractions(), i, j, k, xN_flag);
938 }
940 return HEOS.p();
941 }
942
944 return HEOS.dalpha0_dDelta();
945 }
947 return HEOS.d2alpha0_dDelta2();
948 }
950 return HEOS.dalpha0_dTau();
951 }
953 return HEOS.d2alpha0_dTau2();
954 }
955
957 return HEOS.dalphar_dDelta();
958 }
960 return HEOS.d2alphar_dDelta2();
961 }
963 return HEOS.d2alphar_dDelta_dTau();
964 }
966 return HEOS.dalphar_dTau();
967 }
969 return HEOS.d2alphar_dTau2();
970 }
971
973 return HEOS.alphar() + alpha0(HEOS, xN_flag);
974 }
976 return HEOS.dalphar_dDelta() + HEOS.dalpha0_dDelta();
977 }
979 return HEOS.dalphar_dTau() + HEOS.dalpha0_dTau();
980 }
982 return HEOS.d2alphar_dDelta2() + HEOS.d2alpha0_dDelta2();
983 }
985 return HEOS.d2alphar_dDelta_dTau() + HEOS.d2alpha0_dDelta_dTau();
986 }
988 return HEOS.d2alphar_dTau2() + HEOS.d2alpha0_dTau2();
989 }
991 return dalphar_dxi(HEOS, i, xN_flag) + dalpha0_dxi(HEOS, i, xN_flag);
992 }
994 return d2alphar_dxi_dDelta(HEOS, i, xN_flag) + d2alpha0_dxi_dDelta(HEOS, i, xN_flag);
995 }
997 return d2alphar_dxi_dTau(HEOS, i, xN_flag) + d2alpha0_dxi_dTau(HEOS, i, xN_flag);
998 }
999 static CoolPropDbl d2alphadxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
1001 return d2alphardxidxj(HEOS, i, j, xN_flag) + d2alpha0dxidxj(HEOS, i, j, xN_flag);
1002 }
1004 double f_i = MixtureDerivatives::fugacity_i(HEOS, i, xN_flag);
1005 return log(f_i);
1006 }
1007
1008}; /* class MixtureDerivatives */
1009
1010} /* namespace CoolProp*/
1011#endif