Description
For your information, not a bug report: we evaluated feos 0.10.5 as a property backend for an open-source process design toolkit and benchmarked the recommended parameter combination (esper2023.json + rehner2023_binary.json) on methanol + water against measured VLE data. The results may be useful as a data point.
Summary
- Pure components are fine: vapour pressures of methanol and water at 314–394 K agree with the reference equations of state (CoolProp) within about 1 %, and liquid densities of methanol within 0.5 % at 260–450 K. The liquid density is a clear improvement over the cubic/COSTALD route we use today.
- The mixture is not as good. Bubble pressures (Jödecke et al. 2005) deviate by +8 to +19 % for dilute methanol at 314–316 K and are systematically low by 2–8 % at 353–397 K. Isobaric bubble temperatures at 95.3 kPa (Soujanya et al. 2010) are within 1 K.
- For reference, Peng–Robinson with a VLE-fitted k_ij (ChemSep, k_ij = −0.0778) gives −5 to +12 % at 314–316 K and −3 to +2 % at 353–397 K on the same points.
Since pure-component vapour pressures are accurate, the deviation seems to come from the binary interaction (k_ij = −0.0159 in rehner2023_binary.json). Is another parameter set (e.g. rehner2020.json for water and alcohols) recommended for aqueous methanol, or is this the expected accuracy of the predicted/fitted k_ij for this pair?
Reproducer (run from the root of a v0.10.5 checkout)
"""Methanol + water VLE with esper2023 + rehner2023_binary (feos 0.10.5) against measured data.
Run from the root of a feos checkout (v0.10.5): python repro_vle.py
"""
import feos
import si_units as si
params = feos.Parameters.from_json(
["methanol", "water"],
"parameters/pcsaft/esper2023.json",
"parameters/pcsaft/rehner2023_binary.json",
)
eos = feos.EquationOfState.pcsaft(params)
# Jödecke, Pérez-Salado Kamps, Maurer, J. Chem. Eng. Data 50 (2005) 138, salt-free data
# (NIST ThermoML 10.1021/je049783k, data set 0): T / K, x_methanol, p_bubble / kPa
JOEDECKE = [
(314.1, 0.2160, 18.00), (314.6, 0.4660, 25.00), (315.8, 0.0762, 13.00),
(316.4, 0.0368, 10.00), (352.8, 0.2470, 97.72), (352.9, 0.4930, 126.40),
(353.1, 0.0317, 58.54), (353.2, 0.0780, 70.66), (393.9, 0.0357, 250.20),
(394.3, 0.4920, 485.60), (396.4, 0.0960, 313.20), (396.8, 0.1910, 390.60),
]
print("bubble pressure, Jödecke et al. 2005")
print(" T/K x_MeOH p_exp/kPa p_feos/kPa dev")
for t, x, p in JOEDECKE:
vle = feos.PhaseEquilibrium.bubble_point(eos, t * si.KELVIN, [x, 1 - x])
pc = vle.liquid.pressure() / si.KILO / si.PASCAL
print(f"{t:7.1f} {x:8.4f} {p:10.2f} {pc:11.2f} {pc / p - 1:+7.2%}")
# Soujanya, Satyavathi, Vittal Prasad, J. Chem. Thermodyn. 42 (2010) 621, 95.3 kPa
# (NIST ThermoML 10.1016/j.jct.2009.11.020, data set 6): x_methanol, T_bubble / K
SOUJANYA = [(0.1, 361.2), (0.2, 354.85), (0.3, 350.4), (0.4, 347.1), (0.5, 344.55),
(0.6, 342.45), (0.7, 340.65), (0.8, 339.05), (0.9, 337.55)]
print("\nbubble temperature at 95.3 kPa, Soujanya et al. 2010")
print(" x_MeOH T_exp/K T_feos/K dev/K")
for x, t in SOUJANYA:
vle = feos.PhaseEquilibrium.bubble_point(
eos, 95.3 * si.KILO * si.PASCAL, [x, 1 - x], tp_init=t * si.KELVIN
)
tc = vle.liquid.temperature / si.KELVIN
print(f"{x:7.1f} {t:8.2f} {tc:9.2f} {tc - t:+7.2f}")
# the pure components alone, for comparison (vapour pressures at the Jödecke temperatures)
print("\npure-component vapour pressure / kPa (feos)")
for name in ("methanol", "water"):
pure = feos.EquationOfState.pcsaft(
feos.Parameters.from_json([name], "parameters/pcsaft/esper2023.json")
)
values = [
feos.PhaseEquilibrium.pure(pure, t * si.KELVIN).liquid.pressure() / si.KILO / si.PASCAL
for t in (314.1, 352.8, 393.9)
]
print(f" {name}: " + ", ".join(f"{v:.2f}" for v in values) + " at 314.1, 352.8, 393.9 K")Output (feos 0.10.5, si-units 0.11.5, Python 3.15, macOS arm64)
bubble pressure, Jödecke et al. 2005
T/K x_MeOH p_exp/kPa p_feos/kPa dev
314.1 0.2160 18.00 18.52 +2.90%
314.6 0.4660 25.00 25.32 +1.30%
315.8 0.0762 13.00 14.07 +8.24%
316.4 0.0368 10.00 11.86 +18.58%
352.8 0.2470 97.72 95.28 -2.50%
352.9 0.4930 126.40 124.36 -1.62%
353.1 0.0317 58.54 56.34 -3.76%
353.2 0.0780 70.66 68.01 -3.76%
393.9 0.0357 250.20 233.10 -6.83%
394.3 0.4920 485.60 466.14 -4.01%
396.4 0.0960 313.20 297.81 -4.92%
396.8 0.1910 390.60 360.32 -7.75%
bubble temperature at 95.3 kPa, Soujanya et al. 2010
x_MeOH T_exp/K T_feos/K dev/K
0.1 361.20 360.67 -0.53
0.2 354.85 354.79 -0.06
0.3 350.40 350.91 +0.51
0.4 347.10 347.97 +0.87
0.5 344.55 345.53 +0.98
0.6 342.45 343.38 +0.93
0.7 340.65 341.43 +0.78
0.8 339.05 339.62 +0.57
0.9 337.55 337.91 +0.36
pure-component vapour pressure / kPa (feos)
methanol: 36.76, 177.82, 652.69 at 314.1, 352.8, 393.9 K
water: 7.75, 46.27, 202.15 at 314.1, 352.8, 393.9 K
Reference values for the pure vapour pressures (CoolProp 8.0.0, kPa): methanol 37.12, 178.87, 654.40; water 7.77, 46.75, 203.44 at 314.1, 352.8 and 393.9 K.
Data sources (both read from the NIST TRC ThermoML files)
- M. Jödecke, Á. Pérez-Salado Kamps, G. Maurer, J. Chem. Eng. Data 50 (2005) 138–141, doi:10.1021/je049783k, ThermoML data set 0 (salt-free).
- J. Soujanya, B. Satyavathi, T. E. Vittal Prasad, J. Chem. Thermodyn. 42 (2010) 621–624, doi:10.1016/j.jct.2009.11.020, ThermoML data set 6.
Thank you for feos and for publishing the parameter sets.
🤖 Generated with Claude Code
Activity