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
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
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
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)