Note
Go to the end to download the full example code.
Analytical solution of a dam-break problem on a dry slope with friction (Dressler)
This example presents the classical one-dimensional analytical solution proposed by Dressler (1952) for the dam-break problem on a dry, horizontal bed with friction.
Model Assumptions
Instantaneous dam break at position \(x = x_0\) and at time \(t = 0\).
The domain is initially dry for \(x > x_0\), with a finite volume of still water (with height \(h_l\)) on the left of the dam (\(0 < x \leq x_0\)).
The bed is flat and horizontal (no slope).
Basal friction is modeled via Chézy coefficient \(C\).
The fluid is incompressible, homogeneous, and only subject to gravity and basal friction.
Basic equations
As a reminder, the general formula of the Saint-Venant equation system is:
with:
\(h\) the fluid depth
\(u\) the fluid velocity
\(g\) the gravitational acceleration
\(\theta\) the surface slope
\(S\) source term
Here is equation 1 from Dressler (1952) with the same notation and in 1D:
with \(c = \sqrt{gh}\) and \(R\) being roughness coefficient.
By transforming these equations, we find the Saint-Venant equations:
with \(S = R \frac{u^2}{g}\) the source term integrating the dissipative effects due to friction.
In fluid simulation, hydraulic models can be used to express the source term \(S\). For example, we can cite an equation combining the Darcy-Weisbach and Manning laws:
where \(n\) is Manning coefficient (in \(s.m^{-1/3}\)).
By replacing the Manning coefficient with Chezy coefficient with the relation: \(n = \frac{h^{1/6}}{C}\), we obtain :
By identification, we can match the two expressions of the source term by applying \(R = \frac{g^2}{C^2}\).
Initial Conditions
where \(x_0\) is the initial dam location and \(h_l\) is the height of the water column.
Analytical Solution
The water height and velocity profiles for \(t > 0\) are given by:
\[\begin{split}h(x, t) = \begin{cases} h_0 & \text{if } x \leq x_A(t), \\\\ \frac{1}{g} \left( \frac{2}{3} \sqrt{g h_0} - \frac{x - x_0}{3t} + \frac{g^{2}}{C^2} \alpha_1 t \right)^2 & \text{if } x_A(t) < x \leq x_t(t), \\\\ \frac{-b-\sqrt{b^2 - 4 a (c-x(t))}}{2 a} & \text{if } x_t(t) < x \leq x_B(t), \\\\ 0 & \text{if } x_B(t) < x, \end{cases}\end{split}\]
with \(r = \left. \frac{dx}{dh} \right|_{h = h_t}\), \(c = x_B(t)\), \(a = \frac{r h_t + c - x_t}{h_t^2}\), \(b = r - 2 a h_t\). \(x_t\) and \(h_t\) being the position and the flow depth at the beginning of the tip area.
\[\begin{split}u(x,t) = \begin{cases} 0 & \text{if } x \leq x_A(t), \\\\ u_{co} = \frac{2\sqrt{g h_0}}{3} + \frac{2(x - x_0)}{3t} + \frac{g^2}{C^2} \alpha_2 t & \text{if } x_A(t) < x \leq x_t(t), \\\\ \max_{x \in [x_A(t), x_t(t)]} u_{co}(x, t) & \text{if } x_t(t) < x \leq x_B(t), \\\\ 0 & \text{if } x_B(t) < x, \end{cases}\end{split}\]
where the positions of the rarefaction wave front and the dry front are:
\[\begin{split}\begin{cases} x_A(t) = x_0 - t \sqrt{g h_l}, \\\\ x_B(t) = x_0 + 2 t \sqrt{g h_l} \end{cases}\end{split}\]
The position of the tip area \(x_t(t)\) is defined by following the method proposed in SWASHES, i.e. by taking the position where the velocity \(u(x, t)\) reaches the maximum. In the tip region, the velocity is uniform, but there is no information concerning the flow depth. In order to have an idea of the water height, a second order interpolation is used between \(x_t(t)\) and \(x_B(t)\).
To take into account the Chézy coefficient in the flow simulation, corrective terms \(\alpha_1\) and \(\alpha_2\) are added to the equations:
\[\begin{split}\begin{cases} \xi = \frac{x-x_0}{t\sqrt{g h_l}}, \\\\ \alpha_1(\xi) = \frac{6}{5(2-\xi)} - \frac{2}{3} + \frac{4 \sqrt{3}}{135} (2-\xi)^{3/2}), \\\\ \alpha_2(\xi) = \frac{12}{2-(2-\xi)} - \frac{8}{3} + \frac{8 \sqrt{3}}{189} (2-\xi)^{3/2}) - \frac{108}{7(2 - \xi)} \end{cases}\end{split}\]
Implementation
First import required packages and define the spatial domain for visualization. For following examples we will use a 1D space from -500 to 700 m.
import numpy as np
from tilupy.analytic_sol import Dressler_dry
x = np.linspace(-500, 700, 1000)
Case: Dressler’s solution with dam at \(x_0 = 0 m\), initial height \(h_l = 6 m\) and Chézy coefficient \(C = 40\).
case = Dressler_dry(x_0=0, h_0=6, C=40)
Compute and plot fluid height at times \(t = {0, 10, 20, 30, 40} s\).
case.compute_h(x, T=[0, 10, 20, 30, 40])
ax = case.plot(show_h=True, linestyles=["", ":", "-.", "--", "-"])
![Flow height for t=[0, 10, 20, 30, 40]](../../_images/sphx_glr_plot_as_h_u_dressler_001.png)
Plot fluid velocity at times \(t = {0, 10, 20, 30, 40} s\).
ax = case.plot(show_u=True, linestyles=["", ":", "-.", "--", "-"])
![Flow velocity for t=[0, 10, 20, 30, 40]](../../_images/sphx_glr_plot_as_h_u_dressler_002.png)
Original reference:
Delestre, O., Lucas, C., Ksinant, P.‑A., Darboux, F., Laguerre, C., Vo, T.‑N.‑T., James, F. & Cordier, S., 2013, SWASHES: a compilation of shallow water analytic solutions for hydraulic and environmental studies, International Journal for Numerical Methods in Fluids, v. 72(3), p. 269–300, doi:10.1002/fld.3741.
Dressler, R.F., 1952, Hydraulic resistance effect upon the dam‑break functions, Journal of Research of the National Bureau of Standards, vol. 49(3), p. 217–225.
Total running time of the script: (0 minutes 0.120 seconds)