CoolProp 8.0.0
An open-source fluid property and humid air property database
ReducingFunctions.h
Go to the documentation of this file.
1
7#ifndef MIXTURE_BINARY_PAIRS_H
8#define MIXTURE_BINARY_PAIRS_H
9
10#include <vector>
12#include <memory>
13using std::shared_ptr;
14
15namespace CoolProp {
16
17using STLMatrix = std::vector<std::vector<CoolPropDbl>>;
18
20{
23};
24
25std::string get_reducing_function_name(const std::string& CAS1, const std::string& CAS2);
26
33{
34 protected:
35 std::size_t N;
36
37 public:
39 virtual ~ReducingFunction() = default;
40
41 virtual ReducingFunction* copy() = 0;
42
43 virtual void set_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter, double value) = 0;
44
45 virtual double get_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter) const = 0;
46
48 static shared_ptr<ReducingFunction> factory(const std::vector<CoolPropFluid*>& components, STLMatrix& F);
49
51 virtual CoolPropDbl Tr(const std::vector<CoolPropDbl>& x) const = 0;
53 virtual CoolPropDbl dTrdxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const = 0;
55 virtual CoolPropDbl rhormolar(const std::vector<CoolPropDbl>& x) const = 0;
57 virtual CoolPropDbl drhormolardxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const = 0;
58 virtual CoolPropDbl dTr_dgammaT(const std::vector<CoolPropDbl>& x) const {
59 throw CoolProp::NotImplementedError("dTr_dgammaT is not implemented for this backend");
60 }
61 virtual CoolPropDbl dTr_dbetaT(const std::vector<CoolPropDbl>& x) const {
62 throw CoolProp::NotImplementedError("dTr_dbetaT is not implemented for this backend");
63 }
64 virtual CoolPropDbl drhormolar_dgammaV(const std::vector<CoolPropDbl>& x) const {
65 throw CoolProp::NotImplementedError("drhormolar_dgammaV is not implemented for this backend");
66 }
67 virtual CoolPropDbl drhormolar_dbetaV(const std::vector<CoolPropDbl>& x) const {
68 throw CoolProp::NotImplementedError("drhormolar_dbetaV is not implemented for this backend");
69 }
70 virtual CoolPropDbl d2Tr_dxidgammaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const {
71 throw CoolProp::NotImplementedError("d2Tr_dxidgammaT is not implemented for this backend");
72 }
73 virtual CoolPropDbl d2Tr_dxidbetaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const {
74 throw CoolProp::NotImplementedError("d2Tr_dxidbetaT is not implemented for this backend");
75 }
76 virtual CoolPropDbl d2rhormolar_dxidgammaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const {
77 throw CoolProp::NotImplementedError("d2rhormolar_dxidgammaV is not implemented for this backend");
78 }
79 virtual CoolPropDbl d2rhormolar_dxidbetaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const {
80 throw CoolProp::NotImplementedError("d2rhormolar_dxidbetaV is not implemented for this backend");
81 }
82
83 virtual CoolPropDbl d2rhormolardxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const = 0;
84 virtual CoolPropDbl d2rhormolardxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const = 0;
85 virtual CoolPropDbl d3rhormolardxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
86 x_N_dependency_flag xN_flag) const = 0;
87 virtual CoolPropDbl d2Trdxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const = 0;
88 virtual CoolPropDbl d2Trdxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const = 0;
89 virtual CoolPropDbl d3Trdxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
90 x_N_dependency_flag xN_flag) const = 0;
91
103 virtual CoolPropDbl d_ndTrdni_dxj__constxi(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const;
104
105 virtual CoolPropDbl d2_ndTrdni_dxj_dxk__constxi(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
106 x_N_dependency_flag xN_flag) const;
107
121 virtual CoolPropDbl d_ndrhorbardni_dxj__constxi(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j,
122 x_N_dependency_flag xN_flag) const;
123
124 virtual CoolPropDbl d2_ndrhorbardni_dxj_dxk__constxi(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
125 x_N_dependency_flag xN_flag) const;
126
127 virtual CoolPropDbl ndrhorbardni__constnj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
128 virtual CoolPropDbl ndTrdni__constnj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
129 virtual CoolPropDbl PSI_rho(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
130 virtual CoolPropDbl d_PSI_rho_dxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const;
131 virtual CoolPropDbl d2_PSI_rho_dxj_dxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
132 x_N_dependency_flag xN_flag) const;
133 virtual CoolPropDbl PSI_T(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
134 virtual CoolPropDbl d_PSI_T_dxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const;
135 virtual CoolPropDbl d2_PSI_T_dxj_dxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
136 x_N_dependency_flag xN_flag) const;
137};
138
145{
146 private:
147 GERG2008ReducingFunction(const GERG2008ReducingFunction& that); // No copying
148 protected:
155 std::vector<CoolPropDbl> Yc_T;
156 std::vector<CoolPropDbl> Yc_v;
157 std::vector<CoolPropFluid> pFluids;
158
159 public:
160 GERG2008ReducingFunction(const std::vector<CoolPropFluid>& pFluids, const STLMatrix& beta_v, const STLMatrix& gamma_v, const STLMatrix& beta_T,
161 const STLMatrix& gamma_T)
163
164 this->N = pFluids.size();
165 T_c.resize(N, std::vector<CoolPropDbl>(N, 0));
166 v_c.resize(N, std::vector<CoolPropDbl>(N, 0));
167 Yc_T.resize(N);
168 Yc_v.resize(N);
169 for (std::size_t i = 0; i < N; ++i) {
170 for (std::size_t j = 0; j < N; j++) {
171 T_c[i][j] = sqrt(pFluids[i].EOS().reduce.T * pFluids[j].EOS().reduce.T);
172 v_c[i][j] = 1.0 / 8.0 * pow(pow(pFluids[i].EOS().reduce.rhomolar, -1.0 / 3.0) + pow(pFluids[j].EOS().reduce.rhomolar, -1.0 / 3.0), 3);
173 }
174 Yc_T[i] = pFluids[i].EOS().reduce.T;
175 Yc_v[i] = 1 / pFluids[i].EOS().reduce.rhomolar;
176 }
177 };
178
179 ReducingFunction* copy() override {
181 };
182
185
187 void set_binary_interaction_double(const std::size_t i, const std::size_t j, double betaT, double gammaT, double betaV, double gammaV) {
188 // bound-check indices
189 if (i >= N) {
190 if (j >= N) {
191 throw ValueError(format("Both indices i [%d] and j [%d] are out of bounds. Must be between 0 and %d.", i, j, N - 1));
192 } else {
193 throw ValueError(format("Index i [%d] is out of bounds. Must be between 0 and %d.", i, N - 1));
194 }
195 } else if (j >= N) {
196 throw ValueError(format("Index j [%d] is out of bounds. Must be between 0 and %d.", j, N - 1));
197 }
198 beta_T[i][j] = betaT;
199 beta_T[j][i] = 1 / betaT;
200 gamma_T[i][j] = gammaT;
201 gamma_T[j][i] = gammaT;
202 beta_v[i][j] = betaV;
203 beta_v[j][i] = 1 / betaV;
204 gamma_v[i][j] = gammaV;
205 gamma_v[j][i] = gammaV;
206 }
207
209 void set_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter, double value) override {
210 // bound-check indices
211 if (i >= N) {
212 if (j >= N) {
213 throw ValueError(format("Both indices i [%d] and j [%d] are out of bounds. Must be between 0 and %d.", i, j, N - 1));
214 } else {
215 throw ValueError(format("Index i [%d] is out of bounds. Must be between 0 and %d.", i, N - 1));
216 }
217 } else if (j >= N) {
218 throw ValueError(format("Index j [%d] is out of bounds. Must be between 0 and %d.", j, N - 1));
219 }
220 if (parameter == "betaT") {
221 beta_T[i][j] = value;
222 beta_T[j][i] = 1 / value;
223 } else if (parameter == "gammaT") {
224 gamma_T[i][j] = value;
225 gamma_T[j][i] = value;
226 } else if (parameter == "betaV") {
227 beta_v[i][j] = value;
228 beta_v[j][i] = 1 / value;
229 } else if (parameter == "gammaV") {
230 gamma_v[i][j] = value;
231 gamma_v[j][i] = value;
232 } else {
233 throw KeyError(format("This key [%s] is invalid to set_binary_interaction_double", parameter.c_str()));
234 }
235 }
237 double get_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter) const override {
238 if (parameter == "betaT") {
239 return beta_T[i][j];
240 } else if (parameter == "gammaT") {
241 return gamma_T[i][j];
242 } else if (parameter == "betaV") {
243 return beta_v[i][j];
244 } else if (parameter == "gammaV") {
245 return gamma_v[i][j];
246 } else {
247 throw KeyError(format("This key [%s] is invalid to get_binary_interaction_double", parameter.c_str()));
248 }
249 }
250
254 CoolPropDbl Tr(const std::vector<CoolPropDbl>& x) const override;
255
259 CoolPropDbl dTr_dgammaT(const std::vector<CoolPropDbl>& x) const override;
260
264 CoolPropDbl dTr_dbetaT(const std::vector<CoolPropDbl>& x) const override;
265
268 CoolPropDbl d2Tr_dxidgammaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
269
272 CoolPropDbl d2Tr_dxidbetaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
273
278 CoolPropDbl dTrdxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
283 CoolPropDbl d2Trdxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
288 CoolPropDbl d2Trdxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override;
293 CoolPropDbl d3Trdxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
294 x_N_dependency_flag xN_flag) const override;
295
300 CoolPropDbl dvrmolardxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
305 CoolPropDbl d2vrmolardxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
310 CoolPropDbl d2vrmolardxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const;
315 CoolPropDbl d3vrmolardxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag) const;
320 CoolPropDbl rhormolar(const std::vector<CoolPropDbl>& x) const override;
321
325 CoolPropDbl drhormolar_dgammaV(const std::vector<CoolPropDbl>& x) const override;
326
330 CoolPropDbl drhormolar_dbetaV(const std::vector<CoolPropDbl>& x) const override;
331
334 CoolPropDbl d2vrmolar_dxidgammaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
335
338 CoolPropDbl d2vrmolar_dxidbetaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const;
339
342 CoolPropDbl d2rhormolar_dxidbetaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
343
346 CoolPropDbl d2rhormolar_dxidgammaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
347
355 CoolPropDbl drhormolardxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
363 CoolPropDbl d2rhormolardxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override;
371 CoolPropDbl d2rhormolardxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override;
375 CoolPropDbl d3rhormolardxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
376 x_N_dependency_flag xN_flag) const override;
377
384 CoolPropDbl Yr(const std::vector<CoolPropDbl>& x, const STLMatrix& beta, const STLMatrix& gamma, const STLMatrix& Y_c_ij,
385 const std::vector<CoolPropDbl>& Yc) const;
386
393 CoolPropDbl dYr_dgamma(const std::vector<CoolPropDbl>& x, const STLMatrix& beta, const STLMatrix& gamma, const STLMatrix& Y_c_ij,
394 const std::vector<CoolPropDbl>& Yc) const;
395
398 CoolPropDbl dYr_dbeta(const std::vector<CoolPropDbl>& x, const STLMatrix& beta, const STLMatrix& gamma, const STLMatrix& Y_c_ij,
399 const std::vector<CoolPropDbl>& Yc) const;
400
416 CoolPropDbl dYrdxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, const STLMatrix& beta, const STLMatrix& gamma,
417 const STLMatrix& Y_c_ij, const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
418
421 CoolPropDbl d2Yrdxidgamma(const std::vector<CoolPropDbl>& x, std::size_t i, const STLMatrix& beta, const STLMatrix& gamma,
422 const STLMatrix& Y_c_ij, const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
425 CoolPropDbl d2Yrdxidbeta(const std::vector<CoolPropDbl>& x, std::size_t i, const STLMatrix& beta, const STLMatrix& gamma, const STLMatrix& Y_c_ij,
426 const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
427
442 CoolPropDbl d2Yrdxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, const STLMatrix& beta, const STLMatrix& gamma,
443 const STLMatrix& Y_c_ij, const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
458 CoolPropDbl d2Yrdxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, const STLMatrix& beta, const STLMatrix& gamma,
459 const STLMatrix& Y_c_ij, const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
460
464 CoolPropDbl d3Yrdxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k, const STLMatrix& beta,
465 const STLMatrix& gamma, const STLMatrix& Y_c_ij, const std::vector<CoolPropDbl>& Yc, x_N_dependency_flag xN_flag) const;
466
473 const CoolPropDbl c_Y_ij(const std::size_t i, const std::size_t j, const STLMatrix& beta, const STLMatrix& gamma, const STLMatrix& Y_c) const;
474
479 CoolPropDbl f_Y_ij(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, const STLMatrix& beta) const;
486 CoolPropDbl dfYkidxi__constxk(const std::vector<CoolPropDbl>& x, std::size_t k, std::size_t i, const STLMatrix& beta) const;
493 CoolPropDbl dfYikdxi__constxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t k, const STLMatrix& beta) const;
499 CoolPropDbl d2fYkidxi2__constxk(const std::vector<CoolPropDbl>& x, std::size_t k, std::size_t i, const STLMatrix& beta) const;
505 CoolPropDbl d2fYikdxi2__constxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t k, const STLMatrix& beta) const;
512 CoolPropDbl d2fYijdxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t k, const STLMatrix& beta) const;
513
514 /* Third order mixed partial derivative of \f$f_{Y,ij}\f$
515 * \f[
516 * \left(\dfrac{\partial^3 f_{Y,ij}(x_i, x_j)}{\partial x_i^2\partial x_j}\right)_{j\neq i} = \dfrac{-6 \beta^{2} x_{i} x_{j}^{2} \left(\beta^{2} - 1\right)}{\beta^{8} x_{i}^{4} + 4 \beta^{6} x_{i}^{3} x_{j} + 6 \beta^{4} x_{i}^{2} x_{j}^{2} + 4 \beta^{2} x_{i} x_{j}^{3} + x_{j}^{4}}
517 * \f]
518 */
519 CoolPropDbl d3fYijdxi2dxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, const STLMatrix& beta) const;
520 /* Third order mixed partial derivative of \f$f_{Y,ij}\f$
521 * \f[
522 * \left(\dfrac{\partial^3 f_{Y,ij}(x_i, x_j)}{\partial x_i\partial x_j^2}\right)_{j\neq i} = \dfrac{6 \beta^{2} x_{i}^{2} x_{j} \left(\beta^{2} - 1\right)}{\beta^{8} x_{i}^{4} + 4 \beta^{6} x_{i}^{3} x_{j} + 6 \beta^{4} x_{i}^{2} x_{j}^{2} + 4 \beta^{2} x_{i} x_{j}^{3} + x_{j}^{4}}
523 * \f]
524 */
525 CoolPropDbl d3fYijdxidxj2(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, const STLMatrix& beta) const;
526 /* Third order mixed partial derivative of \f$f_{Y,ij}\f$
527 * \f[
528 * \left(\dfrac{ \partial ^ 3 f_{ Y, ki }(x_k, x_i) }{\partial x_i ^ 3}\right)_{ k\neq i } = \dfrac{ \beta_{ Y ki }^{2} x_{ k }^{3} \left(-6 \beta_{ Y ki }^{2} +6\right) }{\left(\beta_{ Y ki }^{2} x_{ k } +x_{ i }\right) ^ { 4 }}
529 * \f]
530 */
531 CoolPropDbl d3fYkidxi3__constxk(const std::vector<CoolPropDbl>& x, std::size_t k, std::size_t i, const STLMatrix& beta) const;
532 /* Third order mixed partial derivative of \f$f_{Y,ij}\f$
533 * \f[
534 * \left(\dfrac{\partial^3 f_{Y,ik}(x_i, x_k)}{\partial x_i^3}\right)_{k\neq i} = \dfrac{6 \beta_{Y ik}^{2} x_{k}^{3} \left(\beta_{Y ik}^{2} - 1\right)}{\beta_{Y ik}^{8} x_{i}^{4} + 4 \beta_{Y ik}^{6} x_{i}^{3} x_{k} + 6 \beta_{Y ik}^{4} x_{i}^{2} x_{k}^{2} + 4 \beta_{Y ik}^{2} x_{i} x_{k}^{3} + x_{k}^{4}}
535 * \f]
536 */
537 CoolPropDbl d3fYikdxi3__constxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t k, const STLMatrix& beta) const;
538};
539
546{
547 private:
548 ConstantReducingFunction(const ConstantReducingFunction& that); // No copying
549 double T_c, rhomolar_c;
550
551 public:
552 ConstantReducingFunction(const double T_c, const double rhomolar_c) : T_c(T_c), rhomolar_c(rhomolar_c) {};
553
554 ReducingFunction* copy() override {
555 return new ConstantReducingFunction(T_c, rhomolar_c);
556 };
557
558 void set_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter, double value) override {
559 return;
560 }
561 double get_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string& parameter) const override {
562 return _HUGE;
563 }
564
566 CoolPropDbl Tr(const std::vector<CoolPropDbl>& x) const override {
567 return T_c;
568 };
570 CoolPropDbl dTrdxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
571 return 0;
572 };
574 CoolPropDbl d2Trdxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
575 return 0;
576 };
578 CoolPropDbl d2Trdxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override {
579 return 0;
580 };
582 CoolPropDbl d3Trdxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
583 x_N_dependency_flag xN_flag) const override {
584 return 0;
585 };
586
588 CoolPropDbl rhormolar(const std::vector<CoolPropDbl>& x) const override {
589 return rhomolar_c;
590 };
592 CoolPropDbl drhormolardxi__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
593 return 0;
594 };
596 CoolPropDbl d2rhormolardxi2__constxj(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
597 return 0;
598 };
600 CoolPropDbl d2rhormolardxidxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override {
601 return 0;
602 };
604 CoolPropDbl d3rhormolardxidxjdxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
605 x_N_dependency_flag xN_flag) const override {
606 return 0;
607 };
608
609 CoolPropDbl dTr_dgammaT(const std::vector<CoolPropDbl>& x) const override {
610 return 0;
611 }
612 CoolPropDbl dTr_dbetaT(const std::vector<CoolPropDbl>& x) const override {
613 return 0;
614 }
615 CoolPropDbl drhormolar_dgammaV(const std::vector<CoolPropDbl>& x) const override {
616 return 0;
617 }
618 CoolPropDbl drhormolar_dbetaV(const std::vector<CoolPropDbl>& x) const override {
619 return 0;
620 }
621
622 CoolPropDbl d2Tr_dxidgammaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
623 return 0;
624 }
625 CoolPropDbl d2Tr_dxidbetaT(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
626 return 0;
627 }
628 CoolPropDbl d2rhormolar_dxidgammaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
629 return 0;
630 }
631 CoolPropDbl d2rhormolar_dxidbetaV(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
632 return 0;
633 }
634
635 //virtual CoolPropDbl d_ndTrdni_dxj__constxi(const std::vector<CoolPropDbl> &x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag){ return 0; };
636 //virtual CoolPropDbl d2_ndTrdni_dxj_dxk__constxi(const std::vector<CoolPropDbl> &x, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag){ return 0; };
637 //virtual CoolPropDbl d_ndrhorbardni_dxj__constxi(const std::vector<CoolPropDbl> &x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag){ return 0; };
638 //virtual CoolPropDbl d2_ndrhorbardni_dxj_dxk__constxi(const std::vector<CoolPropDbl> &x, std::size_t i, std::size_t j, std::size_t k, x_N_dependency_flag xN_flag){ return 0; };
639 //virtual CoolPropDbl ndrhorbardni__constnj(const std::vector<CoolPropDbl> &x, std::size_t i, x_N_dependency_flag xN_flag){ return 0; };
640 //virtual CoolPropDbl ndTrdni__constnj(const std::vector<CoolPropDbl> &x, std::size_t i, x_N_dependency_flag xN_flag){ return 0; };
641
643 CoolPropDbl PSI_rho(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
644 return 1;
645 };
646 CoolPropDbl d_PSI_rho_dxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override {
647 return 0;
648 };
649 CoolPropDbl d2_PSI_rho_dxj_dxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
650 x_N_dependency_flag xN_flag) const override {
651 return 0;
652 };
653 CoolPropDbl PSI_T(const std::vector<CoolPropDbl>& x, std::size_t i, x_N_dependency_flag xN_flag) const override {
654 return 0;
655 };
656 CoolPropDbl d_PSI_T_dxj(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, x_N_dependency_flag xN_flag) const override {
657 return 0;
658 };
659 CoolPropDbl d2_PSI_T_dxj_dxk(const std::vector<CoolPropDbl>& x, std::size_t i, std::size_t j, std::size_t k,
660 x_N_dependency_flag xN_flag) const override {
661 return 0;
662 };
663};
664
689{
690 protected:
692
693 public:
695 static void convert_to_GERG(std::vector<CoolPropFluid>& pFluids, std::size_t i, std::size_t j, const Dictionary& d, CoolPropDbl& beta_T,
696 CoolPropDbl& beta_v, CoolPropDbl& gamma_T, CoolPropDbl& gamma_v) {
697 CoolPropDbl xi_ij = d.get_number("xi");
698 CoolPropDbl zeta_ij = d.get_number("zeta");
699 beta_T = 1;
700 beta_v = 1;
701 gamma_T = (pFluids[i].EOS().reduce.T + pFluids[j].EOS().reduce.T + xi_ij) / (2 * sqrt(pFluids[i].EOS().reduce.T * pFluids[j].EOS().reduce.T));
702 CoolPropDbl v_i = 1 / pFluids[i].EOS().reduce.rhomolar;
703 CoolPropDbl v_j = 1 / pFluids[j].EOS().reduce.rhomolar;
704 CoolPropDbl one_third = 1.0 / 3.0;
705 gamma_v = (v_i + v_j + zeta_ij) / (0.25 * pow(pow(v_i, one_third) + pow(v_j, one_third), 3));
706 };
707};
708
709} /* namespace CoolProp */
710#endif