8namespace SaturationSolvers {
56 std::vector<CoolPropDbl>
x,
y,
K;
72 return log(pci / p) + 5.373 * (1 + omegai) * (1 - Tci /
T);
111#if !defined(NO_FMTLIB) && FMT_VERSION >= 90000
113 return fmt::underlying(option);
155 const std::vector<CoolPropDbl>& z, std::vector<CoolPropDbl>& K, mixture_VLE_IO& options);
163void x_and_y_from_K(
CoolPropDbl beta,
const std::vector<CoolPropDbl>& K,
const std::vector<CoolPropDbl>& z, std::vector<CoolPropDbl>& x,
164 std::vector<CoolPropDbl>& y);
190 bool require_bracket =
true);
202 const std::vector<CoolPropDbl>&
z;
203 std::vector<CoolPropDbl>&
K;
207 const std::vector<CoolPropDbl>&
z, std::vector<CoolPropDbl>&
K)
215 double call(
double input_value)
override {
222 for (
unsigned int i = 0; i <
z.size(); i++) {
223 K[i] = exp(Wilson_lnK_factor(
HEOS,
T,
p, i));
224 summer +=
z[i] * (
K[i] - 1) / (1 -
beta +
beta *
K[i]);
230 const std::vector<CoolPropDbl>& z) {
231 double ptriple = 0, pcrit = 0, Ttriple = 0, Tcrit = 0;
237 for (
unsigned int i = 0; i < z.size(); i++) {
249 return exp(log(pcrit / ptriple) / (Tcrit - Ttriple) * (input_value - Ttriple) + log(ptriple));
251 return 1 / (1 / Tcrit - (1 / Ttriple - 1 / Tcrit) / log(pcrit / ptriple) * log(input_value / pcrit));
284 const std::vector<CoolPropDbl>& z,
double guess) {
289 if (input_type ==
imposed_T && (std::abs(beta) < 1e-12 || std::abs(beta - 1) < 1e-12)) {
291 bool beta0 = std::abs(beta) < 1e-12;
292 for (
int i = 0; i < static_cast<int>(z.size()); ++i) {
297 out += z[i] * pci * exp(5.373 * (1 + omegai) * (1 - Tci / input_value));
299 out += z[i] / (pci * exp(5.373 * (1 + omegai) * (1 - Tci / input_value)));
305 std::vector<CoolPropDbl>& K = HEOS.
get_K();
306 for (
int i = 0; i < static_cast<int>(z.size()); ++i) {
310 K[i] = pci / out * exp(5.373 * (1 + omegai) * (1 - Tci / input_value));
320 out =
Brent(Resid, 1.0, 1e9, 1e-10, 1e-10, 100);
322 out =
Brent(Resid, 50, 10000, 1e-10, 1e-10, 100);
324 }
catch (
const std::exception&) {
329 out =
Secant(Resid, guess, 0.001, 1e-10, 100);
332 throw ValueError(
"saturation_p_Wilson failed to get good output value");
352 CoolPropDbl beta,
omega,
rhomolar_liq,
rhomolar_vap,
pL,
pV,
p,
T,
hmolar_liq,
hmolar_vap,
smolar_liq,
smolar_vap;
354 std::vector<CoolPropDbl>
x,
y,
z;
417 std::vector<CoolPropDbl>
K,
x,
y,
z;
479 CoolPropDbl omega,
rhomolar_liq,
rhomolar_vap,
pL,
pV,
p,
T,
hmolar_liq,
hmolar_vap,
smolar_liq,
smolar_vap;
481 std::vector<CoolPropDbl>
x,
y;
539 std::vector<CoolPropDbl>
K,
x,
y;
593 std::vector<CoolPropDbl>
x,
658namespace StabilityRoutines {
671 const std::vector<double>&
z;
685 z(
HEOS.get_mole_fractions_doubleref()),
697 use_michelsen(
get_config_int(MIXTURE_STABILITY_ALGORITHM) != 0) {};
747 use_michelsen = value;
753 if (!use_michelsen) {
769 void get_liq(std::vector<double>&
x,
double& rhomolar) {
774 void get_vap(std::vector<double>&
y,
double& rhomolar) {