355.19: Drainage canal on top of confined aquifer#

Drainage canal on top of a confined aquifer of finite thickness near an open boundary.

Constant drawdown of the water level in the canal.

import matplotlib.pyplot as plt
import numpy as np

from bruggeman.flow2d import bruggeman_355_19, bruggeman_355_19_total_discharge

View the function.

bruggeman_355_19
\[\begin{split} \begin{aligned} \zeta &= x + i z \\ w &= \frac{\tanh{\left(\frac{\pi \zeta}{2 D} \right)}}{\tanh{\left(\frac{\pi \left(- B + L\right)}{2 D} \right)}} \\ m &= \frac{\tanh^{2}{\left(\frac{\pi \left(- B + L\right)}{2 D} \right)}}{\tanh^{2}{\left(\frac{\pi \left(B + L\right)}{2 D} \right)}} \\ \omega{\left(x,z,L,B,h,k,D \right)} &= \frac{h k F{\left(\operatorname{asin}{\left(w \right)},m \right)}}{K{\left(m \right)}} \\ \end{aligned} \end{split}\]

View the docstring to get a description of the input parameters

help(bruggeman_355_19)
Help on function bruggeman_355_19 in module bruggeman.flow2d:

bruggeman_355_19(x: float, z: float, L: float, B: float, h: float, k: float, D: float) -> float
    Drainage canal on a confined aquifer of finite thickness near open boundary.

    Constant drawdown of the water level in the canal.

    Parameters
    ----------
    x : float or np.ndarray
        distance from open boundary [L]
    z : float or np.ndarray
        depth below the top of the aquifer [L]
    L : float
        distance from open boundary to the middle of the canal [L]
    B : float
        half-width of the canal [L]
    h : float
        drawdown in the canal [L]
    k : float
        hydraulic conductivity of the aquifer [L/T]
    D : float
        thickness of the aquifer [L]

    Returns
    -------
    omega :
        complex potential at (x, z)

Define some aquifer parameters.

L = 20  # m
B = 5  # m
h = 1  # m
k = 10  # m/d
D = 20  # m

Compute the solution.

nx, nz = 100, 100
x, z = np.meshgrid(np.linspace(0, 2 * L, nx), np.linspace(0, D, nz))
om = np.zeros((nz, nx), dtype="complex")
for i in range(nx):
    for j in range(nz):
        om[i, j] = bruggeman_355_19(x[i, j], z[i, j], L, B, h, k, D)

Plot the result.

plt.subplot(111, aspect=1)
plt.contour(x, z, om.real, np.arange(0, 10, 0.5), colors="C0")
plt.contour(x, z, om.imag, np.arange(0, 10, 0.5), colors="C1")
plt.ylim(20, 0)  # z-axis is positive down
plt.axvspan(L - B, L + B, 0, 20, color="lightgrey");
../_images/e2ef53da7a17d2f09dd6428a4ea856a44f6ff05f7320bf43e0e9389b2b7d07a4.png

Compute the total discharge:

bruggeman_355_19_total_discharge
\[\displaystyle q = \frac{h k K{\left(- \frac{\tanh^{2}{\left(\frac{\pi \left(- B + L\right)}{2 D} \right)}}{\tanh^{2}{\left(\frac{\pi \left(B + L\right)}{2 D} \right)}} + 1 \right)}}{K{\left(\frac{\tanh^{2}{\left(\frac{\pi \left(- B + L\right)}{2 D} \right)}}{\tanh^{2}{\left(\frac{\pi \left(B + L\right)}{2 D} \right)}} \right)}}\]
q = bruggeman_355_19_total_discharge(L, B, h, k, D)
print(f"Total discharge: {float(q):.2f} m^2/d")
Total discharge: 7.91 m^2/d