# z = np.sqrt(mg.node_x**2 + mg.node_y**2) # z = mg.node_x + mg.node_y # val_to_replace_with = z.reshape((nrows,ncols))[3,3] # z.reshape((nrows,ncols))[2:5,:] = val_to_replace_with mg.at_node["topographic__elevation"] = z # mg.set_fixed_value_boundaries_at_grid_edges(True, True, True, True) mg.set_closed_boundaries_at_grid_edges(False, True, True, True) figure(3) imshow_node_grid(mg, mg.status_at_node) mg.at_node["water__unit_flux_in"] = np.ones_like(z) pfr = PotentialityFlowRouter(mg, "pot_fr_params.txt") pfr.route_flow(route_on_diagonals=True) figure(1) imshow_node_grid(mg, "water__discharge") figure(2) imshow_node_grid(mg, "topographic__elevation") out_sum = np.sum(mg.at_node["water__discharge"].reshape((nrows, ncols))[-3, :]) print(out_sum) print(np.sum(mg.at_node["water__unit_flux_in"]), np.sum(mg.at_node["water__discharge"][mg.boundary_nodes])) print(out_sum - np.sum(mg.at_node["water__unit_flux_in"])) show() print(mg.at_node["water__discharge"].reshape((nrows, ncols))) print(np.sum(mg.at_node["water__discharge"].reshape((nrows, ncols)), axis=0) / 3.0)
mg.update_links_nodes_cells_to_new_BCs() mg.at_node['water__unit_flux_in'].fill(0.) mg.at_node['water__unit_flux_in'][inlet_node] = 1. pfr = PotentialityFlowRouter(mg, 'pot_fr_params.txt') interior_nodes = mg.core_nodes #store profiles here section_downfan = [] # do the loop for i in range(3000): #mg.at_node['topographic__elevation'][inlet_node] = 1. #maintain flux like this now instead: mg.at_node['topographic__elevation'][section_col] = mg.at_node['topographic__elevation'][inlet_node]+1. pfr.route_flow(route_on_diagonals=True) #imshow(mg, 'water__volume_flux_magnitude') #show() kd = mg.at_node['water__volume_flux_magnitude'] # 0.01 m2 per year # dt = np.nanmin(0.2*mg.dx*mg.dx/kd) # CFL condition dt = 0.5 g = mg.calculate_gradients_at_active_links(mg.at_node[ 'topographic__elevation']) mg.map_max_of_link_nodes_to_link('water__volume_flux_magnitude', out=mg.at_link[ 'water__volume_flux_magnitude']) # map_link_end_node_max_value_to_link(mg, 'water__volume_flux_magnitude') kd_link = 1.e6*mg.at_link['water__volume_flux_magnitude'][mg.active_links] qs = -kd_link*g dqsdx = mg.calculate_flux_divergence_at_nodes(qs) dzdt = -dqsdx
mg.at_node['water__unit_flux_in'].fill(0.) mg.at_node['water__unit_flux_in'][inlet_node] = 1. pfr = PotentialityFlowRouter(mg, 'pot_fr_params.txt') interior_nodes = mg.core_nodes #store profiles here section_downfan = [] # do the loop for i in range(3000): #mg.at_node['topographic__elevation'][inlet_node] = 1. #maintain flux like this now instead: mg.at_node['topographic__elevation'][ section_col] = mg.at_node['topographic__elevation'][inlet_node] + 1. pfr.route_flow(route_on_diagonals=True) #imshow(mg, 'water__discharge') #show() kd = mg.at_node['water__discharge'] # 0.01 m2 per year # dt = np.nanmin(0.2*mg.dx*mg.dx/kd) # CFL condition dt = 0.5 g = mg.calc_grad_of_active_link(mg.at_node['topographic__elevation']) mg.map_max_of_link_nodes_to_link('water__discharge', out=mg.at_link['water__discharge']) # map_link_end_node_max_value_to_link(mg, 'water__discharge') kd_link = 1.e6 * mg.at_link['water__discharge'][mg.active_links] qs = -kd_link * g dqsdx = mg.calculate_flux_divergence_at_nodes(qs) dzdt = -dqsdx mg.at_node['topographic__elevation'][ interior_nodes] += dzdt[interior_nodes] * dt
#z = np.sqrt(mg.node_x**2 + mg.node_y**2) #z = mg.node_x + mg.node_y #val_to_replace_with = z.reshape((nrows,ncols))[3,3] #z.reshape((nrows,ncols))[2:5,:] = val_to_replace_with mg.at_node['topographic__elevation'] = z #mg.set_fixed_value_boundaries_at_grid_edges(True, True, True, True) mg.set_closed_boundaries_at_grid_edges(False, True, True, True) figure(3) imshow_node_grid(mg, mg.status_at_node) mg.at_node['water__unit_flux_in'] = np.ones_like(z) pfr = PotentialityFlowRouter(mg, 'pot_fr_params.txt') pfr.route_flow(route_on_diagonals=True) figure(1) imshow_node_grid(mg, 'surface_water__discharge') figure(2) imshow_node_grid(mg, 'topographic__elevation') out_sum = np.sum(mg.at_node['surface_water__discharge'].reshape((nrows,ncols))[-3,:]) print(out_sum) print(np.sum(mg.at_node['water__unit_flux_in']), np.sum(mg.at_node['surface_water__discharge'][mg.boundary_nodes])) print(out_sum - np.sum(mg.at_node['water__unit_flux_in'])) show() print(mg.at_node['surface_water__discharge'].reshape((nrows,ncols))) print(np.sum(mg.at_node['surface_water__discharge'].reshape((nrows,ncols)),axis=0)/3.)