landlab.components.detachment_ltd_erosion.generate_erosion_by_depth_slope¶
Landlab component that simulates detachment-limited river erosion.
This component calculates changes in elevation in response to vertical incision.
- class DepthSlopeProductErosion[source]¶
Bases:
Component
Calculate erosion rate as a function of the depth-slope product.
Erosion rate is calculated as,
erosion_rate = k_e * ((tau ** a - tau_crit ** a))
- k_e
Erodibility coefficient
- tau
Bed shear stress:
tau = rho * g * h * S
- rho
Density of fluid
- g
Gravitational acceleration
- h
Water depths
- S
Slope
- tau_crit
Critical shear stress
- a
Positive exponent
Note this equation was presented in Tucker, G.T., 2004, Drainage basin sensitivity to tectonic and climatic forcing: Implications of a stochastic model for the role of entrainment and erosion thresholds, Earth Surface Processes and Landforms.
More generalized than other erosion components, as it doesn’t require the upstream node order, links to flow receiver and flow receiver fields. Instead, takes in the water depth and slope fields on NODES calculated by the OverlandFlow class and erodes the landscape in response to the hydrograph generted by that method.
As of right now, this component relies on the OverlandFlow component for stability. There are no stability criteria implemented in this class. To ensure model stability, use StreamPowerEroder or FastscapeEroder components instead.
Code author: Jordan Adams
Examples
>>> import numpy as np >>> from landlab import RasterModelGrid >>> from landlab.components import DepthSlopeProductErosion
Create a grid on which to calculate detachment ltd sediment transport.
>>> grid = RasterModelGrid((5, 5))
The grid will need some data to provide the detachment limited sediment transport component. To check the names of the fields that provide input to the detachment ltd transport component, use the input_var_names class property.
Create fields of data for each of these input variables.
First create topography. This is a flat surface of elevation 10 m.
>>> grid.at_node["topographic__elevation"] = np.ones(grid.number_of_nodes) >>> grid.at_node["topographic__elevation"] *= 10.0 >>> grid.at_node["topographic__elevation"] = [ ... [10.0, 10.0, 10.0, 10.0, 10.0], ... [10.0, 10.0, 10.0, 10.0, 10.0], ... [10.0, 10.0, 10.0, 10.0, 10.0], ... [10.0, 10.0, 10.0, 10.0, 10.0], ... [10.0, 10.0, 10.0, 10.0, 10.0], ... ]
Now we’ll add an arbitrary water depth field on top of that topography.
>>> grid.at_node["surface_water__depth"] = [ ... [5.0, 5.0, 5.0, 5.0, 5.0], ... [4.0, 4.0, 4.0, 4.0, 4.0], ... [3.0, 3.0, 3.0, 3.0, 3.0], ... [2.0, 2.0, 2.0, 2.0, 2.0], ... [1.0, 1.0, 1.0, 1.0, 1.0], ... ]
Using the set topography, now we will calculate slopes on all nodes.
First calculating slopes on links
>>> grid.at_link["water_surface__slope"] = grid.calc_grad_at_link( ... "surface_water__depth" ... )
Now putting slopes on nodes
>>> grid.at_node["water_surface__slope"] = ( ... grid.at_link["water_surface__slope"][grid.links_at_node] ... * grid.active_link_dirs_at_node ... ).max(axis=1) >>> grid.at_node["water_surface__slope"][grid.core_nodes] array([1., 1., 1., 1., 1., 1., 1., 1., 1.])
Instantiate the DepthSlopeProductErosion component to work on this grid, and run it. In this simple case, we need to pass it a time step (‘dt’) and also an erodibility factor (‘k_e’).
>>> dt = 1.0 >>> dspe = DepthSlopeProductErosion( ... grid, k_e=0.00005, g=9.81, slope="water_surface__slope" ... ) >>> dspe.run_one_step( ... dt=dt, ... )
Now we test to see how the topography changed as a function of the erosion rate. First, we’ll look at the erosion rate:
>>> dspe.dz.reshape(grid.shape) array([[ 0. , -2.4525, -2.4525, -2.4525, 0. ], [ 0. , -1.962 , -1.962 , -1.962 , 0. ], [ 0. , -1.4715, -1.4715, -1.4715, 0. ], [ 0. , -0.981 , -0.981 , -0.981 , 0. ], [ 0. , 0. , 0. , 0. , 0. ]])
Now, our updated topography…
>>> grid.at_node["topographic__elevation"].reshape(grid.shape) array([[10. , 7.5475, 7.5475, 7.5475, 10. ], [10. , 8.038 , 8.038 , 8.038 , 10. ], [10. , 8.5285, 8.5285, 8.5285, 10. ], [10. , 9.019 , 9.019 , 9.019 , 10. ], [10. , 10. , 10. , 10. , 10. ]])
Calculate detachment limited erosion rate on nodes using the shear stress equation, solved using the depth slope product.
Landlab component that generalizes the detachment limited erosion equation, primarily to be coupled to the the Landlab OverlandFlow component.
This component adjusts topographic elevation and is contained in the landlab.components.detachment_ltd_erosion folder.
- Parameters:
grid (RasterModelGrid) – A landlab grid.
k_e (float) – Erodibility parameter, (m^(1+a_exp)*s^(2*a_exp-1)/kg^a_exp)
fluid_density (float, optional) – Density of fluid, default set to water density of 1000 kg / m^3
g (float, optional) – Acceleration due to gravity (m/s^2).
a_exp (float, optional) – exponent on shear stress, positive, unitless
tau_crit (float, optional) – threshold for sediment movement, (kg/m/s^2)
uplift_rate (float, optional) – uplift rate applied to the topographic surface, m/s
slope (str) – Field name of an at-node field that contains the slope.
- __init__(grid, k_e=0.001, fluid_density=1000.0, g=scipy.constants.g, a_exp=1.0, tau_crit=0.0, uplift_rate=0.0, slope='topographic__slope')[source]¶
Calculate detachment limited erosion rate on nodes using the shear stress equation, solved using the depth slope product.
Landlab component that generalizes the detachment limited erosion equation, primarily to be coupled to the the Landlab OverlandFlow component.
This component adjusts topographic elevation and is contained in the landlab.components.detachment_ltd_erosion folder.
- Parameters:
grid (RasterModelGrid) – A landlab grid.
k_e (float) – Erodibility parameter, (m^(1+a_exp)*s^(2*a_exp-1)/kg^a_exp)
fluid_density (float, optional) – Density of fluid, default set to water density of 1000 kg / m^3
g (float, optional) – Acceleration due to gravity (m/s^2).
a_exp (float, optional) – exponent on shear stress, positive, unitless
tau_crit (float, optional) – threshold for sediment movement, (kg/m/s^2)
uplift_rate (float, optional) – uplift rate applied to the topographic surface, m/s
slope (str) – Field name of an at-node field that contains the slope.
- static __new__(cls, *args, **kwds)¶
- cite_as = ''¶
- property coords¶
Return the coordinates of nodes on grid attached to the component.
- property current_time¶
Current time.
Some components may keep track of the current time. In this case, the
current_time
attribute is incremented. Otherwise it is set to None.- Return type:
current_time
- definitions = (('surface_water__depth', 'Depth of water on the surface'), ('topographic__elevation', 'Land surface topographic elevation'), ('topographic__slope', 'gradient of the ground surface'))¶
- property dz¶
Magnitude of change of the topographic__elevation due to erosion [L].
- classmethod from_path(grid, path)¶
Create a component from an input file.
- property grid¶
Return the grid attached to the component.
- initialize_optional_output_fields()¶
Create fields for a component based on its optional field outputs, if declared in _optional_var_names.
This method will create new fields (without overwrite) for any fields output by the component as optional. New fields are initialized to zero. New fields are created as arrays of floats, unless the component also contains the specifying property _var_type.
- initialize_output_fields(values_per_element=None)¶
Create fields for a component based on its input and output var names.
This method will create new fields (without overwrite) for any fields output by, but not supplied to, the component. New fields are initialized to zero. Ignores optional fields. New fields are created as arrays of floats, unless the component specifies the variable type.
- Parameters:
values_per_element (int (optional)) – On occasion, it is necessary to create a field that is of size (n_grid_elements, values_per_element) instead of the default size (n_grid_elements,). Use this keyword argument to acomplish this task.
- input_var_names = ('surface_water__depth', 'topographic__elevation')¶
- name = 'DepthSlopeProductErosion'¶
- optional_var_names = ('topographic__slope',)¶
- output_var_names = ('topographic__elevation',)¶
- run_one_step(dt)[source]¶
Erode into grid topography.
For one time step, this erodes into the grid topography using the water discharge and topographic slope.
The grid field ‘topographic__elevation’ is altered each time step.
- Parameters:
dt (float) – Time step.
- property shape¶
Return the grid shape attached to the component, if defined.
- unit_agnostic = True¶
- units = (('surface_water__depth', 'm'), ('topographic__elevation', 'm'), ('topographic__slope', '-'))¶
- classmethod var_definition(name)¶
Get a description of a particular field.
- Parameters:
name (str) – A field name.
- Returns:
A description of each field.
- Return type:
tuple of (name, *description*)
- classmethod var_help(name)¶
Print a help message for a particular field.
- Parameters:
name (str) – A field name.
- classmethod var_loc(name)¶
Location where a particular variable is defined.
- var_mapping = (('surface_water__depth', 'node'), ('topographic__elevation', 'node'), ('topographic__slope', 'node'))¶