Source code for openpnm.models.phase.vapor_pressure._funcs

import numpy as np
from openpnm.models.phase import _phasedocs


__all__ = [
    "water_correlation",
    "liquid_pure_antoine",
    "liquid_pure_lk",
]


[docs] @_phasedocs def water_correlation(phase, T='pore.temperature', salinity='pore.salinity'): r""" Calculates vapor pressure of pure water or seawater given by [1] based on Raoult's law. The pure water vapor pressure is given by [2] Parameters ---------- %(phase)s %(T)s %(salinity)s Returns ------- Notes ----- T must be in K, and S in g of salt per kg of phase, or ppt (parts per thousand) VALIDITY: 273 < T < 473 K; 0 < S < 240 g/kg; ACCURACY: 0.5 percent References ---------- [1] Sharqawy M. H., Lienhard J. H., and Zubair, S. M., Desalination and Water Treatment, 2010. [2] ASHRAE handbook: Fundamentals, ASHRAE; 2005. """ T = phase[T] if salinity in phase.keys(): S = phase[salinity] else: S = 0 a1 = -5.8002206E+03 a2 = 1.3914993E+00 a3 = -4.8640239E-02 a4 = 4.1764768E-05 a5 = -1.4452093E-08 a6 = 6.5459673E+00 Pv_w = np.exp((a1/T) + a2 + a3*T + a4*T**2 + a5*T**3 + a6*np.log(T)) Pv_sw = Pv_w/(1+0.57357*(S/(1000-S))) value = Pv_sw return value
[docs] @_phasedocs def liquid_pure_lk( phase, T='pore.temperature', Tc='param.critical_temperature', Pc='param.critical_pressure', omega='param.acentric_factor', ): r""" Calculate the vapor pressure of a pure liquid using the correlation in [1] Parameters ---------- %(phase)s %(T)s %(Tc)s %(Pc)s %(omega)s Returns ------- References ---------- [1] Lee and Kesler """ T = phase[T] Tc = phase[Tc] Tr = T/Tc Pc = phase[Pc] omega = phase[omega] f0 = 5.92714 - 6.09648/Tr - 1.28862*np.log(Tr) + 0.169347*(Tr**6) f1 = 15.2518 - 15.6875/Tr - 13.4721*np.log(Tr) + 0.43577*(Tr**6) Pr = np.exp(f0 + omega*f1) Pvap = Pr*Pc return Pvap
[docs] @_phasedocs def liquid_pure_antoine( phase, T='pore.temperature', ): r""" Calculates the vapor pressure of a pure liquid using Antoine's equation Parameters ---------- %(phase)s %(T)s %(Tc)s Returns ------- References ---------- [1] RPP Notes ----- Coefficients are looked up from the ``chemicals`` package. If values for "extended" version are not found then the normal 3-coefficient values are sought. """ # either antoine or extended antoine using constants from RPP CAS = phase.params['CAS'] T = phase[T] from chemicals.vapor_pressure import Psat_data_AntoinePoling coeffs = Psat_data_AntoinePoling.loc[CAS] _, A, B, C, Tmin, Tmax = coeffs Pvap = 10**(A - B/(T + C)) return Pvap