def METHOD_NAME(
    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]/2
    Rt = network[throat_diameter]/2
    a = _np.atleast_2d(Rt).T
    q = _np.arcsin(a/Rp[conns])
    b = Rp[conns]*_np.cos(q)
    h = Rp[conns] - b
    V = 1/6*_np.pi*h*(3*a**2 + h**2)
    return _np.sum(V, axis=1)