In [2]:
# import required modules / functionality
import numpy as np # for numerical stuff and arrays
import matplotlib.pyplot as plt # for visualization
import scipy.special as sp # scipy.special hold the less usual mathematical functions
In [14]:
def newfig(title='?', xlabel='?', ylabel='?', xlim=None, ylim=None,
xscale='linear', yscale='linear', size_inches=(14, 8)):
'''Setup a new axis for plotting'''
fig, ax = plt.subplots()
fig.set_size_inches(size_inches)
ax.set_title(title)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_xscale(xscale)
ax.set_yscale(yscale)
if xlim is not None: ax.set_xlim(xlim)
if ylim is not None: ax.set_ylim(ylim)
ax.grid(True)
return ax
In [3]:
# Aquifer properties
kD = 100 # m2/d
S = 0.2 # [-]
A = 5 # m, the sudden drop of head in the canal
How much water will flow into the canal from its sides during the first day, the first week, the first month and during 6 weeks after the sudden lowering of its stage by 5 m?
The transient flow solution that applies to this situation is
$$ s = A \, \mbox{erfc} ( u) = A \frac {2} {\sqrt \pi} \intop_u^\infty e^{-y^2} dt $$$$ u = \sqrt{\frac {x^2 S} {4 kD t}} $$The discharge anywhere in the aquifer then is
$$ Q = -kD \frac {\partial s} {\partial x} $$so that, applying the derivative of $s$ with respect to $x$ and multiplying by $-kD$ yields
$$ Q = A \sqrt{ \frac {kD S} {\pi t}} \exp \left( -u^2 \right)$$Then, at $x=0$, we find
$$ Q = A \sqrt{ \frac {kD S} {\pi t}}$$The extracted volume from one side since $t=0$ is, therefore,
$$ V = \intop_0^t Q dt = A \sqrt {\frac {4 kD S t} {\pi} } $$
In [7]:
times = [1, 7, 30, 42] # days
print('The total volume drained after t days (from one side) per m of shore is:')
for t in times:
V = A * np.sqrt(4 * kD * S * t / np.pi)
#print('t =', t, 'd, V =', V, 'm3/m')
print(f't = {t:4.0f} d, V = {V:6.1f} m3/m')
In [15]:
# Show the result graphically
times = np.linspace(0, 42, 100)
ax = newfig(title='Total volume drained [m3/m]', xlabel='t [d]', ylabel='m3/m')
ax.plot(times, A * np.sqrt(4 * kD * S * times / np.pi))
Out[15]:
In [22]:
# We'll use the same aquifer parameters as before, so they don't have to be repeated here.
x = [10, 100, 300, 1000] # [m] distances at which drawdown is desired
times = np.linspace(0, 7 * 6, 7 * 6 * 12 + 1) # d (6 weeks, one point every 2 hours)
times[0] = 1e-6 # prevent division by zero
ax = newfig(title=f'Drawdown over time for several x values; kD={kD:.0f} m2/d, S={S:.3f} [_], A={A:.1f} m',
xlabel='time [d]', ylabel='drawdown s [m]')
for xi in x:
ax.plot(times, A * sp.erfc(np.sqrt(xi ** 2 * S / (4 * kD * times))), label=f'x = {xi:.0f} m')
ax.legend()
Out[22]:
Wat is the ratio between the amount of groundwater extracted in 6 weeks compared to the amount of water in the 20 m wide canal?
From the ground we have from two sides
$$ V = 2 \, A \sqrt {\frac {4 kD S t} {\pi} } $$The volume in the canal is
$$ V_{canal} = A w $$with $w$ the canal width.
Hence
$$ \frac {V_{canal}} {V_{grw} } = \frac {w \sqrt{\pi}} {2 \sqrt{4 kD S t}}$$
In [25]:
w = 20 # m, width of canal
t = 42 # d
# V_c over V is the ratio of the water from the canal over that from the ground
V_c_over_V = w * np.sqrt(np.pi) / (2 * np.sqrt(4 * kD * S *t))
print(f'V_c over V after {t:.0f} days = {V_c_over_V:.0%}')
In [ ]: