DepthDependentDiffuser: depth dependent diffusion after Johnstone and Hilley (2014)#

class DepthDependentDiffuser(*args, **kwds)[source]#

Bases: Component

This component implements a depth and slope dependent linear diffusion rule in the style of Johnstone and Hilley (2014).

Hillslope sediment flux uses depth dependent component inspired by Johnstone and Hilley (2014). The flux \(q_s\) is given as:

\[q_s = - D S H^* (1.0 - exp( - H / H^*)\]

where \(D\) is is the diffusivity, \(S\) is the slope (defined as negative downward), \(H\) is the soil depth on links, and \(H^*\) is the soil transport decay depth.

This component will ignore soil thickness located at non-core nodes.

Examples

>>> import numpy as np
>>> from landlab import RasterModelGrid
>>> from landlab.components import ExponentialWeatherer
>>> from landlab.components import DepthDependentDiffuser
>>> mg = RasterModelGrid((5, 5))
>>> soilTh = mg.add_zeros("soil__depth", at="node")
>>> z = mg.add_zeros("topographic__elevation", at="node")
>>> BRz = mg.add_zeros("bedrock__elevation", at="node")
>>> expweath = ExponentialWeatherer(mg)
>>> DDdiff = DepthDependentDiffuser(mg)
>>> expweath.calc_soil_prod_rate()
>>> np.allclose(mg.at_node["soil_production__rate"][mg.core_nodes], 1.0)
True
>>> DDdiff.run_one_step(2.0)
>>> np.allclose(mg.at_node["topographic__elevation"][mg.core_nodes], 0.0)
True
>>> np.allclose(mg.at_node["bedrock__elevation"][mg.core_nodes], -2.0)
True
>>> np.allclose(mg.at_node["soil__depth"][mg.core_nodes], 2.0)
True

Now with a slope:

>>> mg = RasterModelGrid((3, 5))
>>> soilTh = mg.add_zeros("soil__depth", at="node")
>>> z = mg.add_zeros("topographic__elevation", at="node")
>>> BRz = mg.add_zeros("bedrock__elevation", at="node")
>>> z += mg.node_x.copy()
>>> BRz += mg.node_x / 2.0
>>> soilTh[:] = z - BRz
>>> expweath = ExponentialWeatherer(mg)
>>> DDdiff = DepthDependentDiffuser(mg)
>>> expweath.calc_soil_prod_rate()
>>> np.allclose(
...     mg.at_node["soil_production__rate"][mg.core_nodes],
...     np.array([0.60653066, 0.36787944, 0.22313016]),
... )
True
>>> DDdiff.run_one_step(2.0)
>>> np.allclose(
...     mg.at_node["topographic__elevation"][mg.core_nodes],
...     np.array([1.47730244, 2.28949856, 3.17558975]),
... )
True
>>> np.allclose(
...     mg.at_node["bedrock__elevation"][mg.core_nodes],
...     np.array([-0.71306132, 0.26424112, 1.05373968]),
... )
True
>>> np.allclose(mg.at_node["soil__depth"], z - BRz)
True

Now, we’ll test that changing the transport decay depth behaves as expected.

>>> mg = RasterModelGrid((3, 5))
>>> soilTh = mg.add_zeros("soil__depth", at="node")
>>> z = mg.add_zeros("topographic__elevation", at="node")
>>> BRz = mg.add_zeros("bedrock__elevation", at="node")
>>> z += mg.node_x.copy() ** 0.5
>>> BRz = z.copy() - 1.0
>>> soilTh[:] = z - BRz
>>> expweath = ExponentialWeatherer(mg)
>>> DDdiff = DepthDependentDiffuser(mg, soil_transport_decay_depth=0.1)
>>> DDdiff.run_one_step(1)
>>> soil_decay_depth_point1 = mg.at_node["topographic__elevation"][mg.core_nodes]
>>> z[:] = 0
>>> z += mg.node_x.copy() ** 0.5
>>> BRz = z.copy() - 1.0
>>> soilTh[:] = z - BRz
>>> DDdiff = DepthDependentDiffuser(mg, soil_transport_decay_depth=1.0)
>>> DDdiff.run_one_step(1)
>>> soil_decay_depth_1 = mg.at_node["topographic__elevation"][mg.core_nodes]
>>> np.greater(soil_decay_depth_1[1], soil_decay_depth_point1[1])
False

References

Required Software Citation(s) Specific to this Component

Barnhart, K., Glade, R., Shobe, C., Tucker, G. (2019). Terrainbento 1.0: a Python package for multi-model analysis in long-term drainage basin evolution. Geoscientific Model Development 12(4), 1267–1297. https://dx.doi.org/10.5194/gmd-12-1267-2019

Additional References

Johnstone, S., Hilley, G. (2015). Lithologic control on the form of soil-mantled hillslopes Geology 43(1), 83-86. https://doi.org/10.1130/G36052.1

Parameters:
  • grid (ModelGrid) – Landlab ModelGrid object

  • linear_diffusivity (float) – Hillslope diffusivity, m**2/yr

  • soil_transport_decay_depth (float) – Characteristic transport soil depth, m

__init__(grid, linear_diffusivity=1.0, soil_transport_decay_depth=1.0)[source]#
Parameters:
  • grid (ModelGrid) – Landlab ModelGrid object

  • linear_diffusivity (float) – Hillslope diffusivity, m**2/yr

  • soil_transport_decay_depth (float) – Characteristic transport soil depth, m

run_one_step(dt)[source]#
Parameters:

dt (float (time)) – The imposed timestep.

soilflux(dt)[source]#

Calculate soil flux for a time period ‘dt’.

Parameters:

dt (float (time)) – The imposed timestep.