Impermeable walls may be modeled with strings of line-doublets using the ImpLineDoubletString element. The ImpLineDoubletString 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 = [].
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.
In [1]:
from timml import *
from pylab import *
%matplotlib notebook
In [2]:
ml = Model3D(kaq=1, z=[40, 30, 20, 10, 0], kzoverkh=1)
uf = Uflow(ml, slope=0.01, angle=0)
rf = Constant(ml, xr=200, yr=0, hr=50)
xp = [-100, 100, 100, -100, -100]
yp = [-100, -100, 100, 100, -100]
ld = ImpLineDoubletString(ml, xy=list(zip(xp, yp)), layers=[0, 1], order=3)
w = Well(ml, xw=0, yw=0, Qw=400, rw=0.1, layers=0)
ml.solve()
In [3]:
ml.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))
In [4]:
ml.plot(win=[-300, 300, -300, 300], orientation='both')
ml.tracelines(xstart=-200 * ones(5), ystart=np.arange(-200, 201, 100),
zstart=35 * ones(5), hstepmax=10, tmax=20 * 365.25, orientation='both')
In [5]:
ml.plot(win=[-300, 300, -300, 300], orientation='both')
ml.tracelines(xstart=-200 * ones(3), ystart=np.arange(-100, 101, 100),
zstart=35 * ones(3), hstepmax=10, tmax=20 * 365.25, orientation='both')
In [ ]: