Peano
Loading...
Searching...
No Matches
Shallow Water

The shallow water equations (Saint-Venant) are a common (d−1) approximation to the d–dimensional Navier-Stokes equations to model incompressible, free surface flows:

\begin{eqnarray*} \frac{\partial}{\partial t} \begin{pmatrix} h\\hu\\hv \end{pmatrix} + \frac{\partial}{\partial x} \begin{pmatrix} hu\\hu^2 + \frac{1}{2} \cdot gh^2\\huv \end{pmatrix} + \frac{\partial}{\partial y} \begin{pmatrix} hv\\huv\\hv^2 + \frac{1}{2} \cdot gh^2 \end{pmatrix} + \begin{pmatrix} 0\\ghb_x\\ghb_y \end{pmatrix} = \begin{pmatrix} 0\\0\\0 \end{pmatrix} \end{eqnarray*}

With \( b(x, y) \) being the bathymetry measured from a reference \( D \) (normal sea level, negative below, positive above), \( h(x, y, t) \) being the total positive water depth and \( g \) the earth's gravitational acceleration set to \( 9.81ms^{-2} \). The two velocities \( u(x, y, t) \) and \( v(x, y, t) \) are the velocities in x- and y-dimension respectively.

Eigenvalues

The eigenvalues (wave speeds) in x-dimension are given by:

\begin{eqnarray*} \lambda_{x_1} = u, \lambda_{x_2,_3} = u \pm \sqrt{gh} \end{eqnarray*}

And in y-dimension by:

\begin{eqnarray*} \lambda_{y_1} = v, \lambda_{y_2,_3} = v \pm \sqrt{gh} \end{eqnarray*}

The respective derivations of the various aspects of the shallow water equations can be found in "Shock-Capturing Methods for Free-Surface Shallow Flows" by E.F. Toro (2001).

Flux

The two fluxes in x- and y-dimension respectively are given by:

\begin{eqnarray*} F(U) = \begin{pmatrix} hu\\hu^2 + \frac{1}{2} \cdot gh^2\\huv \end{pmatrix} \end{eqnarray*}

\begin{eqnarray*} G(U) = \begin{pmatrix} hv\\huv\\hv^2 + \frac{1}{2} \cdot gh^2 \end{pmatrix} \end{eqnarray*}

Bed Slope Term

The bed slope term

\begin{eqnarray*} \begin{pmatrix} 0\\ghb_x\\ghb_y \end{pmatrix} \end{eqnarray*}

is implemented as a non-conservative product.

How to Build and Run

For a general overview and all options on how to retrieve and configure the project, refer to Installation. We require the NetCDF library.

Using CMake

cd myPeanoDirectory
pip3 install -e .
mkdir build && cd build
CC=gcc CXX=g++ cmake .. -DENABLE_EXAHYPE=ON -DENABLE_LOADBALANCING=ON -DENABLE_BLOCKSTRUCTURED=ON -DWITH_MULTITHREADING=omp -DWITH_NETCDF=ON
make -j && make test
cd ../applications/exahype2/shallow-water/scenario/
python3 scenario.py

Using Automake

cd myPeanoDirectory
pip3 install -e .
export NETCDF_INCLUDE_DIR=$(pkg-config --cflags-only-I netcdf)
export NETCDF_LIBRARY_DIR=$(pkg-config --libs-only-L --libs-only-l netcdf)
libtoolize; aclocal; autoconf; autoheader; cp src/config.h.in .; automake --add-missing
CC=gcc CXX=g++ ./configure --enable-exahype --enable-loadbalancing --enable-blockstructured --with-multithreading=omp --with-netcdf CXXFLAGS="-std=c++20 -O3 -fopenmp -Wno-attributes $NETCDF_INCLUDE_DIR" LDFLAGS="-fopenmp $NETCDF_LIBRARY_DIR"
make -j && make check
cd applications/exahype2/shallow-water/scenario/
python3 scenario.py

Where CC=gcc CXX=g++ can be any set of compilers.

Visualise the Simulation Output

python3 myPeanoDirectory/python/peano4/visualisation/render.py solutions/solution-.peano-patch-file

Scenarios

Validation Cases

Tsunamis

Landslides