Пример #1
0
sde = SedDepEroder(mg, input_file)
# don't allow overwriting of these, just in case
try:
    x_profiles
except NameError:
    x_profiles = []
    z_profiles = []
    S_profiles = []
    A_profiles = []

# plot init conds
if make_output_plots:
    mg = fr.route_flow(grid=mg)
    pylab.figure('long_profile_anim')
    ylim([0, y_max])
    prf.analyze_channel_network_and_plot(mg)
    savefig('0profile_anim_init.png')
    close('long_profile_anim')

(profile_IDs, dists_upstr) = prf.analyze_channel_network_and_plot(mg)
start_node = [profile_IDs[0]]

time_on = time()
#perform the loops:
for i in range(nt):
    #print 'loop ', i
    mg.at_node['topographic__elevation'][mg.core_nodes] += uplift_per_step
    mg = fr.run_one_step()
    #mg.calc_grad_across_cell_faces(mg.at_node['topographic__elevation'])
    #neighbor_slopes = mg.calc_grad_along_node_links(mg.at_node['topographic__elevation'])
    #mean_slope = np.mean(np.fabs(neighbor_slopes),axis=1)
Пример #2
0
sde = SedDepEroder(mg, input_file)
# don't allow overwriting of these, just in case
try:
    x_profiles
except NameError:
    x_profiles = []
    z_profiles = []
    S_profiles = []
    A_profiles = []

# plot init conds
if make_output_plots:
    mg = fr.route_flow(grid=mg)
    pylab.figure('long_profile_anim')
    ylim([0, y_max])
    prf.analyze_channel_network_and_plot(mg)
    savefig('0profile_anim_init.png')
    close('long_profile_anim')

(profile_IDs, dists_upstr) = prf.analyze_channel_network_and_plot(mg)
start_node = [profile_IDs[0]]

time_on = time()
#perform the loops:
for i in range(nt):
    #print 'loop ', i
    mg.at_node['topographic__elevation'][mg.core_nodes] += uplift_per_step
    mg = fr.run_one_step()
    #mg.calc_grad_across_cell_faces(mg.at_node['topographic__elevation'])
    #neighbor_slopes = mg.calc_grad_along_node_links(mg.at_node['topographic__elevation'])
    #mean_slope = np.mean(np.fabs(neighbor_slopes),axis=1)
Пример #3
0
        print("Short step!")
        dt = time_to_run - elapsed_time
    mg = fr.route_flow(method='D8')
    #print 'Area: ', numpy.max(mg.at_node['drainage_area'])
    #mg = fsp.erode(mg)
    mg, _, _ = sp.erode(mg,
                        dt,
                        node_drainage_areas='drainage_area',
                        slopes_at_nodes='topographic__steepest_slope',
                        K_if_used='K_values')
    #add uplift
    mg.at_node['topographic__elevation'][mg.core_nodes] += uplift * dt
    elapsed_time += dt
    if counter % 20 == 0:
        pylab.figure('profiles')
        profiles = prf.analyze_channel_network_and_plot(mg)
    counter += 1

time_off = time.time()
print('Elapsed time: ', time_off - time_on)

time_off = time.time()
print('Elapsed time: ', time_off - time_on)

#Finalize and plot
elev = mg['node']['topographic__elevation']
elev_r = mg.node_vector_to_raster(elev)

# Clear previous plots
pylab.figure(1)
pylab.close()
Пример #4
0
    def run_one_step(self):
        """ """
        # find the faulted node with the largest drainage area.
        largest_da = np.max(self._model.grid.at_node['drainage_area'][
            self._model.boundary_handler['NormalFault'].faulted_nodes == True])
        largest_da_ind = np.where(
            self._model.grid.at_node['drainage_area'] == largest_da)[0][0]

        start_node = self._model.grid.at_node['flow__receiver_node'][
            largest_da_ind]

        (profile_IDs, dists_upstr) = analyze_channel_network_and_plot(
            self._model.grid,
            number_of_channels=1,
            starting_nodes=[start_node],
            create_plot=False)
        elevs = model.z[profile_IDs]

        self.relative_times.append(self._model.model_time /
                                   model.params['run_duration'])

        offset = np.min(elevs[0])
        max_distance = np.max(dists_upstr[0][0])
        self.channel_segments.append(
            np.array((dists_upstr[0][0], elevs[0] - offset)).T)
        self.xnormalized_segments.append(
            np.array((dists_upstr[0][0] / max_distance, elevs[0] - offset)).T)

        self.relative_times.append(self._model.model_time /
                                   model.params['run_duration'])

        colors = cm.viridis_r(self.relative_times)

        xmin = [xy.min(axis=0)[0] for xy in self.channel_segments]
        ymin = [xy.min(axis=0)[1] for xy in self.channel_segments]
        xmax = [xy.max(axis=0)[0] for xy in self.channel_segments]
        ymax = [xy.max(axis=0)[1] for xy in self.channel_segments]

        fs = (8, 6)
        fig, ax = plt.subplots(figsize=fs, dpi=300)
        ax.set_xlim(0, max(xmax))
        ax.set_ylim(0, max(ymax))
        line_segments = LineCollection(self.channel_segments,
                                       colors=colors,
                                       linewidth=0.5)
        ax.add_collection(line_segments)
        yr = str(self._model.model_time / (1e6)).zfill(4)
        plt.savefig('profile_' + yr + '.png')
        plt.close()

        fig, ax = plt.subplots(figsize=fs, dpi=300)
        ax.set_xlim(0, 1)
        ax.set_ylim(0, max(ymax))
        line_segments = LineCollection(self.xnormalized_segments,
                                       colors=colors,
                                       linewidth=0.5)
        ax.add_collection(line_segments)
        yr = str(self._model.model_time / (1e6)).zfill(4)
        plt.savefig('normalized_profile_' + yr + '.png')
        plt.close()

        plt.figure()
        plot_channels_in_map_view(self._model.grid, profile_IDs)
        plt.savefig('topography_' + yr + '.png')
        plt.close()

        plt.figure()
        imshow_grid(model.grid,
                    model.grid.at_node['soil__depth'],
                    cmap='viridis',
                    limits=(0, 15))
        plt.savefig('soil_' + yr + '.png')
        plt.close()

        plt.figure()
        imshow_grid(self._model.grid,
                    self._model.grid.at_node['sediment__flux'],
                    cmap='viridis')
        plt.savefig('sediment_flux_' + yr + '.png')
        plt.close()

        U_eff = U_fast + U_back
        U_eff_slow = U_slow + U_back

        area = np.sort(self._model.grid.at_node['drainage_area'][
            self._model.boundary_handler['NormalFault'].faulted_nodes == True])
        area = area[area > 0]
        little_q = (
            area *
            self._model.params['runoff_rate'])**self._model.params['m_sp']
        #area_to_the_m = area ** self._model.params['m_sp']

        detachment_prediction = (
            (U_eff / (self._model.params['K_rock_sp']))
            **(1.0 / self._model.params['n_sp']) *
            (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        transport_prediction = (
            ((U_eff * self._model.params['v_sc']) /
             (self._model.params['K_sed_sp'] *
              self._model.params['runoff_rate'])) +
            ((U_eff) / (self._model.params['K_sed_sp'])))**(
                1.0 / self._model.params['n_sp']) * (
                    (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        space_prediction = (
            ((U_eff * self._model.params['v_sc']) * (1.0 - Ff) /
             (self._model.params['K_sed_sp'] *
              self._model.params['runoff_rate'])) +
            ((U_eff) / (self._model.params['K_rock_sp'])))**(
                1.0 / self._model.params['n_sp']) * (
                    (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        detachment_prediction_slow = (
            (U_eff_slow / (self._model.params['K_rock_sp']))
            **(1.0 / self._model.params['n_sp']) *
            (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        transport_prediction_slow = (
            ((U_eff_slow * self._model.params['v_sc']) /
             (self._model.params['K_sed_sp'] *
              self._model.params['runoff_rate'])) +
            ((U_eff_slow) / (self._model.params['K_sed_sp'])))**(
                1.0 / self._model.params['n_sp']) * (
                    (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        space_prediction_slow = (
            ((U_eff_slow * self._model.params['v_sc']) * (1.0 - Ff) /
             (self._model.params['K_sed_sp'] *
              self._model.params['runoff_rate'])) +
            ((U_eff_slow) / (self._model.params['K_rock_sp'])))**(
                1.0 / self._model.params['n_sp']) * (
                    (1.0 / little_q)**(1.0 / self._model.params['n_sp']))

        # TODO need to fix space predictions here to include new soil thickness.

        fs = (8, 6)
        fig, ax = plt.subplots(figsize=fs, dpi=300)
        plt.plot(area,
                 detachment_prediction,
                 'c',
                 lw=5,
                 label='Detachment Prediction')
        plt.plot(area, transport_prediction, 'b', label='Transport Prediction')
        plt.plot(area, space_prediction, 'm', label='Space Prediction')

        plt.plot(area, detachment_prediction_slow, 'c', lw=5, alpha=0.3)
        plt.plot(area, transport_prediction_slow, 'b', alpha=0.3)
        plt.plot(area, space_prediction_slow, 'm', alpha=0.3)

        plt.plot(self._model.grid.at_node['drainage_area'][
            self._model.boundary_handler['NormalFault'].faulted_nodes == True],
                 self._model.grid.at_node['topographic__steepest_slope']
                 [self._model.boundary_handler['NormalFault'].faulted_nodes ==
                  True],
                 'k.',
                 label='Fault Block Nodes')
        plt.plot(self._model.grid.at_node['drainage_area']
                 [self._model.boundary_handler['NormalFault'].faulted_nodes ==
                  False],
                 self._model.grid.at_node['topographic__steepest_slope']
                 [self._model.boundary_handler['NormalFault'].faulted_nodes ==
                  False],
                 'r.',
                 label='Unfaulted Nodes')
        plt.plot(self._model.grid.at_node['drainage_area'][profile_IDs],
                 self._model.grid.at_node['topographic__steepest_slope']
                 [profile_IDs],
                 'g.',
                 label='Main Channel Nodes')
        plt.legend()

        ax.set_xscale('log')
        ax.set_yscale('log')
        plt.xlabel('log 10 Area')
        plt.ylabel('log 10 Slope')
        plt.savefig('slope_area_' + yr + '.png')
        plt.close()
Пример #5
0
model = Model(params=params, OutputWriters=ChannelPlotter)

model.run(output_fields=output_fields)
#%%

# find the faulted node with the largest drainage area.
largest_da = np.max(model.grid.at_node['drainage_area'][
    model.boundary_handler['NormalFault'].faulted_nodes == True])
largest_da_ind = np.where(
    model.grid.at_node['drainage_area'] == largest_da)[0][0]

#plt.figure()
#imshow_grid(model.grid, model.grid.at_node['drainage_area'] == largest_da, cmap='viridis')
#plt.show()

(profile_IDs, dists_upstr) = analyze_channel_network_and_plot(
    model.grid, number_of_channels=1, starting_nodes=[largest_da_ind])
elevs = model.z[profile_IDs]

data_frame = pd.DataFrame.from_dict(
    data={
        'distance': dists_upstr[0][0],
        'elevation': elevs[0],
        'area': model.grid.at_node['drainage_area'][profile_IDs][0],
        'slope': model.grid.at_node['topographic__steepest_slope'][profile_IDs]
        [0]
    })
data_frame.to_csv('truth_profile.csv')

with open(sys.argv[-1], 'w') as f:
    relief = model.z[model.grid.core_nodes].max() - model.z[
        model.grid.core_nodes].min()
Пример #6
0
counter = 0.
while elapsed_time < time_to_run:
    print(elapsed_time)
    if elapsed_time+dt>time_to_run:
        print("Short step!")
        dt = time_to_run - elapsed_time
    mg = fr.route_flow(method='D8')
    #print 'Area: ', numpy.max(mg.at_node['drainage_area'])
    #mg = fsp.erode(mg)
    mg,_,_ = sp.erode(mg, dt, node_drainage_areas='drainage_area', slopes_at_nodes='topographic__steepest_slope', K_if_used='K_values')
    #add uplift
    mg.at_node['topographic__elevation'][mg.core_nodes] += uplift*dt
    elapsed_time += dt
    if counter%20 == 0:
        pylab.figure('profiles')
        profiles = prf.analyze_channel_network_and_plot(mg)
    counter += 1

time_off = time.time()
print('Elapsed time: ', time_off-time_on)

time_off = time.time()
print('Elapsed time: ', time_off-time_on)

#Finalize and plot
elev = mg['node']['topographic__elevation']
elev_r = mg.node_vector_to_raster(elev)

# Clear previous plots
pylab.figure(1)
pylab.close()