{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Impermeable walls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Impermeable walls may be modeled with strings of line-doublets using the\n", "`ImpermeableWallString` element. The `ImpermeableWallString` element has an option called\n", "order. The no-flow condition is applied at order+1 control points along the segments.\n", "Between the control points, the condition is met approximately. The modeler needs to\n", "verify whether the chosen lengths of segments and orders results in an accurate\n", "solution.\n", "\n", "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 = []`.\n", "\n", "![Figure of the model](figs/timml_notebook5_layout.png)\n", "\n", "Consider an aquifer with a uniform flow from West to East. The aquifer is divided in\n", "four layers with equal hydraulic conductivity; the model is created with the `Model3D`\n", "command. A square building pit is surrounded by impermeable walls that extend halfway\n", "into the aquifer: they are placed in the top two model layers. In the center of the\n", "building pit, a well is screened in the top aquifer." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "import timflow.steady as tfs" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ml = tfs.Model3D(kaq=1, z=[40, 30, 20, 10, 0], kzoverkh=1)\n", "uf = tfs.Uflow(ml, slope=0.01, angle=0)\n", "rf = tfs.Constant(ml, xr=200, yr=0, hr=50)\n", "xp = [-100, 100, 100, -100, -100]\n", "yp = [-100, -100, 100, 100, -100]\n", "ld = tfs.ImpermeableWallString(\n", " ml, xy=list(zip(xp, yp, strict=False)), layers=[0, 1], order=3\n", ")\n", "w = tfs.Well(ml, xw=0, yw=0, Qw=400, rw=0.1, layers=0)\n", "ml.solve()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ml.plots.contour(\n", " win=[-300, 300, -300, 300],\n", " ngr=50,\n", " labels=1,\n", " decimals=1,\n", " layers=[0, 3],\n", " levels=np.arange(48, 58, 0.5),\n", " figsize=(6, 6),\n", ");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "axes = ml.plots.topview_and_xsection(win=[-300, 300, -300, 300])\n", "ml.plots.tracelines(\n", " xstart=-200 * np.ones(5),\n", " ystart=np.arange(-200, 201, 100),\n", " zstart=35 * np.ones(5),\n", " hstepmax=10,\n", " tmax=20 * 365.25,\n", " orientation=\"both\",\n", " ax=axes,\n", ");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "axes = ml.plots.topview_and_xsection(win=[-300, 300, -300, 300])\n", "ml.plots.tracelines(\n", " xstart=-200 * np.ones(3),\n", " ystart=np.arange(-100, 101, 100),\n", " zstart=35 * np.ones(3),\n", " hstepmax=10,\n", " tmax=20 * 365.25,\n", " orientation=\"both\",\n", " ax=axes,\n", ");" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 4 }