Skip to content

Benchmark: methanol + water VLE with esper2023 + rehner2023_binary against measured data #406

Open

Description

@ArturSchweidtmann

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions