TidalFlowCalculator: Calculate cycle-averaged tidal flow velocity using method of Mariotti (2018)#

Calculate cycle-averaged tidal flow field using approach of Mariotti (2018)

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

Bases: Component

Component that calculates average flow over a tidal cycle.

The TidalFlowCalculator component calculates a tidal flow velocity field on a grid using the method of Mariotti et al. (2018). The grid can be raster or hex. In essence, the method uses a numerical solution to the steady diffusion equation. The resulting velocity fields—one for flood tide, and on for ebb tide—represent the average velocity over a tidal half-cycle. Velocity is obtained by starting with the total depth of water that is added or removed during flood tide or ebb tide, respectively, at each grid point. The idea is to solve for the water-surface elevation field that produces this total inflow or outflow of water at each point, using a linear approximation for shallow-water flow. The math is given in Mariotti (2018), and is summarized below.

Tidal-averaged water depth: with z as bed surface elevation, and r as tidal range, the water depth h is:

\[h = [\max(0, r/2 − z) + \max(0, −r/2 − z)]/2\]

Horizontal flow velocity (2d vector): with \(\eta\) as water-surface elevation, n as Manning roughness, and \(\chi\) as a scale velocity (here unity), depth-averaged flow velocity U is:

\[U = \frac{h^{4/3}}{n^2\chi} \nabla \eta\]

Tidal inundation / drainage rate, I: at any given point, this is the depth of water added (flood tide) or drained (ebb tide) divided by the tidal half period, T/2. It is defined as:

\[I = [r/2 − \max(−r/2, \min(z, r/2))] / (T/2)\]

Mass conservation:

\[\nabla \cdot (h U) = I\]

Because h is assumed constant, this becomes a steady diffusion equation:

\[\nabla^2 \eta = \frac{I n^{4/3} \chi}{h^{7/3}}\]

This is a Poisson (steady diffusion) equation, which is solved numerically at grid nodes using a finite-volume method. The water-surface gradient is then used to calculate the velocity field, using the above equation for U.

Parameters:
  • grid (RasterModelGrid or HexModelGrid) – A Landlab grid object.

  • tidal_range (float, optional) – Tidal range (2x tidal amplitude) (m) (default 1)

  • tidal_period (float, optional) – Tidal perioid (s) (default M2 tidal period = 12 h 25 min)

  • roughness (float, array, or field name; optional) – Manning roughness coefficient (“n”) (s/m^1/3) (default 0.01)

  • mean_sea_level (float, optional) – Mean sea level (m) (default 0)

  • scale_velocity (float, optional) – Scale velocity (see Mariotti, 2018) (m/s) (default 1)

  • min_water_depth (float, optional) – Minimum depth for calculating diffusion coefficient (m) (default 0.01)

Examples

>>> from landlab import RasterModelGrid
>>> from landlab.components import TidalFlowCalculator
>>> grid = RasterModelGrid((3, 5), xy_spacing=2.0)  # 1 row core nodes
>>> grid.set_closed_boundaries_at_grid_edges(False, True, True, True)
>>> z = grid.add_zeros("topographic__elevation", at="node")
>>> z[:] = -50.0  # mean water depth is 50 m below MSL
>>> tfc = TidalFlowCalculator(
...     grid, tidal_range=2.0, tidal_period=4.0e4, roughness=0.01
... )
>>> tfc.run_one_step()
>>> int(round(grid.at_link["ebb_tide_flow__velocity"][10] * 1.0e6))
4

References

Mariotti, G. (2018) Marsh channel morphological response to sea level rise and sediment supply. Estuarine, Coastal and Shelf Science, 209, 89–101, https://doi.org/10.1016/j.ecss.2018.05.016.

Initialize TidalFlowCalculator.

__init__(grid, tidal_range=1.0, tidal_period=44712.0, roughness=0.01, mean_sea_level=0.0, scale_velocity=1.0, min_water_depth=0.01)[source]#

Initialize TidalFlowCalculator.

calc_tidal_inundation_rate()[source]#

Calculate and store the rate of inundation/draining at each node, averaged over a tidal half-cycle.

Examples

>>> grid = RasterModelGrid((3, 5))
>>> z = grid.add_zeros("topographic__elevation", at="node")
>>> z[5:10] = [10.0, 0.25, 0.0, -0.25, -10.0]
>>> period = 4.0e4  # tidal period in s, for convenient calculation
>>> tfc = TidalFlowCalculator(grid, tidal_period=period)
>>> rate = tfc.calc_tidal_inundation_rate()
>>> 0.5 * rate[5:10] * period  # depth in m
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
>>> rate[5:10]  # rate in m/s
array([  0.00000000e+00,   1.25000000e-05,   2.50000000e-05,
          3.75000000e-05,   5.00000000e-05])

Notes

This calculates I in Mariotti (2018) using his equation (1).

property mean_sea_level#

Mean sea level.

property roughness#

Roughness coefficient (Manning’s n).

run_one_step()[source]#

Calculate the tidal flow field and water-surface elevation.

property tidal_period#

Tidal period.

property tidal_range#

Tidal range.