[docs]@_geodocsdefcylinder(network,throat_diameter='throat.diameter',throat_length='throat.length',):r""" Calculate throat volume assuing a cylindrical shape Parameters ---------- %(network)s %(Dt)s %(Lt)s Returns ------- volumes : ndarray A numpy ndarray containing throat volume values Notes ----- This models does not account for the volume reprsented by the intersection of the throat with a spherical pore body. Use the ``lens`` or ``pendular_ring`` models in addition to this one to account for this volume. """leng=network[throat_length]diam=network[throat_diameter]value=_np.pi/4*leng*diam**2returnvalue
[docs]@_geodocsdefcuboid(network,throat_diameter='throat.diameter',throat_length='throat.length',):r""" Calculate throat volume assuing a square cross-section Parameters ---------- %(network)s %(Dt)s %(Lt)s Returns ------- Notes ----- At present this models does NOT account for the volume reprsented by the intersection of the throat with a spherical pore body. """leng=network[throat_length]diam=network[throat_diameter]value=leng*diam**2returnvalue
[docs]@_geodocsdefrectangle(network,throat_diameter='throat.diameter',throat_length='throat.length',):r""" Calculate throat volume assuing a rectangular shape Parameters ---------- %(network)s %(Dt)s %(Lt)s Returns ------- Notes ----- At present this models does NOT account for the volume reprsented by the intersection of the throat with a spherical pore body. """returnnetwork[throat_length]*network[throat_diameter]
[docs]@_geodocsdefextrusion(network,throat_length='throat.length',throat_area='throat.cross_sectional_area',):r""" Calculate throat volume from the throat area and the throat length. This method is useful for abnormal shaped throats. Parameters ---------- %(network)s %(Lt)s %(At)s Returns ------- Notes ----- At present this models does NOT account for the volume reprsented by the intersection of the throat with a spherical pore body. """leng=network[throat_length]area=network[throat_area]value=leng*areareturnvalue
[docs]@_geodocsdeflens(network,throat_diameter='throat.diameter',pore_diameter='pore.diameter',):r""" Calculates the volume residing the hemispherical caps formed by the intersection between cylindrical throats and spherical pores. This volume should be subtracted from throat volumes if the throat lengths were found using throat end points. Parameters ---------- %(network)s %(Dt)s %(Dp)s Returns ------- Notes ----- This model does not consider the possibility that multiple throats might overlap in the same location which could happen if throats are large and connectivity is random. See Also -------- pendular_ring """conns=network['throat.conns']Rp=network[pore_diameter]/2Rt=network[throat_diameter]/2a=_np.atleast_2d(Rt).Tq=_np.arcsin(a/Rp[conns])b=Rp[conns]*_np.cos(q)h=Rp[conns]-bV=1/6*_np.pi*h*(3*a**2+h**2)return_np.sum(V,axis=1)
[docs]@_geodocsdefpendular_ring(network,throat_diameter='throat.diameter',pore_diameter='pore.diameter',):r""" Calculates the volume of the pendular rings residing between the end of a cylindrical throat and spherical pores that are in contact but not overlapping. This volume should be added to the throat volume if the throat length was found as the center-to-center distance less the pore radii. Parameters ---------- %(network)s %(Dt)s %(Dp)s Returns ------- Notes ----- This model does not consider the possibility that multiple throats might overlap in the same location which could happen if throats are large and connectivity is random. See Also -------- lens """conns=network['throat.conns']Rp=network[pore_diameter]/2Rt=network[throat_diameter]/2a=_np.atleast_2d(Rt).Tq=_np.arcsin(a/Rp[conns])b=Rp[conns]*_np.cos(q)h=Rp[conns]-bVlens=1/6*_np.pi*h*(3*a**2+h**2)Vcyl=_np.pi*(a)**2*hV=Vcyl-Vlensreturn_np.sum(V,axis=1)