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

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


__all__ = [
    'water_correlation',
    'gas_pure_gismr',
    'liquid_pure_gismr',
    'liquid_pure_sr',
    'gas_mixture_whz',
    'liquid_mixture_DIPPR9H',
]


[docs] @_phasedocs def water_correlation( phase, T="pore.temperature", salinity="pore.salinity", ): r""" Calculates thermal conductivity of pure water or seawater at atmospheric pressure using the correlation given [1]. Values at temperature higher the normal boiling temperature are calculated at the saturation pressure. Parameters ---------- %(phase)s %(T)s %(salinity)s Returns ------- value : ndarray A numpy ndarray containing thermal conductivity of water/seawater in [W/m.K] 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 < 453 K and 0 < S < 160 g/kg within 3 percent accuracy. References ---------- [1] D. T. Jamieson, and J. S. Tudhope, Desalination, 8, 393-401, 1970. """ T = phase[T] if salinity in phase.keys(): S = phase[salinity] else: S = 0 T68 = 1.00024 * T # convert from T_90 to T_68 SP = S / 1.00472 # convert from S to S_P k_sw = 0.001 * ( 10 ** ( np.log10(240 + 0.0002 * SP) + 0.434 * (2.3 - (343.5 + 0.037 * SP) / T68) * ((1 - T68 / (647.3 + 0.03 * SP))) ** (1 / 3) ) ) value = k_sw return value
[docs] @_phasedocs def gas_pure_gismr( phase, T='pore.temperature', MW='param.molecular_weight', Tb='param.boiling_temperature', Pc='param.critical_pressure', omega='param.acentric_factor', ): r""" Calculate the thermal conductivty of a pure gas using the correlation in [1] Parameters ---------- %(phase)s %(T)s %(MW)s %(Tb)s %(Pc)s %(omega)s Returns ------- References ---------- [1] gharagheizi method: doi:10.1002/aic.13938 """ T = phase[T] MW = phase[MW] Tb = phase[Tb] # The following correction suggested by chemicals package author Pc = phase[Pc]/10000 omega = phase[omega] B = (T + (2.0*omega + 2.0*T - 2.0*T*(2.0*omega + 3.2825)/Tb + 3.2825) / (2.0*omega + T - T*(2.0*omega + 3.2825)/Tb + 3.2825) - T*(2.0*omega + 3.2825)/Tb) A = (2*omega + T - (2*omega + 3.2825)*T/Tb + 3.2825)/(0.1*MW*Pc*T) \ * (3.9752*omega + 0.1*Pc + 1.9876*B + 6.5243)**2 k = 7.9505e-4 + 3.989e-5*T - 5.419e-5*MW + 3.989e-5*A return k
[docs] @_phasedocs def liquid_pure_gismr( phase, T='pore.temperature', MW='param.molecular_weight', Tb='param.boiling_temperature', Pc='param.critical_pressure', omega='param.acentric_factor', ): r""" Calculates the thermal conductivity of a pure liquid using the correlation in [1] Parameters ---------- %(phase)s %(T)s %(MW)s %(Tb)s %(Pc)s %(omega)s Returns ------- References ---------- [1] gharagheizi method: doi:10.1002/aic.13938 """ T = phase[T] MW = phase[MW] Tb = phase[Tb] Pc = phase[Pc]/100000 omega = phase[omega] B = 16.0407*MW + 2.0*Tb - 27.9074 A = 3.8588*(MW**8)*(1.0045*B + 6.5152*MW - 8.9756) k = (1e-4)*(10*omega + 2*Pc - 2*T + 4 + 1.908*(Tb + 1.009*(B**2)/(MW**2)) + 3.9287*(MW**4)/(B**4) + A/(B**8)) return k
[docs] @_phasedocs def liquid_pure_sr( phase, T="pore.temperature", Tc='param.critical_temperature', MW='param.molecular_weight', Tb='param.boiling_temperature', ): r""" Calculates the thermal conductivity of a pure liquid using the correlation in [1] Parameters ---------- %(phase)s %(T)s %(Tc)s %(MW)s %(Tb)s Returns ------- value : ndarray A numpy ndarray containing thermal conductivity values in [W/m.K] References ---------- [1] Sato et al """ T = phase[T] Tc = phase[Tc] MW = phase[MW] Tbr = phase[Tb]/Tc Tr = T / Tc value = ((1.1053 / ((MW) ** 0.5)) * (3 + 20 * (1 - Tr) ** (2 / 3)) / (3 + 20 * (1 - Tbr) ** (2 / 3))) return value
@_phasedocs def liquid_mixture_DIPPR9I( phase, rhos='pore.density.*', ks='pore.thermal_conductivity.*', MWs='param.molecular_weight.*', ): r""" Calculates the thermal conductivity of a liquid mixture using the correlation in [1] Parameters ---------- %(phase)s %(rhos)s %(ks)s %(MWs)s Returns ------- References ---------- [1] DIPPR9I """ raise NotImplementedError("This function is not ready yet") from chemicals import rho_to_Vm xs = phase['pore.mole_fraction'] kLs = phase.get_comp_vals(ks) # kL = numba_vectorized.DIPPR9I(xs, kLs) # Another one that doesn't work Vm = [rho_to_Vm(c.get_comp_vals(rhos), c.get_comp_vals(MWs)) for c in phase.components.keys()] denom = np.sum([xs[i]*Vm[i] for i in range(len(xs))], axis=0) phis = np.array([xs[i]*Vm[i] for i in range(len(xs))])/denom kij = 2/np.sum([1/kLs[i] for i in range(len(xs))], axis=0) kmix = np.zeros_like(xs[0]) N = len(xs) for i in range(N): for j in range(N): kmix += phis[i]*phis[j]*kij return kmix
[docs] @_phasedocs def liquid_mixture_DIPPR9H( phase, ks='pore.thermal_conductivity.*', MWs='param.molecular_weight.*', ): r""" Calculates the thermal conductivity of a liquid mixture using the correlation in [1] Parameters ---------- %(phase)s %(ks)s %(MWs)s Returns ------- References ---------- [1] DIPPR9H """ xs = phase['pore.mole_fraction'] MW = phase.get_comp_vals(MWs) ks = phase.get_comp_vals(ks) num = np.vstack([xs[k]*MW[k]/(ks[k]**2) for k in xs.keys()]).sum(axis=0) denom = np.vstack([xs[k]*MW[k] for k in xs.keys()]).sum(axis=0) temp = num/denom kmix = (1/temp)**0.5 return kmix
[docs] @_phasedocs def gas_mixture_whz( phase, T='pore.temperature', ks='pore.thermal_conductivity.*', MWs='param.molecular_weight.*', ): r""" Calculates the viscosity of a gas mixture using the correlation in [1] Parameters ---------- %(phase)s %(T)s %(ks)s %(MWs)s Returns ------- References ---------- [1] Wassiljew, Herning & Zipperer """ T = phase[T] ys = phase['pore.mole_fraction'] kGs = phase.get_comp_vals(ks) MWs = phase.get_comp_vals(MWs) kmix = np.zeros_like(T) for i, ki in enumerate(ys.keys()): num = ys[ki]*kGs[ki] denom = 0.0 for j, kj in enumerate(ys.keys()): A = np.sqrt(MWs[kj]/MWs[ki]) denom += ys[ki]*A kmix += num/denom return kmix