Source code for openpnm.models.geometry.pore_volume._funcs
import numpy as np
from numpy import pi as _pi
from openpnm.models.geometry import _geodocs
__all__ = ["sphere",
"cube",
"circle",
"square",
"effective"
]
[docs]
@_geodocs
def sphere(
network,
pore_diameter='pore.diameter'
):
r"""
Calculate pore volume from diameter assuming a spherical pore body
Parameters
----------
%(network)s
%(Dp)s
Returns
-------
volumes : ndarray
Numpy ndarray containing pore volume values
"""
return 4/3*_pi*(network[pore_diameter]/2)**3
[docs]
@_geodocs
def cube(
network,
pore_diameter='pore.diameter'
):
r"""
Calculate pore volume from diameter assuming a cubic pore body
Parameters
----------
%(network)s
%(Dp)s
Returns
-------
"""
return network[pore_diameter]**3
[docs]
@_geodocs
def circle(
network,
pore_diameter='pore.diameter',
):
r"""
Calculate pore volume from diameter assuming a spherical pore body
Parameters
----------
%(network)s
%(Dp)s
Returns
-------
"""
return _pi/4 * network[pore_diameter]**2
[docs]
@_geodocs
def square(
network,
pore_diameter='pore.diameter',
):
r"""
Calculate pore volume from diameter assuming a cubic pore body
Parameters
----------
%(network)s
%(Dp)s
Returns
-------
"""
return network[pore_diameter]**2
[docs]
@_geodocs
def effective(
network,
pore_volume='pore.volume',
throat_volume='throat.volume',
):
r"""
Calculate the effective pore volume for optional use in transient
simulations. The effective pore volume is calculated by adding half
the volume of all neighbouring throats to the pore volume.
Parameters
----------
%(network)s
%(Dp)s
%(Dt)s
Returns
-------
"""
cn = network['throat.conns']
P1 = cn[:, 0]
P2 = cn[:, 1]
eff_vol = np.copy(network[pore_volume])
np.add.at(eff_vol, P1, 1/2*network[throat_volume])
np.add.at(eff_vol, P2, 1/2*network[throat_volume])
return eff_vol