Beispiel #1
0
def calculate_gradients_at_links(grid, node_values, out=None):
    """Calculate gradients over links.

    Construction::

        calculate_gradients_at_links(grid, node_values, out=None)

    Parameters
    ----------
    grid : RasterModelGrid
        A grid.
    node_values : array_like or field name
        Values at nodes.
    out : ndarray, optional
        Buffer to hold result. If `None`, create a new array.

    Returns
    -------
    ndarray
        Gradients of the nodes values for each link.

    Examples
    --------
    >>> from landlab import RasterModelGrid
    >>> grid = RasterModelGrid((3, 3))
    >>> node_values = [0., 0., 0.,
    ...                1., 3., 1.,
    ...                2., 2., 2.]
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 0.,  0.,  1.,  3.,  1.,  2., -2.,  1., -1.,  1.,  0.,  0.])

    >>> out = np.empty(grid.number_of_links, dtype=float)
    >>> rtn = grid.calculate_gradients_at_links(node_values, out=out)
    >>> rtn is out
    True
    >>> out
    array([ 0.,  0.,  1.,  3.,  1.,  2., -2.,  1., -1.,  1.,  0.,  0.])

    >>> grid = RasterModelGrid((3, 3), spacing=(1, 2))
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 0.,  0.,  1.,  3.,  1.,  1., -1.,  1., -1.,  1.,  0.,  0.])
    >>> _ = grid.add_field('node', 'elevation', node_values)
    >>> grid.calculate_gradients_at_links('elevation')
    array([ 0.,  0.,  1.,  3.,  1.,  1., -1.,  1., -1.,  1.,  0.,  0.])
    """
    grads = gradients.calculate_diff_at_links(grid, node_values, out=out)
    grads /= grid.link_length

#    n_vertical_links = (grid.shape[0] - 1) * grid.shape[1]
#    diffs[:n_vertical_links] /= grid.dy
#    diffs[n_vertical_links:] /= grid.dx

    return grads
Beispiel #2
0
def calculate_gradients_at_links(grid, node_values, out=None):
    """Calculate gradients over links.

    Construction::

        calculate_gradients_at_links(grid, node_values, out=None)

    Parameters
    ----------
    grid : RasterModelGrid
        A grid.
    node_values : array_like or field name
        Values at nodes.
    out : ndarray, optional
        Buffer to hold result. If `None`, create a new array.

    Returns
    -------
    ndarray
        Gradients of the nodes values for each link.

    Examples
    --------
    >>> from landlab import RasterModelGrid
    >>> grid = RasterModelGrid((3, 3))
    >>> node_values = [0., 0., 0.,
    ...                1., 3., 1.,
    ...                2., 2., 2.]
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 0.,  0.,  1.,  3.,  1.,  2., -2.,  1., -1.,  1.,  0.,  0.])

    >>> out = np.empty(grid.number_of_links, dtype=float)
    >>> rtn = grid.calculate_gradients_at_links(node_values, out=out)
    >>> rtn is out
    True
    >>> out
    array([ 0.,  0.,  1.,  3.,  1.,  2., -2.,  1., -1.,  1.,  0.,  0.])

    >>> grid = RasterModelGrid((3, 3), spacing=(1, 2))
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 0.,  0.,  1.,  3.,  1.,  1., -1.,  1., -1.,  1.,  0.,  0.])
    >>> _ = grid.add_field('node', 'elevation', node_values)
    >>> grid.calculate_gradients_at_links('elevation')
    array([ 0.,  0.,  1.,  3.,  1.,  1., -1.,  1., -1.,  1.,  0.,  0.])
    """
    grads = gradients.calculate_diff_at_links(grid, node_values, out=out)
    grads /= grid.link_length

    #    n_vertical_links = (grid.shape[0] - 1) * grid.shape[1]
    #    diffs[:n_vertical_links] /= grid.dy
    #    diffs[n_vertical_links:] /= grid.dx

    return grads
Beispiel #3
0
def calculate_gradients_at_links(grid, node_values, out=None):
    """Calculate gradients over links.

    Parameters
    ----------
    grid : RasterModelGrid
        A grid.
    node_values : array_like
        Values at nodes.
    out : ndarray, optional
        Buffer to hold result. If `None`, create a new array.

    Returns
    -------
    ndarray
        Gradients of the nodes values for each link.

    .. deprecated:: 0.1
        Use :func:`calculate_gradient_across_cell_faces`
                or :func:`calculate_gradient_across_cell_corners` instead
    Examples
    --------
    >>> from landlab import RasterModelGrid
    >>> grid = RasterModelGrid((3, 3))
    >>> node_values = [0., 0., 0.,
    ...                1., 3., 1.,
    ...                2., 2., 2.]
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  2., -2.,  0.,  0.])

    >>> out = np.empty(grid.number_of_links, dtype=float)
    >>> rtn = grid.calculate_gradients_at_links(node_values, out=out)
    >>> rtn is out
    True
    >>> out
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  2., -2.,  0.,  0.])

    >>> grid = RasterModelGrid((3, 3), spacing=(1, 2))
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  1., -1.,  0.,  0.])

    >>> _ = grid.add_field('node', 'elevation', node_values)
    >>> grid.calculate_gradients_at_links('elevation')
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  1., -1.,  0.,  0.])
    """
    diffs = gradients.calculate_diff_at_links(grid, node_values, out=out)

    n_vertical_links = (grid.shape[0] - 1) * grid.shape[1]
    diffs[:n_vertical_links] /= grid.dy
    diffs[n_vertical_links:] /= grid.dx

    return diffs
Beispiel #4
0
def calculate_gradients_at_links(grid, node_values, out=None):
    """Calculate gradients over links.

    Parameters
    ----------
    grid : RasterModelGrid
        A grid.
    node_values : array_like
        Values at nodes.
    out : ndarray, optional
        Buffer to hold result. If `None`, create a new array.

    Returns
    -------
    ndarray
        Gradients of the nodes values for each link.

    Examples
    --------
    >>> from landlab import RasterModelGrid
    >>> grid = RasterModelGrid((3, 3))
    >>> node_values = [0., 0., 0., 1., 3., 1., 2., 2., 2.]
    >>> grid.calculate_gradients_at_links(node_values)
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  2., -2.,  0.,  0.])

    >>> out = np.empty(grid.number_of_links, dtype=float)
    >>> rtn = grid.calculate_gradients_at_links(node_values, out=out)
    >>> rtn is out
    True
    >>> out
    array([ 1.,  3.,  1.,  1., -1.,  1.,  0.,  0.,  2., -2.,  0.,  0.])

    .. deprecated:: 0.1
        Use :func:`calculate_gradient_across_cell_faces`
                or :func:`calculate_gradient_across_cell_corners` instead
    """
    diffs = gradients.calculate_diff_at_links(grid, node_values, out=out)
    return np.divide(diffs, grid.node_spacing, out=diffs)