36 double gE_R_RT(
double tau,
const std::vector<double>& x, std::size_t itau) {
38 for (std::size_t i = 0; i < x.size(); ++i) {
39 summer += x[i] * unifaq.
ln_gamma_R(tau, i, itau);
43 double d_gE_R_RT_dxi(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i,
bool xN_independent) {
50 double gE_R(
double tau,
const std::vector<double>& x, std::size_t itau) {
79 double d_gE_R_dxi(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i,
bool xN_independent) {
113 double am_term(
double tau,
const std::vector<double>& x, std::size_t itau)
override {
116 double sum_xi_aii_bii(
double tau,
const std::vector<double>& x, std::size_t itau) {
118 for (
int i = 0; i <
N; ++i) {
123 double d_sum_xi_aii_bii_dxi(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i,
bool xN_independent) {
124 if (xN_independent) {
130 double d_am_term_dxi(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i,
bool xN_independent)
override {
134 double d2_am_term_dxidxj(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i, std::size_t j,
bool xN_independent)
override {
141 double d3_am_term_dxidxjdxk(
double tau,
const std::vector<double>& x, std::size_t itau, std::size_t i, std::size_t j, std::size_t
k,
142 bool xN_independent)
override {
150 double bm_term(
const std::vector<double>& x)
override {
152 for (
int i = 0; i <
N; ++i) {
153 for (
int j = 0; j <
N; ++j) {
154 summerbm += x[i] * x[j] *
bij_term(i, j);
160 return pow((pow(
b0_ii(i), 0.75) + pow(
b0_ii(j), 0.75)) / 2.0, 4.0 / 3.0);
162 double d_bm_term_dxi(
const std::vector<double>& x, std::size_t i,
bool xN_independent)
override {
164 if (xN_independent) {
165 for (
int j =
N - 1; j >= 0; --j) {
170 for (
int k =
N - 2;
k >= 0; --
k) {
176 double d2_bm_term_dxidxj(
const std::vector<double>& x, std::size_t i, std::size_t j,
bool xN_independent)
override {
177 if (xN_independent) {
183 double d3_bm_term_dxidxjdxk(
const std::vector<double>& x, std::size_t i, std::size_t j, std::size_t
k,
bool xN_independent)
override {
187 void set_interaction_parameter(
const std::size_t mgi1,
const std::size_t mgi2,
const std::string& parameter,
const double value)
override {
192 void set_Q_k(
const size_t sgi,
const double value)
override {
197 double get_Q_k(
const size_t sgi)
const override {
206 double v = 1 / rhomolar;
212 std::vector<double> ln_phi;
213 double bracket = log((v + c + (1 + sqrt(2.0)) * b) / (v + c + (1 - sqrt(2.0)) * b));
214 for (std::size_t i = 0; i < z.size(); ++i) {
216 for (std::size_t j = 0; j < z.size(); ++j) {
221 double _ln_phi = (2 / b * summer1 - 1) * (p * (v + c) / (R *
T) - 1) - p * c_i / (R *
T) - log(p * (v + c - b) / (R *
T))
222 - 1.0 / (2.0 * sqrt(2.0) * R *
T) * (a_i_over_b_i + R *
T * unifaq.
ln_gamma_R(tau, i, 0) / -0.53087) * bracket;
223 ln_phi.push_back(_ln_phi);