A solution, which shows the deline of the head in a strip due to bleeding to the fixed heads at both ends.
To make sure that both reflex decay of an initial head of $a$ above the fixed heads at $x \pm L/2 = b$, we have to subtract the sudden head solutions from the initial head $a$
In [3]:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import erfc
In [4]:
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 [5]:
# Aquifer
kD = 600 # m2/d
S = 0.1 # [-]
# Size of strip of land
L = 150 # m (strip width)
b =L/2 # [m] half width of strip
# Chosing coordinates inside the strip of land
x = np.linspace(-L/2, L/2, 201) # points, taking left at zero.
a = 1.0 # m, sudden head change at x = -L/2
times = np.linspace(0, 0.5, 11) #
times[0] = 1e-6 # prevent division by zero
In [8]:
ax = newfig('Symmetric solution for head decay in strip', 'x [m]', 'head [h]', xlim=(-b, b))
for t in times:
h = np.zeros_like(x)
for j in range(1,20):
h += a * 4 / np.pi * ((-1)**(j-1) / (2 * j - 1) *
np.cos((2 * j - 1) * np.pi / 2 * x / b) *
np.exp(- (2 * j - 1)**2 * (np.pi / 2)**2 * kD /(b**2 * S) * t))
ax.plot(x, h, label='t={:.1f}'.format(t))
ax.legend()
Out[8]:
As can be seen, we did not compute enough terms in the series to remove the waves in the first graph. It can be solved by taking more terms or by choosing a somewhat later first time. Just change the value in the loop (20) to for instance 200 to see the effect.
In [19]:
t = 0.02 # d
ax = newfig(f'Individual terms at t = {t:.1f} d', 'x [m]', 'head [h]', xlim=(-b, b))
t = 0.001
H = np.zeros_like(x)
for j in range(1,10):
h = a * 4 / np.pi * ((-1)**(j-1) / (2 * j - 1) *
np.cos((2 * j - 1) * np.pi / 2 * x / b) *
np.exp(- (2 * j - 1)**2 * (np.pi / 2)**2 * kD /(b**2 * S) * t))
ax.plot(x, h, label=f'term[{j:}]')
H += h
ax.plot(x, H, lw=3, label=f'sum, t={t:.2f} d')
ax.legend()
Out[19]:
This example shows how the final result is being built up from the consines, that are at ever higher frequency and ever larger damping. For larger values of $t$, only the first term will still matter. It can also be seen that the sum of the 9 terms is still wavy, so that more terms are needed to get the true result at time $t$.
At the left and right edgte, all cosines add up to yield the steep head near the boundaries of the strip.
In [ ]: