def direct_flow(self): """ Find flow directions, save to the model grid, and return receivers. direct_flow() checks for updated boundary conditions, calculates slopes on links, finds basself.surface_valuesel nodes based on the status at node, calculates flow directions, saves results to the grid, and returns a at-node array of receiver nodes. This array is stored in the grid at: grid['node']['flow__receiver_nodes'] An alternative to direct_flow() is run_one_step() which does the same things but also returns a at-node array of receiver nodes. This array is stored in the grid at: grid['node']['flow__receiver_nodes'] """ self._check_updated_bc() # Step 1. Find and save base level nodes. (baselevel_nodes,) = numpy.where( numpy.logical_or( self._grid.status_at_node == FIXED_VALUE_BOUNDARY, self._grid.status_at_node == FIXED_GRADIENT_BOUNDARY, ) ) # Calculate flow directions ( self.receivers, self.proportions, slopes_to_receivers, steepest_slope, steepest_receiver, sink, receiver_links, steepest_link, ) = flow_direction_dinf.flow_directions_dinf( self._grid, self.surface_values, baselevel_nodes=baselevel_nodes ) # Save the four ouputs of this component. self._grid["node"]["flow__receiver_node"][:] = self.receivers self._grid["node"]["flow__receiver_proportions"][:] = self.proportions self._grid["node"]["topographic__steepest_slope"][:] = slopes_to_receivers self._grid["node"]["flow__link_to_receiver_node"][:] = receiver_links self._grid["node"]["flow__sink_flag"][:] = False self._grid["node"]["flow__sink_flag"][sink] = True return (self.receivers, self.proportions)
def direct_flow(self): """ Find flow directions, save to the model grid, and return receivers. direct_flow() checks for updated boundary conditions, calculates slopes on links, finds basself.surface_valuesel nodes based on the status at node, calculates flow directions, saves results to the grid, and returns a at-node array of receiver nodes. This array is stored in the grid at: grid['node']['flow__receiver_nodes'] An alternative to direct_flow() is run_one_step() which does the same things but also returns a at-node array of receiver nodes. This array is stored in the grid at: grid['node']['flow__receiver_nodes'] """ self._check_updated_bc() # Step 1. Find and save base level nodes. (baselevel_nodes, ) = numpy.where( numpy.logical_or( self._grid.status_at_node == FIXED_VALUE_BOUNDARY, self._grid.status_at_node == FIXED_GRADIENT_BOUNDARY, )) # Calculate flow directions ( self.receivers, self.proportions, slopes_to_receivers, steepest_slope, steepest_receiver, sink, receiver_links, steepest_link, ) = flow_direction_dinf.flow_directions_dinf( self._grid, self.surface_values, baselevel_nodes=baselevel_nodes) # Save the four ouputs of this component. self._grid["node"]["flow__receiver_node"][:] = self.receivers self._grid["node"]["flow__receiver_proportions"][:] = self.proportions self._grid["node"][ "topographic__steepest_slope"][:] = slopes_to_receivers self._grid["node"]["flow__link_to_receiver_node"][:] = receiver_links self._grid["node"]["flow__sink_flag"][:] = False self._grid["node"]["flow__sink_flag"][sink] = True return (self.receivers, self.proportions)
def test_not_implemented_voroni(): x = [0, 0.1, 0.2, 0.3, 1, 1.1, 1.2, 1.3, 2, 2.1, 2.2, 2.3] y = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3] vmg = VoronoiDelaunayGrid(x, y) with pytest.raises(NotImplementedError): flow_direction_dinf.flow_directions_dinf(vmg)