{ "cells": [ { "cell_type": "markdown", "id": "9ed8c577", "metadata": {}, "source": [ "# How-to: Select a Model\n", "\n", "This guide explains the differences between the four model classes in `timflow.steady`:\n", "`ModelMaq`, `Model3D`, `Model` and `ModelXsection`. Understanding these differences\n", "will help you choose the right model type for your groundwater flow problem." ] }, { "cell_type": "code", "execution_count": null, "id": "6fd51972", "metadata": {}, "outputs": [], "source": [ "import timflow.steady as tfs" ] }, { "cell_type": "markdown", "id": "add0cea1", "metadata": {}, "source": [ "## ModelMaq\n", "\n", "`ModelMaq` is a model consisting of a regular sequence of aquifer - leaky layer - aquifer - leaky layer, aquifer, etc. The top of the system can be either an aquifer or a leaky layer. The head is computed in all aquifer layers only." ] }, { "cell_type": "code", "execution_count": null, "id": "8e182f9c", "metadata": {}, "outputs": [], "source": [ "ml = tfs.ModelMaq(z=[0, -5, -10, -20, -25, -35], kaq=[10, 30, 20], c=[2000, 5000])" ] }, { "cell_type": "markdown", "id": "e2e19d6d", "metadata": {}, "source": [ "Show aquifer summary" ] }, { "cell_type": "code", "execution_count": null, "id": "fc57ee70", "metadata": {}, "outputs": [], "source": [ "ml.aquifer_summary()" ] }, { "cell_type": "markdown", "id": "47563d6b", "metadata": {}, "source": [ "The figure below illustrates a `ModelMaq` example with three aquifers and two leaky layers:" ] }, { "cell_type": "code", "execution_count": null, "id": "bfceacc0", "metadata": {}, "outputs": [], "source": [ "ax = ml.plots.xsection(params=True, labels=True, units={\"k\": \"m/d\", \"c\": \"d\"})\n", "ax.set_frame_on(False)" ] }, { "cell_type": "markdown", "id": "ee2a7c13", "metadata": {}, "source": [ "## Model3D\n", "\n", "`Model3D` is a model consisting of a stack of aquifer layers. The resistance between the aquifer layers is computed as the resistance from the middle of one layer to the middle of the next layer. Vertical anisotropy can be specified. The system may be bounded on top by a leaky layer." ] }, { "cell_type": "code", "execution_count": null, "id": "afe94004", "metadata": {}, "outputs": [], "source": [ "ml = tfs.Model3D(\n", " z=[0, -5, -10, -20, -25, -35], kaq=[10, 0.0025, 30, 0.001, 20], kzoverkh=0.1\n", ")" ] }, { "cell_type": "markdown", "id": "afe5b038", "metadata": {}, "source": [ "Show aquifer summary" ] }, { "cell_type": "code", "execution_count": null, "id": "9041e8f9", "metadata": {}, "outputs": [], "source": [ "ml.aquifer_summary()" ] }, { "cell_type": "markdown", "id": "8db9a4ad", "metadata": {}, "source": [ "The figure below shows a `Model3D` example consisting of five layers all treated as aquifers with a vertical anisotropy of 0.1:" ] }, { "cell_type": "code", "execution_count": null, "id": "19d09899", "metadata": {}, "outputs": [], "source": [ "ax = ml.plots.xsection(params=True, labels=True, units={\"k\": \"m/d\", \"c\": \"d\"})\n", "ax.set_frame_on(False)" ] }, { "cell_type": "markdown", "id": "61c5a217", "metadata": {}, "source": [ "## Model\n", "\n", "`Model` is a model consisting of an arbitrary sequence of leaky layers and aquifers. The resistance between all aquifers needs to be specified by the user. This is the most general option, but requires a bit more input." ] }, { "cell_type": "code", "execution_count": null, "id": "8d9de89a", "metadata": {}, "outputs": [], "source": [ "ml = tfs.Model(\n", " z=[0, -5, -10, -20, -25, -35],\n", " kaq=[10, 5, 30, 20],\n", " c=[2, 5, 2000],\n", " npor=[0.3, 0.3, 0.3, 0.3, 0.3],\n", " ltype=[\"a\", \"a\", \"a\", \"l\", \"a\"],\n", ")" ] }, { "cell_type": "markdown", "id": "dbaaa490", "metadata": {}, "source": [ "The figure below illustrates a `Model` example with four aquifers and one leaky layer:" ] }, { "cell_type": "code", "execution_count": null, "id": "903e4a51", "metadata": {}, "outputs": [], "source": [ "ax = ml.plots.xsection(params=True, labels=True, units={\"k\": \"m/d\", \"c\": \"d\"})\n", "ax.set_frame_on(False)" ] }, { "cell_type": "markdown", "id": "92241fe1", "metadata": {}, "source": [ "## XsectionModel\n", "\n", "`XsectionModel` is a special model class for building cross-section models. The only\n", "parameter you can pass to ModelXsection is the number of layers, which must be equal\n", "for all sections. " ] }, { "cell_type": "code", "execution_count": null, "id": "930ec2e4", "metadata": {}, "outputs": [], "source": [ "ml = tfs.ModelXsection(naq=2)" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }