SimpleSubmarineDiffuser: Calculate underwater sediment transport using water-depth-dependent diffusion#

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

Bases: LinearDiffuser

Transport marine sediment using a water-depth-dependent diffusion model.

This component models sediment transport as a diffusion process with a coefficient that depends on water depth \(h\) as follows:

\[D(h) = D_0 f_1(h) f_2(h)\]

Here \(D_0\) is the maximum value, corresponding to the input parameter shallow_water_diffusivity.

The function \(f_1(h)\) describes the decrease in transport efficiency below the wave base depth \(h_w\). It is defined as unity for depth above the wave base, and as

\[f_1(h) = \exp( -(h - h_w) / h_w)\]

for \(h > h_w\).

The function \(f_2(h)\) handles the transition in transport efficiency around the shoreline. If tidal_range, \(R_t\), is zero, then \(f_2\) is set to unity underwater (\(h \ge 0\)), and a tiny value above water (not zero, because that would cause a divide-by-zero error in the base class). If \(R_t > 0\), then a \(tanh\) function is used to model a smooth decrease in \(D\) from the low to high tide level:

\[f_2(h) = (\tanh ( -h / R_t) + 1) / 2\]

with an addition tiny value added to locations above water to avoid division by zero.

Examples

>>> from landlab import RasterModelGrid
>>> from landlab.components import SimpleSubmarineDiffuser
>>> grid = RasterModelGrid((3, 7), xy_spacing=100.0)
>>> grid.set_closed_boundaries_at_grid_edges(False, True, False, True)
>>> topo = grid.add_zeros('topographic__elevation', at='node')
>>> topo[:] = -10.0
>>> topo[9:14] = [0., 10., 10., 5., 5.]
>>> ssd = SimpleSubmarineDiffuser(grid, tidal_range=0.0)
>>> ssd.run_one_step(dt=5.0)
>>> topo[8:13]
array([ -9.5,   0. ,   9.5,  10. ,   5. ])
>>> grid.at_node["sediment_deposit__thickness"][8:13]
array([ 0.5,  0. , -0.5,  0. ,  0. ])
Parameters
  • grid (ModelGrid (RasterModelGrid, HexModelGrid, etc.)) – A landlab grid.

  • sea_level (float, optional) – The current sea level (m) (default 0)

  • wave_base (float, optional) – Wave base (m) (default 60)

  • shallow_water_diffusivity (float, optional) – Diffusivity coefficient for shallow water (m2 / y) (default 100)

  • tidal_range (float, optional) – Tidal range (m) (default 2)

__init__(grid, sea_level=0.0, wave_base=60.0, shallow_water_diffusivity=100.0, tidal_range=2.0, **kwds)[source]#
Parameters
  • grid (ModelGrid (RasterModelGrid, HexModelGrid, etc.)) – A landlab grid.

  • sea_level (float, optional) – The current sea level (m) (default 0)

  • wave_base (float, optional) – Wave base (m) (default 60)

  • shallow_water_diffusivity (float, optional) – Diffusivity coefficient for shallow water (m2 / y) (default 100)

  • tidal_range (float, optional) – Tidal range (m) (default 2)

calc_diffusion_coef()[source]#

Calculate and store diffusion coefficient values.

Returns

k – Diffusion coefficient, m2/y

Return type

float array

depth_function(water_depth)[source]#

Return weighting factor for transport.

If there is no tidal range, then the weight factor is 1 if at or below sea level, and 0 if above it. If there is a tidal range, then a tanh function is used to weight transport across mean sea level, so that there is some degree of transport for water depths within the tidal range (less above, more below). The nature of the tanh function is such that the transport is about 95% of its maximum value at a depth of 1.5x the mean tidal range, and 5% of its maximum value at a height of 1.5x the mean tidal range above mean sea level.

Parameters

water_depth (float array) – Depth of water relative to mean sea level (m) (can be negative)

Returns

df – Weight factor ranging from 0 to 1.

Return type

float array

run_one_step(dt)[source]#

Advance by one time step.

Parameters

dt (float) – Time-step duration (y)

property sea_level#
property shallow_water_diffusivity#
property time#
property wave_base#