Source code for openpnm.models.physics.diffusive_conductance._funcs
import numpy as _np
import scipy.constants as _const
from openpnm.models import _doctxt
from openpnm.models.physics._utils import _poisson_conductance
__all__ = [
"generic_diffusive",
"ordinary_diffusion",
"mixed_diffusion",
"taylor_aris_diffusion",
]
[docs]
@_doctxt
def generic_diffusive(phase,
pore_diffusivity="pore.diffusivity",
throat_diffusivity="throat.diffusivity",
size_factors="throat.diffusive_size_factors"):
r"""
Calculates the diffusive conductance of conduits in network.
Parameters
----------
%(phase)s
pore_diffusivity : str
%(dict_blurb)s pore diffusivity
throat_diffusivity : str
%(dict_blurb)s throat diffusivity
size_factors : str
%(dict_blurb)s conduit diffusive size factors
Returns
-------
%(return_arr)s diffusive conductance
"""
return _poisson_conductance(phase=phase,
pore_conductivity=pore_diffusivity,
throat_conductivity=throat_diffusivity,
size_factors=size_factors)
[docs]
@_doctxt
def ordinary_diffusion(phase,
pore_diffusivity="pore.diffusivity",
throat_diffusivity="throat.diffusivity",
size_factors="throat.diffusive_size_factors"):
r"""
Calculates the diffusive conductance of conduits in network.
Parameters
----------
%(phase)s
pore_diffusivity : str
%(dict_blurb)s pore diffusivity
throat_diffusivity : str
%(dict_blurb)s throat diffusivity
size_factors: str
%(dict_blurb)s conduit diffusive size factors
Returns
-------
%(return_arr)s diffusive conductance
"""
return _poisson_conductance(phase=phase,
pore_conductivity=pore_diffusivity,
throat_conductivity=throat_diffusivity,
size_factors=size_factors)
[docs]
@_doctxt
def mixed_diffusion(phase,
pore_diameter="pore.diameter",
throat_diameter="throat.diameter",
pore_diffusivity="pore.diffusivity",
throat_diffusivity="throat.diffusivity",
pore_temperature="pore.temperature",
throat_temperature="throat.temperature",
molecular_weight="pore.molecular_weight",
size_factors="throat.diffusive_size_factors"):
r"""
Calculates the diffusive conductance of conduits in network with
Knudsen correction.
Parameters
----------
%(phase)s
pore_diameter : str
%(dict_blurb)s pore diameter
throat_diameter : str
%(dict_blurb)s throat diameter
pore_diffusivity : str
%(dict_blurb)s pore diffusivity
throat_diffusivity : str
%(dict_blurb)s pore diffusivity
pore_temperature : str
%(dict_blurb)s pore temperature
molecular_weigth : str
%(dict_blurb)s pore molecular weight
size_factors : str
%(dict_blurb)s size factor
Returns
-------
%(return_arr)s diffusive conductance
"""
# Fetch model parameters
Dp = phase[pore_diffusivity]
Dt = phase[throat_diffusivity]
dp = phase.network[pore_diameter]
dt = phase.network[throat_diameter]
MWp = phase[molecular_weight]
MWt = phase.interpolate_data(propname='throat.'+molecular_weight.split('.', 1)[-1])
Tp = phase[pore_temperature]
Tt = phase[throat_temperature]
# Calculate Knudsen contribution
DKp = dp/3 * (8*_const.R*Tp / (_const.pi*MWp)) ** 0.5
DKt = dt/3 * (8*_const.R*Tt / (_const.pi*MWt)) ** 0.5
# Calculate mixed diffusivity
Dp_eff = (1/DKp + 1/Dp) ** -1
Dt_eff = (1/DKt + 1/Dt) ** -1
return _poisson_conductance(phase=phase,
pore_conductivity=Dp_eff,
throat_conductivity=Dt_eff,
size_factors=size_factors)
[docs]
@_doctxt
def taylor_aris_diffusion(phase,
pore_area="pore.area",
throat_area="throat.cross_sectional_area",
pore_diffusivity="pore.diffusivity",
throat_diffusivity="throat.diffusivity",
pore_pressure="pore.pressure",
throat_hydraulic_conductance="throat.hydraulic_conductance",
size_factors="throat.diffusive_size_factors"):
r"""
Calculates the diffusive conductance of conduits in network
considering the Taylor-Aris effect (effect of flow on diffusion).
Parameters
----------
%(phase)s
pore_area : str
%(dict_blurb)s pore cross-sectional area
throat_area : str
%(dict_blurb)s throat cross-sectional area
pore_diffusivity : str
%(dict_blurb)s pore diffusivity
throat_diffusivity : str
%(dict_blurb)s pore diffusivity
pore_pressure : str
%(dict_blurb)s pore pressure
throat_hydraulic_conductance : str
%(dict_blurb)s throat hydraulic conductance
size_factors : str
%(dict_blurb)s conduit size factors
Returns
-------
%(return_arr)s diffusive conductance
"""
network = phase.network
cn = network['throat.conns']
F = network[size_factors]
# Fetch model parameters
A1, A2 = network[pore_area][cn].T
At = network[throat_area]
D1, D2 = phase[pore_diffusivity][cn].T
Dt = phase[throat_diffusivity]
P = phase[pore_pressure]
gh = phase[throat_hydraulic_conductance]
# Calculate Peclet number
Qt = -gh * _np.diff(P[cn], axis=1).squeeze()
u1, ut, u2 = [Qt/Ai for Ai in [A1, At, A2]]
Pe1 = u1 * ((4 * A1 / _np.pi) ** 0.5) / D1
Pe2 = u2 * ((4 * A2 / _np.pi) ** 0.5) / D2
Pet = ut * ((4 * At / _np.pi) ** 0.5) / Dt
if F.ndim > 1:
g1 = D1 * (1 + Pe1**2 / 192) * F[:, 0]
gt = Dt * (1 + Pet**2 / 192) * F[:, 1]
g2 = D2 * (1 + Pe2**2 / 192) * F[:, 2]
gtot = 1 / (1/g1 + 1/gt + 1/g2)
else:
gtot = Dt * (1 + Pet**2 / 192) * F
return gtot