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

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


__all__ = [
    "liquid_mixture_tc",
    "gas_mixture_ce",
    "gas_mixture_fesg",
    # "gas_mixture_wilke_fuller",
]


[docs] @_phasedocs def liquid_mixture_tc( phase, T='pore.temperature', mu='pore.viscosity', Vms_at_Tb='param.molar_volume_Tb.*', sigmas_at_Tb='param.surface_tension_Tb.*', ): r""" Uses Tyn-Calus model to estimate diffusion coefficient in a dilute liquid solution of A in B from first principles at conditions of interest Parameters ---------- %(phase)s %(T)s %(mu)s Vms_at_Tb : str or list of scalars Molar volumes of each component at its boiling temperature (m3/mol). Can either be a string to a parameter on each component of a list of scalar values which are used directly sigmas_at_Tb : float Surface tension of component A at boiling temperature (N/m) Returns ------- """ T = phase[T] mu = phase[mu] sigma_A, sigma_B = phase.get_comp_vals(sigmas_at_Tb).values() VA, VB = phase.get_comp_vals(Vms_at_Tb).values() A = 8.93e-8*(VB*1e6)**0.267/(VA*1e6)**0.433*T B = (sigma_B/sigma_A)**0.15/(mu*1e3) value = A*B*1e-4 return value
[docs] @_phasedocs def gas_mixture_ce( phase, T='pore.temperature', P='pore.pressure', Tcs='param.critical_temperature.*', Pcs='param.critical_pressure.*', omegas='param.acentric_factor.*', MWs='param.molecular_weight.*', epsilons='param.LJ_energy.*', sigmas='param.LJ_diameter.*', ): r""" Calculate gas phase diffusion coefficient using Chapman-Enskog equation. Parameters ---------- %(phase)s %(T)s %(P)s %(Tcs)s %(Pcs)s %(omegas)s %(MWs)s %(epsilons)s %(sigmas)s Returns ------- """ # Fetch values from components T = phase[T] P = phase[P] try: MA, MB = phase.get_comp_vals(MWs).values() except ValueError: raise Exception('This function only works on binary mixtures') MWAB = 2/(1/MA + 1/MB) omega = phase.get_comp_vals(omegas).values() Tc = phase.get_comp_vals(Tcs).values() Pc = phase.get_comp_vals(Pcs).values() k = 1.380649e-23 # Boltzmann constant try: eA, eB = phase.get_comp_vals(epsilons).values() except Exception: # Use correlation of Tee, Gotoh, & Stewart eA, eB = (0.7915 + 0.1693*omega)*Tc*k eAB = (eA*eB)**0.5 # Compute collision integral using Neufeld's correlation (RPP Eq.(11-3.6)) A, B, C, D, E, F, G, H = (1.06036, 0.15610, 0.19300, 0.47635, 1.03587, 1.52996, 1.76474, 3.89411) Tstar = k*T/eAB Omega = Omega = A/(Tstar**B) + C/np.exp(D*Tstar) + E/np.exp(F*Tstar) \ + G/np.exp(H*Tstar) # Now apply RPP Eq.(11-3.2) try: sA, sB = phase.get_comp_vals(sigmas).values() except Exception: # Use correlation of Tee, Gotoh, & Stewart sA, sB = (2.3551 - 0.08847*omega)*(Tc/Pc)**(1/3) sAB = (sA + sB)/2 DAB = 0.00266 * (T**1.5) / (P/101325 * MWAB**0.5 * sAB**2 * Omega) * 1e-4 return DAB
[docs] @_phasedocs def gas_mixture_fesg( phase, T='pore.temperature', P='pore.pressure', MWs='param.molecular_weight.*', Vdms='param.molar_diffusion_volume.*', ): r""" Estimates the diffusion coefficient of both species in a binary gas mixture using the Fuller et al correlation [1]_, [2]_, [3]_. Parameters ---------- %(phase)s %(T)s %(P)s %(MWs)s %(Vdms)s Returns ------- Dij : dict[ndarray] The dict contains one array for each component, containing the diffusion coefficient of that component at each location. References ---------- .. [1] Fuller, E. N., and J. C. Giddings: J. Gas Chromatogr., 3: 222 (1965). .. [2] Fuller, E. N., P. D. Schettler, and J. C. Giddings: Ind. Eng. Chem., 58(5): 18 (1966). .. [3] Fuller, E. N., K. Ensley, and J. C. Giddings: J. Phys. Chem., 73: 3679 (1969). """ T = phase[T] P = phase[P] # The following is to accomodate proper mixtures AND normal Phase objects try: MA, MB = phase.get_comp_vals(MWs).values() except AttributeError: MA, MB = phase[MWs] try: vA, vB = phase.get_comp_vals(Vdms).values() except AttributeError: vA, vB = phase[Vdms] MAB = 2/(1/MA + 1/MB) P = P/101325 DAB = 0.00143*T**1.75/(P*(MAB**0.5)*(vA**(1./3) + vB**(1./3))**2)*1e-4 return DAB
def gas_mixture_fw( phase, T='pore.temperature', P='pore.pressure', MWs='param.molecular_weight.*', Vdms='pore.molar_diffusion_volume.*', ): # pragma: no cover r""" Estimates the diffusion coeffient of each species in a gas mixture Uses the Fuller equation to estimate binary diffusivity between pairs, then uses the correction of Fairbanks and Wilke [1]_ to account for the composition of the gas mixture. Parameters ---------- %(phase)s %(T)s %(P)s %(MWs)s %(Vdms)s Returns ------- Dij : dict[ndarray] The dict contains one array for each component, containing the diffusion coefficient of that component at each location. References ---------- .. [1] Fairbanks DF and CR Wilke, Diffusion Coefficients in Multicomponent Gas Mixtures. Industrial & Engineering Chemistry, 42(3), p471–475 (1950). `DOI: 10.1021/ie50483a022 <http://doi.org/10.1021/ie50483a022>`_ """ raise Exception('This function is not ready yet') # comps = list(phase.components.values()) # values = {} # for i in range(len(comps)): # A = comps[i] # denom = 0.0 # for j in range(len(comps)): # if i != j: # B = comps[j] # D = gas_mixture_fesg(phase=phase, # molecular_weight=MW_pair, # molar_diffusion_volume=Vdm_pair, # temperature=T, # pressure=P) # yB = phase['pore.mole_fraction.' + B.name] # denom += yB/D # yA = phase['pore.mole_fraction.' + A.name] # values[A.name] = (1 - yA)/denom # return values