Shallow water model

The ShallowWaterModel solves the shallow water dynamics for a fluid of constant density but with varying fluid depth $h(x, y, t)$. The dynamics for the evolution of the two-dimensional flow $\boldsymbol{u}(x, y, t) = u(x, y, t) \boldsymbol{\hat x} + v(x, y, t) \boldsymbol{\hat y}$ and the fluid's height $h(x, y, t)$ is:

\[ \begin{align} \partial_t \boldsymbol{u} + \boldsymbol{u} \boldsymbol{\cdot} \boldsymbol{\nabla} \boldsymbol{u} + \boldsymbol{f} \times \boldsymbol{u} & = - g \boldsymbol{\nabla} h \, ,\\ \partial_t h + \boldsymbol{\nabla} \boldsymbol{\cdot} \left ( \boldsymbol{u} h \right ) & = 0 \, . \end{align}\]

Using the transport along each direction $\boldsymbol{u} h$ as our dynamical variables, we can express the shallow-water dynamics in conservative form:

\[ \begin{align} \partial_t (\boldsymbol{u} h) + \boldsymbol{\nabla} \boldsymbol{\cdot} \left ( \boldsymbol{u} \boldsymbol{u} h \right ) + \boldsymbol{f} \times (\boldsymbol{u} h) & = - g \boldsymbol{\nabla} \left ( \frac1{2} h^2 \right ) \, ,\\ \partial_t h + \boldsymbol{\nabla} \boldsymbol{\cdot} (\boldsymbol{u} h) & = 0 \, , \end{align}\]

where $\boldsymbol{\nabla} \boldsymbol{\cdot} \left ( \boldsymbol{u} \boldsymbol{u} h \right )$ denotes a vector whose components are $[\boldsymbol{\nabla} \boldsymbol{\cdot} (\boldsymbol{u} \boldsymbol{u} h)]_i = \boldsymbol{\nabla} \boldsymbol{\cdot} (u_i \boldsymbol{u} h)$.

The ShallowWaterModel state variables are the transports, uh and vh and the fluid's height h. We can retrieve the flow velocities by dividing the corresponding transport by the fluid's height, e.g., v = vh / h.