Wells in different systems#

import matplotlib.pyplot as plt
import numpy as np

import timflow.transient as tft

plt.rcParams["font.size"] = 8.0
plt.rcParams["figure.figsize"] = (8, 3)
T = 500  # transmissivity
S = 1e-4
t = np.logspace(-2, 2, 101)
r = 20
Q = 1000

Regular Theis well#

ml = tft.ModelMaq(kaq=25, z=[20, 0], Saq=S / 20, tmin=0.01, tmax=100)
w = tft.DischargeWell(ml, tsandQ=[(0, Q)], rw=1e-5)
ml.solve()
h1 = ml.head(r, 0, t)
self.neq  0
No unknowns. Solution complete

Hantush for several different \(c\) values#

clist = [1e2, 1e3, 1e4]
hhantush = np.zeros((len(clist), len(t)))
for i, c in enumerate(clist):
    ml = tft.ModelMaq(
        kaq=25, z=[21, 20, 0], c=c, Saq=S / 20, topboundary="semi", tmin=0.01, tmax=100
    )
    w = tft.DischargeWell(ml, tsandQ=[(0, Q)], rw=1e-5)
    ml.solve()
    hhantush[i] = ml.head(r, 0, t)[0]
self.neq  0
No unknowns. Solution complete
self.neq  0
No unknowns. Solution complete
self.neq  0
No unknowns. Solution complete
plt.semilogx(t, h1[0], label="Theis")
for i in range(3):
    plt.semilogx(t, hhantush[i], label="c=" + str(int(clist[i])))
plt.legend(loc="best")
plt.title("head at r=20")
plt.grid()
../../_images/d46481ea8b79b5b13167b898f60c7fb0ae18a7f143cc0857c43213652cbe7c4f.png

Two-aquifer system#

With same \(T\) in both layers and several different \(c\) values

clist = [1e2, 1e3, 1e4]
htwolayer = np.zeros((len(clist), len(t)))
for i, c in enumerate(clist):
    ml = tft.ModelMaq(
        kaq=[25, 25],
        z=[20, 0, -5, -25],
        c=c,
        Saq=S / 20,
        topboundary="conf",
        tmin=0.01,
        tmax=100,
    )
    w = tft.DischargeWell(ml, tsandQ=[(0, Q)], rw=1e-5)
    ml.solve()
    htwolayer[i] = ml.head(r, 0, t)[0]
self.neq  0
No unknowns. Solution complete
self.neq  0
No unknowns. Solution complete
self.neq  0
No unknowns. Solution complete
plt.semilogx(t, h1[0], label="Theis")
for i in range(3):
    plt.semilogx(t, htwolayer[i], label="c=" + str(int(clist[i])))
plt.legend(loc="best")
plt.title("head at r=20")
plt.grid()
../../_images/4d1a9fe58dd996200af985f4c0394941e3b647491d43559448070aaa4d5ab8d1.png

Model that starts at \(t=10\) days#

ml = tft.ModelMaq(kaq=25, z=[20, 0], Saq=S / 20, tmin=0.01, tmax=100, tstart=10)
w = tft.DischargeWell(ml, tsandQ=[(10, Q)], rw=1e-5)
ml.solve()
ht10 = ml.head(r, 0, t)
self.neq  0
No unknowns. Solution complete
plt.semilogx(t, ht10[0], label="time shifted in model")
plt.semilogx(t + 10, h1[0], "r--", label="time shifted by hand")
plt.legend(loc="best")
plt.title("note that heads are not computed at the same times")
plt.grid()
../../_images/5b25ed7e0938e09f01d4eb507ab53a051dfaf53700fdcfdee43583d3889f1e8f.png

Well with entry resistance#

k = 25  # m/d
H = 20  # m
Ss = 1e-4 / H  # m^(-1)
rw = 0.3  # m
res = 0.1  # d
Q = 500  # m^3/d
ml = tft.Model3D(kaq=k, z=np.linspace(H, 0, 6), Saq=Ss, tmin=0.001, tmax=10)
w = tft.Well(ml, tsandQ=[(0, Q)], rw=rw, res=res, layers=[0, 1, 2])
ml.solve()
self.neq  3
solution complete
hin = w.headinside(t=2)[:, 0]
hout = ml.head(rw, 0, t=2, layers=[0, 1, 2])[:, 0]
print("head inside well at t=2:     ", hin)
print("head just outside well at t=2", hout)
head inside well at t=2:      [-4.18893377 -4.18893379 -4.18893391]
head just outside well at t=2 [-2.01308248 -1.99455565 -1.92770747]
print("discharge of screens at t=2", w.discharge(2)[:, 0])
Qcheck = 2 * np.pi * rw * ml.aq.Haq[:3] * (hout - hin) / res
print("discharge from bc at t=2:  ", Qcheck)
discharge of screens at t=2 [164.05532251 165.45221423 170.49245686]
discharge from bc at t=2:   [164.05532251 165.45221423 170.49245686]

Well with different entry resistance per layer#

k = 25  # m/d
H = 20  # m
Ss = 1e-4 / H  # m^(-1)
rw = 0.3  # m
res = [0.05, 0.1, 0.15]  # d
Q = 500  # m^3/d
ml = tft.Model3D(kaq=k, z=np.linspace(H, 0, 6), Saq=Ss, tmin=0.001, tmax=10)
w = tft.Well(ml, tsandQ=[(0, Q)], rw=rw, res=res, layers=[0, 1, 2])
ml.solve()
self.neq  3
solution complete
hin = w.headinside(t=2)[:, 0]
hout = ml.head(rw, 0, t=2, layers=[0, 1, 2])[:, 0]
print("head inside well at t=2:     ", hin)
print("head just outside well at t=2", hout)
head inside well at t=2:      [-3.95216562 -3.95216616 -3.95216656]
head just outside well at t=2 [-2.4227822  -1.93402808 -1.62034004]
print("discharge of screens at t=2", w.discharge(2)[:, 0])
Qcheck = 2 * np.pi * rw * ml.aq.Haq[:3] * (hout - hin) / res
print("discharge from bc at t=2:  ", Qcheck)
discharge of screens at t=2 [230.62558719 152.16402612 117.21038491]
discharge from bc at t=2:   [230.62558719 152.16402612 117.21038491]