1#ifndef EXCESSHE_FUNCTIONS_H
2#define EXCESSHE_FUNCTIONS_H
13using STLMatrix = std::vector<std::vector<CoolPropDbl>>;
33 virtual void update(
double tau,
double delta) {
37 double get(std::size_t itau, std::size_t idelta) {
43 phi.
all(tau, delta, _derivs);
50 return derivs.dalphar_ddelta;
53 return derivs.dalphar_dtau;
57 return derivs.d2alphar_ddelta2;
60 return derivs.d2alphar_ddelta_dtau;
63 return derivs.d2alphar_dtau2;
67 return derivs.d3alphar_dtau3;
70 return derivs.d3alphar_ddelta_dtau2;
73 return derivs.d3alphar_ddelta2_dtau;
76 return derivs.d3alphar_ddelta3;
80 return derivs.d4alphar_dtau4;
83 return derivs.d4alphar_ddelta_dtau3;
86 return derivs.d4alphar_ddelta2_dtau2;
89 return derivs.d4alphar_ddelta3_dtau;
92 return derivs.d4alphar_ddelta4;
109 const std::vector<double>& eta,
const std::vector<double>& epsilon,
const std::vector<double>& beta,
110 const std::vector<double>& gamma, std::size_t Npower) {
113 std::vector<CoolPropDbl> _n(n.begin(), n.begin() + Npower);
114 std::vector<CoolPropDbl> _d(d.begin(), d.begin() + Npower);
115 std::vector<CoolPropDbl> _t(t.begin(), t.begin() + Npower);
116 std::vector<CoolPropDbl> _l(Npower, 0.0);
119 if (n.size() == Npower) {
121 std::vector<CoolPropDbl> _n(n.begin() + Npower, n.end());
122 std::vector<CoolPropDbl> _d(d.begin() + Npower, d.end());
123 std::vector<CoolPropDbl> _t(t.begin() + Npower, t.end());
124 std::vector<CoolPropDbl> _eta(eta.begin() + Npower, eta.end());
125 std::vector<CoolPropDbl> _epsilon(epsilon.begin() + Npower, epsilon.end());
126 std::vector<CoolPropDbl> _beta(beta.begin() + Npower, beta.end());
127 std::vector<CoolPropDbl> _gamma(gamma.begin() + Npower, gamma.end());
148 const std::vector<double>& l,
const std::vector<double>& eta,
const std::vector<double>& epsilon,
149 const std::vector<double>& beta,
const std::vector<double>& gamma, std::size_t Npower) {
152 std::vector<CoolPropDbl> _n(n.begin(), n.begin() + Npower);
153 std::vector<CoolPropDbl> _d(d.begin(), d.begin() + Npower);
154 std::vector<CoolPropDbl> _t(t.begin(), t.begin() + Npower);
155 std::vector<CoolPropDbl> _l(l.begin(), l.begin() + Npower);
158 if (n.size() == Npower) {
160 std::vector<CoolPropDbl> _n(n.begin() + Npower, n.end());
161 std::vector<CoolPropDbl> _d(d.begin() + Npower, d.end());
162 std::vector<CoolPropDbl> _t(t.begin() + Npower, t.end());
163 std::vector<CoolPropDbl> _eta(eta.begin() + Npower, eta.end());
164 std::vector<CoolPropDbl> _epsilon(epsilon.begin() + Npower, epsilon.end());
165 std::vector<CoolPropDbl> _beta(beta.begin() + Npower, beta.end());
166 std::vector<CoolPropDbl> _gamma(gamma.begin() + Npower, gamma.end());
187 const std::vector<double>& l) {
188 std::vector<CoolPropDbl> _n(n.begin(), n.begin() + n.size());
189 std::vector<CoolPropDbl> _d(d.begin(), d.begin() + d.size());
190 std::vector<CoolPropDbl> _t(t.begin(), t.begin() + t.size());
191 std::vector<CoolPropDbl> _l(l.begin(), l.begin() + l.size());
218 for (std::size_t i = 0; i <
N; ++i) {
219 for (std::size_t j = 0; j <
N; ++j) {
232 F.resize(
N, std::vector<CoolPropDbl>(
N, 0));
234 for (std::size_t i = 0; i <
N; ++i) {
240 for (std::size_t i = 0; i <
N; i++) {
241 for (std::size_t j = i + 1; j <
N; j++) {
244 for (std::size_t j = 0; j < i; j++) {
252 bool cache_values =
false) {
260 if (cache_values ==
true) {
264 derivs.alphar =
alphar(mole_fractions);
293 for (std::size_t i = 0; i <
N - 1; i++) {
294 for (std::size_t j = i + 1; j <
N; j++) {
297 summer = summer + term * x[i] * x[j] *
F[i][j];
308 for (std::size_t i = 0; i <
N - 1; i++) {
309 for (std::size_t j = i + 1; j <
N; j++) {
316 double alphar(
const std::vector<CoolPropDbl>& x) {
369 for (std::size_t k = 0; k <
N; k++) {
381 dar_dxi += (1 - 2 * x[i]) * FiNariN;
382 for (std::size_t k = 0; k <
N - 1; ++k) {
383 if (i == k)
continue;
386 dar_dxi += x[k] * (Fikarik - FiNariN - FkNarkN);
408 std::size_t
N = x.size();
409 if (i ==
N - 1 || j ==
N - 1) {
418 return Fijarij - FiNariN - FjNarjN;
438 std::size_t
N = x.size();
439 if (i ==
N - 1 || j ==
N - 1) {
448 return Fijarij - FiNariN - FjNarjN;
499 CoolPropDbl d3ar_dxi_dDelta_dTau = (1 - 2 * x[i]) * FiNariN;
500 for (std::size_t k = 0; k <
N - 1; ++k) {
501 if (i == k)
continue;
504 d3ar_dxi_dDelta_dTau += x[k] * (Fikarik - FiNariN - FkNarkN);
506 return d3ar_dxi_dDelta_dTau;
537 for (std::size_t k = 0; k <
N; k++) {
548 CoolPropDbl d2ar_dxi_dTau = (1 - 2 * x[i]) * FiNariN;
549 for (std::size_t k = 0; k <
N - 1; ++k) {
550 if (i == k)
continue;
553 d2ar_dxi_dTau += x[k] * (Fikarik - FiNariN - FkNarkN);
555 return d2ar_dxi_dTau;
567 for (std::size_t k = 0; k <
N; k++) {
579 d2ar_dxi_dDelta += (1 - 2 * x[i]) * FiNariN;
580 for (std::size_t k = 0; k <
N - 1; ++k) {
581 if (i == k)
continue;
584 d2ar_dxi_dDelta += x[k] * (Fikarik - FiNariN - FkNarkN);
586 return d2ar_dxi_dDelta;
598 for (std::size_t k = 0; k <
N; k++) {
609 CoolPropDbl d3ar_dxi_dDelta2 = (1 - 2 * x[i]) * FiNariN;
610 for (std::size_t k = 0; k <
N - 1; ++k) {
611 if (i == k)
continue;
614 d3ar_dxi_dDelta2 += x[k] * (Fikarik - FiNariN - FkNarkN);
616 return d3ar_dxi_dDelta2;
628 for (std::size_t k = 0; k <
N; k++) {
645 for (std::size_t k = 0; k <
N; k++) {
656 CoolPropDbl d3ar_dxi_dTau2 = (1 - 2 * x[i]) * FiNariN;
657 for (std::size_t k = 0; k <
N - 1; ++k) {
658 if (i == k)
continue;
661 d3ar_dxi_dTau2 += x[k] * (Fikarik - FiNariN - FkNarkN);
663 return d3ar_dxi_dTau2;
675 for (std::size_t k = 0; k <
N; k++) {
692 for (std::size_t k = 0; k <
N; k++) {
709 for (std::size_t k = 0; k <
N; k++) {
726 for (std::size_t k = 0; k <
N; k++) {