Well near a straight river#

import matplotlib.pyplot as plt
import numpy as np

import timflow.transient as tft

plt.rcParams["font.size"] = 8.0

Consider a well in the middle aquifer of a three aquifer system located at \((x,y)=(0,0)\). The well starts pumping at time \(t=0\) at a discharge of \(Q=1000\) m\(^3\)/d. Aquifer properties are the shown in table 3 (same as exercise 2). A stream runs North-South along the line \(x=50\). The head along the stream is fixed.

Table 3 - Aquifer properties for exercise 3.

Layer

\(k\) (m/d)

\(c\) (d)

\(S\)

\(S_s\)

\(z_t\) (m)

\(z_b\) (m)

Aquifer 0

1

0.1

25

20

Leaky layer 1

1000

0

20

18

Aquifer 1

20

0.0001

18

10

Leaky layer 2

2000

0

10

8

Aquifer 2

2

0.0001

8

0

Exercise 3a#

Model a 1000 m long section of the stream using 12 linesinks with \(y\)-endpoints at [-500,-300,-200,-100,-50,0,50,100,200,300,500]. Create a cross-section of the head along \(y=0\) from \(x=-200\) to \(x=200\) in all 3 layers.

ml = tft.ModelMaq(
    kaq=[1, 20, 2],
    z=[25, 20, 18, 10, 8, 0],
    c=[1000, 2000],
    Saq=[0.1, 1e-4, 1e-4],
    Sll=[0, 0],
    phreatictop=True,
    tmin=0.1,
    tmax=1000,
)
w = tft.Well(ml, xw=0, yw=0, rw=0.2, tsandQ=[(0, 1000)], layers=1, label="well 1")
yls = [-500, -300, -200, -100, -50, 0, 50, 100, 200, 300, 500]
xls = 50 * np.ones(len(yls))
ls1 = tft.RiverString(
    ml, list(zip(xls, yls, strict=False)), tsandh="fixed", layers=0, label="river"
)
ml.solve()
ml.plots.head_along_line(
    x1=-200, x2=200, npoints=100, t=100, layers=[0, 1, 2], sstart=-200, figsize=(8, 3)
);
self.neq  11
solution complete
../../_images/8b5f4360edc0630b2ebb3d5ccb0254c8c94a1d56bcb178d8fe7bbd939ba03e15.png

Exercise 3b#

Compute the discharge of the stream section (the stream depletion) as a function of time from \(t=0.1\) till \(t=1000\) days.

t = np.logspace(-1, 3, 100)
Q = ls1.discharge(t)
plt.figure(figsize=(8, 3))
plt.semilogx(t, Q[0])
plt.ylabel("Q [m$^3$/d]")
plt.xlabel("time [days]")
plt.grid()
../../_images/8c8be8eb01ea955016cbcbcb1509bf74392a6075af740e0ef8b97b7743bf651e.png

Exercise 3c#

Make a contour plot of each layer after 100 days of pumping. Use 20 grid points in each direction (this may take a little time).

plt.figure(figsize=(16, 4))
for ilay in [0, 1, 2]:
    ax = plt.subplot(1, 3, ilay + 1)
    ml.plots.contour(
        win=[-200, 200, -200, 200],
        ngr=[20, 20],
        t=100,
        layers=ilay,
        levels=10,
        color="C0",
        labels=True,
        decimals=2,
        ax=ax,
    )
../../_images/e7d6cd5e0f4e6444640c31c78fc55bf2dee77337e056ff19c5e8b7140f4cae4e.png

Exercise 3d#

The discharge of the well is \(Q=1000\) m\(^3\)/d for 100 days every summer. Compute the stream depletion for a five year period.

ml = tft.ModelMaq(
    kaq=[1, 20, 2],
    z=[25, 20, 18, 10, 8, 0],
    c=[1000, 2000],
    Saq=[0.1, 1e-4, 1e-4],
    Sll=[0, 0],
    phreatictop=True,
    tmin=0.1,
    tmax=2000,
)
tsandQ = [
    (0, 1000),
    (100, 0),
    (365, 1000),
    (465, 0),
    (730, 1000),
    (830, 0),
    (1095, 1000),
    (1195, 0),
    (1460, 1000),
    (1560, 0),
]
w = tft.Well(ml, xw=0, yw=0, rw=0.2, tsandQ=tsandQ, layers=1, label="well 1")
yls = [-500, -300, -200, -100, -50, 0, 50, 100, 200, 300, 500]
xls = 50 * np.ones(len(yls))
ls1 = tft.RiverString(
    ml, list(zip(xls, yls, strict=False)), tsandh="fixed", layers=0, label="river"
)
ml.solve()

t = np.linspace(0.1, 2000, 200)
Q = ls1.discharge(t)
plt.figure(figsize=(8, 3))
plt.plot(t, Q[0])
plt.ylabel("Q [m$^3$/d]")
plt.xlabel("time [days]")
plt.grid()
self.neq  11
solution complete
../../_images/8687b7d5b8a0d7468ef3df2b9db4bfb36f6af3b717c63860eb7835f28aa5e626.png