Test line-sinks with image wells#
import matplotlib.pyplot as plt
import numpy as np
import timflow.transient as tft
Consider a well pumping in a phreatic aquifer with \(S_y=0.1\). The hydraulic conductivity of the aquifer is 10 m/d and the saturated thickness may be approximated as constant and equal to 20 m. The well is located at \((x,y)=(0,0)\). The discharge of the well is 1000 m\(^3\)/d and the radius is 0.3 m. there is a very long river with a fixed head located along the line \(x=50\) m. The head is computed at \((x,y)=(20,0)\) for the first 20 days after the well starts pumping. The solution for an image well is compared to the solution using a RiverString element of different lengths.
ml1 = tft.ModelMaq(kaq=10, z=[20, 0], Saq=[0.1], phreatictop=True, tmin=0.001, tmax=100)
w1 = tft.Well(ml1, 0, 0, rw=0.3, tsandQ=[(0, 1000)])
w2 = tft.Well(ml1, 100, 0, rw=0.3, tsandQ=[(0, -1000)])
ml1.solve()
t = np.linspace(0.1, 20, 100)
h1 = ml1.head(20, 0, t)
plt.plot(t, h1[0], label="river modeled with image well")
plt.xlabel("time (d)")
plt.ylabel("head (m)");
self.neq 2
solution complete
plt.plot(t, h1[0], label="river modeled with image well")
for ystart in [-50, -100]:
ml2 = tft.ModelMaq(
kaq=10, z=[20, 0], Saq=[0.1], phreatictop=True, tmin=0.001, tmax=100
)
w = tft.Well(ml2, 0, 0, rw=0.3, tsandQ=[(0, 1000)])
yls = np.arange(ystart, -ystart + 1, 20)
xls = 50 * np.ones(len(yls))
lss = tft.RiverString(ml2, xy=list(zip(xls, yls, strict=False)), tsandh="fixed")
ml2.solve()
h2 = ml2.head(20, 0, t)
plt.plot(t, h2[0], "--", label=f"line-sink string from {ystart} to {-ystart}")
plt.title("head at (x,y)=(20,0)")
plt.xlabel("time (d)")
plt.ylabel("head (m)")
plt.legend();
self.neq 6
solution complete
self.neq 11
solution complete
The solution is repeated for the case where there is a long impermeable wall along \(x=50\) m rather than a river.
ml1 = tft.ModelMaq(kaq=10, z=[20, 0], Saq=[0.1], phreatictop=True, tmin=0.001, tmax=100)
w1 = tft.Well(ml1, 0, 0, rw=0.3, tsandQ=[(0, 1000)])
w2 = tft.Well(ml1, 100, 0, rw=0.3, tsandQ=[(0, 1000)])
ml1.solve()
t = np.linspace(0.1, 20, 100)
h1 = ml1.head(20, 0, t)
plt.plot(t, h1[0], label="impermeable wall modeled with image well")
plt.xlabel("time (d)")
plt.ylabel("head (m)");
self.neq 2
solution complete
plt.plot(t, h1[0], label="river modeled with image well")
for ystart in [-100, -200, -400]:
ml2 = tft.ModelMaq(
kaq=10, z=[20, 0], Saq=[0.1], phreatictop=True, tmin=0.001, tmax=100
)
w = tft.Well(ml2, 0, 0, rw=0.3, tsandQ=[(0, 1000)])
yls = np.arange(ystart, -ystart + 1, 20)
xls = 50 * np.ones(len(yls))
lss = tft.LeakyWallString(ml2, xy=list(zip(xls, yls, strict=False)), res="imp")
ml2.solve()
h2 = ml2.head(20, 0, t)
plt.plot(t, h2[0], "--", label=f"line-doublet string from {ystart} to {-ystart}")
plt.title("head at (x,y)=(20,0)")
plt.xlabel("time (d)")
plt.ylabel("head (m)")
plt.legend();
self.neq 11
solution complete
self.neq 21
solution complete
self.neq 41
solution complete