A system with wells, rivers, and recharge#

Consider a system of three aquifers. The aquifer parameters are presented in Table 1. Note that an average thickness is specified for the top unconfined aquifer. A river with three branches cuts through the upper aquifer. The river is modeled with a string of 7 head-specified line-sinks and each branch is modeled with strings of 5 head-specified line-sinks. The heads are specified at the ends of the line-sinks and are shown in Figure 1.

Three wells are present. Well 1 is screened in aquifer 0 and has a discharge of 1000 m\(^3\)/d, well 2 is screened in aquifer 2 and has a discharge of 5000 m\(^3\)/d, and well 3 is screened in aquifers 1 and 2 and has a total discharge of 5000 m\(^3\)/d. A constant recharge through the upper boundary of aquifer 0 is simulated by one large circular infiltration area that covers the entire model area; the recharge rate is 0.2 mm/day. A head of 175 m is specified in layer 0 at the upper righthand corner of the model domain. A layout of all analytic elements, except the boundary of the infiltration area, is shown in Figure 1.

Table 1: Aquifer data for Exercise 2

Layer

\(k\) (m/d)

\(z_b\) (m)

\(z_t\)

\(c\) (days)

\(n\) (-)

\(n_{ll}\) (-)

Aquifer 0

2

140

165

-

0.3

-

Leaky Layer 1

-

120

140

2000

-

0.2

Aquifer 1

6

80

120

-

0.25

-

Leaky Layer 2

-

60

80

20000

-

0.25

Aquifer 2

4

0

60

-

0.3

-

Figure 1: Layout of elements for Exercise 2. Heads at centers of line-sinks are indicated.

Layout of elements for Exercise 2. Heads at centers of line-sinks are indicated.

import numpy as np

import timflow.steady as tfs

figsize = (6, 6)
# Create basic model elements
ml = tfs.ModelMaq(kaq=[2, 6, 4], z=[165, 140, 120, 80, 60, 0], c=[2000, 20000], npor=0.3)
rf = tfs.Constant(ml, xr=20000, yr=20000, hr=175, layer=0)
p = tfs.CircAreaSink(ml, xc=10000, yc=10000, R=15000, N=0.0002, layer=0)
w1 = tfs.Well(ml, xw=10000, yw=8000, Qw=1000, rw=0.3, layers=0, label="well 1")
w2 = tfs.Well(ml, xw=12100, yw=10700, Qw=5000, rw=0.3, layers=2, label="well 2")
w3 = tfs.Well(ml, xw=10000, yw=4600, Qw=5000, rw=0.3, layers=[1, 2], label="maq well")
#
xy1 = [
    (833, 14261),
    (3229, 14843),
    (6094, 15885),
    (8385, 15677),
    (10781, 14895),
    (12753, 14976),
]
hls1 = [176, 166]
xy2 = [
    (356, 6976),
    (4043, 7153),
    (6176, 8400),
    (9286, 9820),
    (12266, 9686),
    (15066, 9466),
]
hls2 = [174, 162]
xy3 = [
    (1376, 1910),
    (4176, 2043),
    (6800, 1553),
    (9953, 2086),
    (14043, 2043),
    (17600, 976),
]
hls3 = [170, 156]
xy4 = [
    (9510, 19466),
    (12620, 17376),
    (12753, 14976),
    (13020, 12176),
    (15066, 9466),
    (16443, 7910),
    (17510, 5286),
    (17600, 976),
]
hls4 = [170, np.nan, 166, np.nan, 162, np.nan, np.nan, 156]

ls1 = tfs.RiverString(ml, xy=xy1, hls=hls1, layers=0)
ls2 = tfs.RiverString(ml, xy=xy2, hls=hls2, layers=0)
ls3 = tfs.RiverString(ml, xy=xy3, hls=hls3, layers=0)
ls4 = tfs.RiverString(ml, xy=xy4, hls=hls4, layers=0)

Questions:#

Exercise 2a#

Solve the model and create a contour plot.

ml.solve()
ml.plots.contour(
    win=[0, 20000, 0, 20000],
    ngr=50,
    layers=[0, 1, 2],
    levels=10,
    color=["C0", "C1", "C2"],
    legend=True,
    figsize=figsize,
);
Number of elements, Number of equations: 9 , 25
.
.
.
.
.
.
.
.
.

solution complete
../../_images/08a848dc32005ce323ad2a968c23baf7585ae6abdfb52640640f7b7971e66386.png

Exercise 2b#

What are the heads at the three wells?

print("The head at well 1 is:", w1.headinside())
print("The head at well 2 is:", w2.headinside())
print("The head at well 3 is:", w3.headinside())
The head at well 1 is: [146.31358095]
The head at well 2 is: [138.96970957]
The head at well 3 is: [153.79826985 153.79826985]

Exercise 2c#

Create a contour plot including a cross-section. Create 50-year capture zones for all three wells.

axes = ml.plots.topview_and_xsection(win=[0, 20000, 0, 20000], figsize=figsize)
ml.plots.plotcapzone(
    well=w1,
    hstepmax=50,
    nt=10,
    zstart=150,
    tmax=250 * 365.25,
    orientation="both",
    ax=axes,
)
ml.plots.plotcapzone(
    well=w2, hstepmax=50, nt=10, zstart=30, tmax=250 * 365.25, orientation="both", ax=axes
)
ml.plots.plotcapzone(
    well=w3, hstepmax=50, nt=10, zstart=30, tmax=250 * 365.25, orientation="both", ax=axes
)
ml.plots.plotcapzone(
    well=w3,
    hstepmax=50,
    nt=10,
    zstart=100,
    tmax=250 * 365.25,
    orientation="both",
    ax=axes,
)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
array([<Axes: >, <Axes: ylabel='elevation'>], dtype=object)
../../_images/d8f8dcb7fff708dcec7fd244f431dc869c24b29a7ea370fa305fda982fd230d0.png
axes = ml.plots.topview_and_xsection(
    win=[0, 20000, 0, 20000], topfigfrac=0.7, figsize=figsize
)
ml.plots.plotcapzone(
    well=w1, hstepmax=50, nt=10, zstart=150, tmax=50 * 365.25, orientation="both", ax=axes
)
ml.plots.plotcapzone(
    well=w2, hstepmax=50, nt=10, zstart=30, tmax=50 * 365.25, orientation="both", ax=axes
)
ml.plots.plotcapzone(
    well=w3, hstepmax=50, nt=10, zstart=30, tmax=50 * 365.25, orientation="both", ax=axes
)
ml.plots.plotcapzone(
    well=w3, hstepmax=50, nt=10, zstart=100, tmax=50 * 365.25, orientation="both", ax=axes
)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
array([<Axes: >, <Axes: ylabel='elevation'>], dtype=object)
../../_images/4d940002b39d807740cbd41bd44f8d69eb0d69dba99c9dac4afc16d9ff6ff06d.png