Source code for openpnm.models.phase.surface_tension._funcs
import numpy as np
from openpnm.models.phase import _phasedocs
__all__ = [
"water_correlation",
"liquid_pure_bb",
"liquid_mixture_wsd",
]
[docs]
@_phasedocs
def water_correlation(
phase,
T='pore.temperature',
salinity='pore.salinity'
):
r"""
Calculates surface tension of pure water or seawater at atmospheric
pressure
This model uses Eq. (28) given by Sharqawy et al. [1]. Values at
temperature higher than the normal boiling temperature are calculated at
the saturation pressure.
Parameters
----------
%(phase)s
%(T)s
%(salinity)s
Returns
-------
value : ndarray
A numpy ndarray containing surface tension of seawater in [N/m]
Notes
-----
T must be in K, and S in g of salt per kg of phase, or ppt (parts per
thousand). The correlation is valid for 273 < T < 313 K and
0 < S < 40 g/kg within 0.2 percent accuracy.
References
----------
[1] Sharqawy M. H., Lienhard J. H., and Zubair, S. M., Desalination and
Water Treatment, 2010.
"""
T = phase[T]
if salinity in phase.keys():
S = phase[salinity]
else:
S = 0
sigma_w = 0.2358*((1-(T/647.096))**1.256)*(1-0.625*(1-(T/647.096)))
a1 = 2.2637334337E-04
a2 = 9.4579521377E-03
a3 = 3.3104954843E-02
TC = T-273.15
sigma_sw = sigma_w*(1+(a1*TC+a2)*np.log(1+a3*S))
value = sigma_sw
return value
[docs]
@_phasedocs
def liquid_pure_bb(
phase,
T='pore.temperature',
Tc='param.critical_temperature',
Tb='param.boiling_temperature',
Pc='param.critical_pressure',
):
r"""
Computes the surface tension of a pure liquid in its own vapor using the
correlation in [1]
Parameters
----------
%(phase)s
%(T)s
%(Tc)s
%(Tb)s
%(Pc)s
Returns
-------
value : ndarray
A numpy ndarray containing surface tension values scaled to the
temperature [N/m]
References
----------
[1] Brock and Bird
"""
T = phase[T]
Tc = phase[Tc]
Tr = T/Tc
Tb = phase[Tb]
Tbr = Tb/Tc
Pc = phase[Pc]/100000
Q = 0.1196*(1 + Tbr*np.log(Pc/1.01325)/(1-Tbr))-0.279
sigma = 1e-3 * Q * (Pc**(2/3)) * (Tc**(1/3)) * ((1-Tr)**(11/9))
return sigma
[docs]
@_phasedocs
def liquid_mixture_wsd(
phase,
sigmas='pore.surface_tension.*',
rhos='pore.density.*',
MWs='param.molecular_weight.*',
):
r"""
Computes the surface tension of a liqiud mixture with its own vapor using
the correlation in [1]
Parameters
----------
%(phase)s
%(rhos)s
%(MWs)s
%(sigmas)s
Returns
-------
sigma : ndarray
A numpy ndarray containing surface tension values
References
----------
[1] Winterfeld, Scriven, and Davis
"""
sigmas = phase.get_comp_vals(sigmas)
xs = phase['pore.mole_fraction']
rhos = phase.get_comp_vals(rhos) # kg/m3
MWs = phase.get_comp_vals(MWs) # g/mol
rhoms = {k: rhos[k]/(MWs[k]/1000) for k in xs.keys()} # mol/m3
rhom_mix = np.vstack([rhoms[k]*xs[k] for k in xs.keys()]).sum(axis=0)
sigma = 0.0
for i, ki in enumerate(xs.keys()):
for j, kj in enumerate(xs.keys()):
num = xs[ki]*xs[kj]*(rhom_mix**2)*(sigmas[ki]*sigmas[kj])**0.5
denom = rhoms[ki]*rhoms[kj]
sigma += num/denom
return sigma