Impermeable walls#

Impermeable walls may be modeled with strings of line-doublets using the ImpermeableWallString element. The ImpermeableWallString element has an option called order. The no-flow condition is applied at order+1 control points along the segments. Between the control points, the condition is met approximately. The modeler needs to verify whether the chosen lengths of segments and orders results in an accurate solution.

In the current implementation, order cannot be larger than 8. Impermeable walls can be placed in multiple layers by entering a list of layers using the keyword argument layers = [].

Figure of the model

Consider an aquifer with a uniform flow from West to East. The aquifer is divided in four layers with equal hydraulic conductivity; the model is created with the Model3D command. A square building pit is surrounded by impermeable walls that extend halfway into the aquifer: they are placed in the top two model layers. In the center of the building pit, a well is screened in the top aquifer.

import numpy as np

import timflow.steady as tfs
ml = tfs.Model3D(kaq=1, z=[40, 30, 20, 10, 0], kzoverkh=1)
uf = tfs.Uflow(ml, slope=0.01, angle=0)
rf = tfs.Constant(ml, xr=200, yr=0, hr=50)
xp = [-100, 100, 100, -100, -100]
yp = [-100, -100, 100, 100, -100]
ld = tfs.ImpermeableWallString(
    ml, xy=list(zip(xp, yp, strict=False)), layers=[0, 1], order=3
)
w = tfs.Well(ml, xw=0, yw=0, Qw=400, rw=0.1, layers=0)
ml.solve()
Number of elements, Number of equations: 4 , 33
.
.
.
.

solution complete
ml.plots.contour(
    win=[-300, 300, -300, 300],
    ngr=50,
    labels=1,
    decimals=1,
    layers=[0, 3],
    levels=np.arange(48, 58, 0.5),
    figsize=(6, 6),
);
../../_images/39ad32f17d93cf400105f86a573f2c55b07a2483f2dbbacc860960aac03f8038.png
axes = ml.plots.topview_and_xsection(win=[-300, 300, -300, 300])
ml.plots.tracelines(
    xstart=-200 * np.ones(5),
    ystart=np.arange(-200, 201, 100),
    zstart=35 * np.ones(5),
    hstepmax=10,
    tmax=20 * 365.25,
    orientation="both",
    ax=axes,
);
.
.
.
.
.
../../_images/cf4b69caf3ae1301db2f88469369e1d3f5c802324c1a25e5a2d0f4fd3fe5666d.png
axes = ml.plots.topview_and_xsection(win=[-300, 300, -300, 300])
ml.plots.tracelines(
    xstart=-200 * np.ones(3),
    ystart=np.arange(-100, 101, 100),
    zstart=35 * np.ones(3),
    hstepmax=10,
    tmax=20 * 365.25,
    orientation="both",
    ax=axes,
);
.
.
.
../../_images/8d0e5241f6d0f44fffb29a3e3fa86f2f9c02045780dd7f662c81978e5f211d7a.png