CoolProp  6.6.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 
21 namespace CoolProp {
22 
23 class 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);
144  static CoolPropDbl d_ndln_fugacity_i_dnj_dtau__constdelta_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
145  x_N_dependency_flag xN_flag);
146  static CoolPropDbl d2_ndln_fugacity_i_dnj_dtau2__constdelta_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
147  x_N_dependency_flag xN_flag);
148  static CoolPropDbl d2_ndln_fugacity_i_dnj_ddelta_dtau__constx(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
149  x_N_dependency_flag xN_flag);
150  static CoolPropDbl d2_ndln_fugacity_i_dnj_ddelta2__consttau_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
151  x_N_dependency_flag xN_flag);
152  static CoolPropDbl d_ndln_fugacity_i_dnj_ddelta__consttau_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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 
384  static CoolPropDbl dln_fugacity_coefficient_dxj__constT_p_xi(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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) {
411  return MixtureDerivatives::d_ndalphardni_dxj__constT_V_xi(HEOS, i, j, 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 
448  static CoolPropDbl d2nalphar_dni_dT(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
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);
608  static CoolPropDbl d2_nd_ndalphardni_dnj_dTau2__constdelta_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
609  x_N_dependency_flag xN_flag);
610  static CoolPropDbl d2_nd_ndalphardni_dnj_dDelta2__consttau_x(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
611  x_N_dependency_flag xN_flag);
612  static CoolPropDbl d2_nd_ndalphardni_dnj_dDelta_dTau__constx(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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 
663  static CoolPropDbl d_ndtaudni_dTau(HelmholtzEOSMixtureBackend& HEOS, std::size_t i, x_N_dependency_flag xN_flag);
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);
699  static CoolPropDbl d2alpha0_dxi_dTau(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  }
781  static CoolPropDbl d_PSI_T_dxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, CoolProp::x_N_dependency_flag xN_flag) {
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  }
832  static CoolPropDbl d4alphar_dxi_dxj_dTau2(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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  }
848  static CoolPropDbl d3alphar_dxi_dxj_dTau(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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  }
868  static CoolPropDbl d2Trdxidxj(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j, CoolProp::x_N_dependency_flag xN_flag) {
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  }
878  static CoolPropDbl d_ndTrdni_dxj__constxi(CoolProp::HelmholtzEOSMixtureBackend& HEOS, std::size_t i, std::size_t j,
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