{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Exploratory Computing with Python\n", "*Developed by Mark Bakker*\n", "## Notebook 6: Systems of linear equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this Notebook, we learn how to build and solve systems of linear equations, and apply these techniques to solve practical problems." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Building and solving a system of linear equations\n", "A parabola is defined by three points (provided they are not on a straight line). \n", "The equation for a parabola is $y=ax^2+bx+c$, where $a$, $b$, and $c$ are constants.\n", "Given three points $(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$, the following system of three linear equations may be compiled\n", "\n", "$$\n", "\\begin{split}\n", "x_1^2a+x_1b+c&=y_1 \\\\\n", "x_2^2a+x_2b+c&=y_2 \\\\\n", "x_3^2a+x_3b+c&=y_3 \\\\\n", "\\end{split}\n", "$$\n", "\n", "Or in matrix form\n", "\n", "$$\n", "\\left(\n", "\\begin{array}{ccc}\n", "x_1^2 & x_1 & 1 \\\\\n", "x_2^2 & x_2 & 1 \\\\\n", "x_3^2 & x_3 & 1 \\\\\n", "\\end{array}\n", "\\right)\n", "\\left(\n", "\\begin{array}{c}\n", "a \\\\b \\\\c \\\\\n", "\\end{array}\n", "\\right)\n", "=\n", "\\left(\n", "\\begin{array}{c}\n", "y_1 \\\\\n", "y_2 \\\\\n", "y_3 \\\\\n", "\\end{array}\n", "\\right)\n", "$$\n", "\n", "To solve this problem, we build a two-dimensional array containing the matrix (called `A`) and a one-dimensional array containing the right-hand side (called `rhs`).\n", "Let's do that for the three points $(x_1,y_1)=(-2,2)$, $(x_2,y_2)=(1,-1)$, $(x_3,y_3)=(4,4)$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Array A:\n", "[[ 4. -2. 1.]\n", " [ 1. 1. 1.]\n", " [ 16. 4. 1.]]\n", "rhs: [ 2. -1. 4.]\n" ] } ], "source": [ "xp = np.array([-2, 1, 4])\n", "yp = np.array([2, -1, 4])\n", "A = np.zeros((3, 3))\n", "rhs = np.zeros(3)\n", "for i in range(3):\n", " A[i] = xp[i] ** 2, xp[i], 1 # Store one row at a time\n", " rhs[i] = yp[i]\n", "print('Array A:')\n", "print(A)\n", "print('rhs:',rhs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The system may be solved with the `solve` method, which is part of the `linalg` subpackage of `numpy`. The `solve` method takes as input a two-dimensional array (the matrix) and a one-dimensional array (the right-hand side) and returns the solution. To check whether the solution is correct, we need to do a matrix multiply of the matrix stored in the array `A` and the obtained solution, which we call `sol`. As we learned the line\n", "\n", "`A * sol`\n", "\n", "does a term-by-term multiply. For a matrix multiply, the `@` symbol needs to be used (alternatively, the `np.dot` function can be used; the `@` symbol does not work in Python 2)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "solution is: [ 0.44444444 -0.55555556 -0.88888889]\n", "specified values of y: [ 2 -1 4]\n", "A @ sol: [ 2. -1. 4.]\n" ] } ], "source": [ "sol = np.linalg.solve(A, rhs)\n", "print('solution is:', sol)\n", "print('specified values of y:', yp)\n", "print('A @ sol:', A @ sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also visually check whether we solved the problem correctly by drawing the three points and the parabola. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nL3gWyRYVt6xWhQp+48q4cX6Q/8yZvsNvn3385p1CnkL58kvf1PSHP/ia+JNP9sLu3x90orHkgopb\n1qpKFTjjDD/Y//77/YzoI4/028Xvuqtw1oCH4OvfO3XylSKPPgpdusDnn/s3tgYNYieUQqLiloxU\nqQKnn+5F9eyzPrI87zzfAXj22X73ZT6aOxcGDPBzXlq29PLu2RMmT/b3b7997IRSiFTcUiYVK/qo\n8913fTNJp04+v7v77lBU5MeSzpoVO+WGWboUXnsNjj8ett7aNypVqgQPPABTp/rSyTp1YqeUQqbi\nlvVi5nciPvwwTJvmm01C8C309er5OeD33utz44lQXOw3E1So4D8WF//mf1682C9bPvNML+tDDoFh\nw3w65IMP/MzsLl300FGSwUIWlgkUFRWFkpKScv99JfnGjvVOHDLE58XNfCR+yCH+1qxZhO3excX+\nNHGlXUVhk6p83ecJRtToyCuv+El98+dDtWp+guJRR0G7drpVXXLHzEaHEIoy+lgVt2RDCF7izz3n\nywhHjfJbeDbZxEfq++/v27/33BPq18/yeueGDVk4eRafsDslFPEee/MWBzC19CrV+vW9pNu181cK\nVatmMYvIGqi4JXHmzvX7L99+298++ujX69Rq1fKT83bayd8aNvSzw+vVg6228rJfV7EvWQL/+5/P\nr3/zjb99/bXvBh33whd8xQ4spyIAdZlBC0ZyACM54NO7adxYG2UkPhW3JN6PP/pKlI8+8rfx431q\nZfbs339spUp+EFa1av7zypV9RL9okb8tWLD6ZYmVK/t2810mvULjhSX8mdEUUUI9pmPgV6nrVC1J\niLIUd6VshxFZnerV/QCmVa/rmjvXR8vTpvnbnDl+AcG8eT5FvXSpv4GfL77xxj61scUWfotMrVq+\ndb9BA6hb11fBUPw/6Nr3tydnVa3qR/aJpJCKWxJls838bbfdyvE37dzZf+zVy78rNGjgpb3i/SIp\no+KWwtC5s4pa8obWcYuIpIyKW0QkZVTcIiIpo+IWEUkZFbeISMqouEVEUkbFLSKSMlnZ8m5ms4HJ\n6/l/rwXMKcc45UW5yka5yka5yiYfc20XQsjo8rusFPeGMLOSTPfr55JylY1ylY1ylU2h59JUiYhI\nyqi4RURSJonFPTB2gDVQrrJRrrJRrrIp6FyJm+MWEZG1S+KIW0RE1iKRxW1mvc1sjJl9bGavmVm9\n2JkAzOxmMxtfmu05M9ssdiYAMzvKzMaa2XIzi/qk3czamNnnZjbBzHrGzLIyM3vQzGaZ2aexs6zM\nzLY1sxFm9lnpn+EFsTMBmNnGZva+mX1Smuua2JlWMLOKZvaRmb0UO8vKzGySmf23tLeyegVYIosb\nuDmEsFsIYQ/gJeDK2IFKvQ40CSHsBnwBXBo5zwqfAkcAI2OGMLOKwN1AW6AxcJyZNY6ZaSUPA21i\nh1iNpUD3EEJjYB/g3IR8zRYBrUIIuwN7AG3MbJ/ImVa4ABgXO8QatAwh7JHtJYGJLO4Qwg8r/bIa\nkIiJ+BDCayGE0ouzGAXUj5lnhRDCuBDC57FzAM2ACSGEiSGExcBgoGPkTACEEEYC38fOsaoQwowQ\nwoelP5+PF9I2cVNBcD+W/rJy6Vv0f4dmVh84FBgUO0tMiSxuADPrY2ZTgM4kZ8S9si7AsNghEmYb\nYMpKv55KAkooLcysIbAn8F7cJK50SuJjYBbwegghCbluB3oAy2MHWY0A/NPMRptZ12x+omjFbWb/\nNLNPV/PWESCE0CuEsC1QDHRLSq7Sj+mFv8QtTlIuSS8zqw4MAf6+yivOaEIIy0qnK+sDzcysScw8\nZtYemBVCGB0zx1rsX/r1aotPebXI1ieKdudkCOGvGX5oMfAKcFUW4/xiXbnM7BSgPdA65HAtZRm+\nXjFNA7Zd6df1S98na2FmlfHSLg4h/CN2nlWFEOaa2Qj8GUHMh7v7AR3MrB2wMVDDzB4PIZwQMdMv\nQgjTSn+cZWbP4VOHWXnulMipEjNrtNIvOwLjY2VZmZm1wV+mdQghLIydJ4E+ABqZ2R/MrApwLPBC\n5EyJZmYGPACMCyHcGjvPCmZWe8WqKTPbBDiIyP8OQwiXhhDqhxAa4n+33kxKaZtZNTPbdMXPgYPJ\n4je5RBY3cGPpNMAY/AuQiCVSwF3ApsDrpUt+7o0dCMDMDjezqcC+wMtm9mqMHKUPbrsBr+IP2Z4O\nIYyNkWVVZvYk8C6ws5lNNbPTYmcqtR9wItCq9O/Ux6Ujyti2BkaU/hv8AJ/jTtTyu4SpA/zbzD4B\n3gdeDiEMz9Yn085JEZGUSeqIW0RE1kDFLSKSMipuEZGUUXGLiKSMiltEJGVU3CIiKaPiFhFJGRW3\niEjK/D/nqzBFDPQ8EwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(xp, yp, 'ro')\n", "x = np.linspace(-3, 5, 100)\n", "y = sol[0] * x ** 2 + sol[1] * x + sol[2]\n", "plt.plot(x, y, 'b');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1. Fitting a wave\n", "Consider the following four measurements of the quantity $y$ at time $t$: $(t_0,y_0)=(0,3)$, $(t_1,y_1)=(0.25,1)$, $(t_2,y_2)=(0.5,-3)$, $(t_3,y_3)=(0.75,1)$. The measurements are part of a wave that may be written as\n", "\n", "$y = a\\cos(\\pi t) + b\\cos(2\\pi t) + c\\cos(3\\pi t) + d\\cos(4\\pi t)$\n", "\n", "where $a$, $b$, $c$, and $d$ are parameters. Build a system of four linear equations and solve for the four parameters. Creates a plot of the wave for $t$ going from 0 to 1 and show the four measurements with dots." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fitting an arbitrary polynomial\n", "In the next three exerises, we are going to fit a polynomial of arbitary degree $N$ to a set of $N+1$ data points. The function we are going to fit is \n", "\n", "$$f(x) = a_0 + a_1x + a_2x^2 + ... + a_Nx^N = \\sum\\limits_{n=0}^{N}a_nx^n$$\n", "\n", "Note that there are $N+1$ parameters $a_n$, while the degree of the polynomial is called $N$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2. The `fpoly` function\n", "First, write a function called `fpoly` that returns an array where item $n$ is equal to $x^n$. The input arguments of the function are the value of $x$ and the degree of the polynomial $N$. The output of the function is an array of length $N+1$. Test your function for $x=2$ and $N=4$ by executing\n", "\n", "`print fpoly(2, 4)`\n", "\n", "which should return `[ 1. 2. 4. 8. 16.]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3. The `solvepoly` function\n", "Next, write a function that computes the parameters $a_n$ to fit a polynomial of degree $N$ through $N+1$ data points. Call the function `solvepoly`. The input arguments of the function are an array $x$ of length $N+1$ and an array $y$ of length $N+1$. The output is an array of parameters $a_n$ such that a polynomial of degree $N$ goes exactly through the $N+1$ data points $x$ and $y$. Inside the function, you need to compute a matrix of $N+1$ equations for the $N+1$ unknown parameters. For each of the rows of the matrix, call the function `fpoly`. Test your function by executing the following four commands. If your code is correct, the parameter array `a` is [ 3. 2.33333333 -6. 1.66666667].\n", "\n", " xp = np.array([0, 1, 2, 3])\n", " yp = np.array([3, 1, -3, 1])\n", " a = solvepoly(xp, yp)\n", " print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4. The `fpolyeval` function\n", "Finally, write a function called `fpolyeval` to evaluate the function $f(x) = \\sum\\limits_{n=0}^{N}a_nx^n$ for given parameters $a$ and an array of $x$ values. The `fpolyeval` function takes as input argument an array of arbitrary length $x$ and an array of parameters $a$ of length $N+1$. The function returns an array of $f(x)$ values with a length equal to the length of $x$. First test your function by executing\n", "\n", "`fpolyeval(xp, a)`\n", "\n", "where `xp` is the array with the values entered in Exercise 3 and `a` are the parameters computed in Exercise 3. When you programmed everything correctly, the function should return the four values of `yp` specified in Exercise 3. Test your function further by running the following commands, which should plot the four data points of Exercise 3 as markers and the 3$^\\text{rd}$ degree polynomial that goes exactly through the four points.\n", "\n", " x = np.linspace(-1,4,100)\n", " y = fpolyeval(x, a)\n", " plt.plot(xp, yp, 'ko', label='data')\n", " plt.plot(x, y, label='fitted poly')\n", " plt.legend(loc='best');" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### One-dimensional groundwater flow\n", "Consider a sand layer covered by a clay layer. The sand layer is bounded on each side by a canal with fixed water level $h_1^*$ (left) and $h_2^*$ (right); the distance between the two canals is $L$. Water leaks through the clay layer at a constant rate $P$ (see Figure). The groundwater head in the sand layer is governed by the second-order ordinary differential equation\n", "\n", "$$\\frac{\\text{d}^2h}{\\text{d}x^2} = -\\frac{P}{kD}$$\n", "\n", "where $h$ is the head, $k$ is the hydraulic conductivity of the sand layer, and $D$ is the thickness of the sand layer. The boundary conditions are that $h=h_1^*$ at $x=0$ and $h=h_2^*$ at $x=L$. \n", "\n", "\"Consolidation\"\n", "\n", "Although it is easy to solve this problem exactly, we will solve it here numerically using the finite difference method (which allows for $P$ to be a function of $x$, for example). The head is computed at $N+1$ equally spaced points from $x=0$ to $x=L$. The points are labeled $x_0$ through $x_{N}$, where $x_n=n\\Delta x$, and $\\Delta x$ is the horizontal distance between the points. The head at point $x_n$ is called $h_n$. The second order derivative can be approximated as (see, e.g., Verrujt (2012) Soil Mechanics, Eq. 17.4; a link to a pdf of the full text of this book may be found under Software [here](http://geo.verruijt.net/).\n", "\n", "$$\\frac{\\text{d}^2h}{\\text{d}x^2} \\approx \\frac{1}{\\Delta x} \\left[ \\frac{h_{n+1}-h_n}{\\Delta x} - \\frac{h_{n}-h_{n-1}}{\\Delta x} \\right]= \\frac{h_{n-1}-2h_n+h_{n+1}}{(\\Delta x)^2}$$\n", "\n", "Substitution of this approximation of the derivative in the differential equation and rearranging terms gives\n", "\n", "$$h_{n-1}-2h_n+h_{n+1} = -P\\frac{(\\Delta x)^2}{kD}$$\n", "\n", "An equation like this may be written for every point $n$, except for the first and last point where we need to apply the boundary conditions:\n", "\n", "$$h_0=h_1^* \\qquad h_N=h_2^*$$\n", "\n", "When $N=4$, we need to solve a system of $N+1=5$ linear equations in the unknowns $h_0$ through $h_4$:\n", "\n", "$$\\begin{split}\n", "h_0 &= h_1^* \\\\\n", "h_{0}-2h_1+h_{2} &= -P(\\Delta x)^2/(kD) \\\\\n", "h_{1}-2h_2+h_{3} &= -P(\\Delta x)^2/(kD) \\\\\n", "h_{2}-2h_3+h_{4} &= -P(\\Delta x)^2/(kD) \\\\\n", "h_4 &= h_2^* \n", "\\end{split}$$\n", "\n", "or in matrix form\n", "\n", "$$\n", "\\left(\n", "\\begin{array}{ccccc}\n", "1 & 0 & 0 & 0 & 0 \\\\\n", "1 & -2 & 1 & 0 & 0 \\\\\n", "0 & 1 & -2 & 1 & 0 \\\\\n", "0 & 0 & 1 & -2 & 1 \\\\\n", "0 & 0 & 0 & 0 & 1 \\\\\n", "\\end{array}\n", "\\right)\n", "\\left(\n", "\\begin{array}{c}\n", "h_0 \\\\\n", "h_1 \\\\\n", "h_2 \\\\\n", "h_3 \\\\\n", "h_4 \\\\\n", "\\end{array}\n", "\\right)\n", "=\n", "\\left(\n", "\\begin{array}{c}\n", "h_1^* \\\\\n", "-P(\\Delta x)^2/(kD) \\\\\n", "-P(\\Delta x)^2/(kD) \\\\\n", "-P(\\Delta x)^2/(kD) \\\\\n", "h_2^* \\\\\n", "\\end{array}\n", "\\right)\n", "$$\n", "\n", "Note that the matrix consists of mostly zeros. The matrix is referred to as a tri-diagonal matrix, as there are only values along three diagonals of the matrix. The matrix may be constructed by specifying the values and positions of the diagonals. The main diagonal has position number zero and has length $N+1$. The diagonal right above the main diagonal has position number $+1$ and length $N$, while the diagonal below the main diagonal has position number $-1$ and also length $N$. The `np.diag` function creates a matrix consisting of one diagonal. The input arguments are an array of the correct length with the values along the diagonal and the position of the diagonal. The matrix may be constructed as follows:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 0. 0. 0. 0.]\n", " [ 1. -2. 1. 0. 0.]\n", " [ 0. 1. -2. 1. 0.]\n", " [ 0. 0. 1. -2. 1.]\n", " [ 0. 0. 0. 0. 1.]]\n" ] } ], "source": [ "N = 4\n", "d0 = -2 * np.ones(N + 1) # main diagonal\n", "d0[0] = 1 # first value of main diagonal is 1\n", "d0[-1] = 1 # last value of main diagonal is 1\n", "dplus1 = np.ones(N) # diagonal right above main diagonal, position 1\n", "dplus1[0] = 0 # first value of diagonal is 0\n", "dmin1 = np.ones(N) # diagonal right below main diagonal, position -1\n", "dmin1[-1] = 0 # last value of diagonal is 0\n", "A = np.diag(d0, 0) + np.diag(dplus1, 1) + np.diag(dmin1, -1)\n", "print(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the finite-difference method described above is accurate when you use a reasonable number of points. Four points won't cut it. You may figure out whether you used enough points by, for example, doubling the number of points and compare the two solutions. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5. The head between two canals\n", "Compute the head distribution in a sand layer bounded on each side by a canal. Given: $k=10$ m/day, $D=10$ m, $h_1^*=20$ m, $h_2^*=22$ m, $L=1000$ m, $P=0.001$ m/d. Use $N=40$. Write Python code to:\n", "\n", "* Solve for the heads in all $N+1$ points\n", "* Print the maximum value of the head between the two canals to the screen (this should be around 22.5)\n", "* Create a plot of the head vs. $x$. Label the axes." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Consolidation\n", "The deformation of saturated clay soils is a slow process, referred to as consolidation. In the compression of a soil, the porosity decreases, and as a result there is less space available for pore water. Hence, some pore water needs to be pushed out of the soil during compression. This may take considerable time in clays, as the permeability of clays is small. An extensive description of the consolidation process may be found in, e.g., Chapters 15-17 of Verruijt, 2012, Soil Mechanics, see this [link](http://geo.verruijt.net/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider one-dimensional consolidation in a soil of height $h$. The water pressure $p$ in the soil sample is governed by the differential equation\n", "\n", "$$\\frac{\\partial p}{\\partial t} = c_v \\frac{\\partial^2 p}{\\partial z^2}$$\n", "\n", "where $z$ is the vertical coordinate (positive upward), and $c_v$ is the consolidation coefficient. We consider the problem where water can drain out at the top, but not at the bottom, so that the boundary condition at the bottom is\n", "\n", "$$z=0 \\qquad \\frac{\\partial p}{\\partial z} = 0$$\n", "\n", "and the boundary condition at the top is\n", "\n", "$$z=h \\qquad p = 0$$\n", "\n", "A constant load is applied at the top at time $t=0$ resulting, initially, in a uniform pressure $q$ throughout the soil sample (except for at $z=0$, where the pressure is always zero).\n", "\n", "$$t=0 \\qquad p = q$$\n", "\n", "\"Consolidation\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The change of pressure with time in the soil is simulated with a numerical method (fully implicit finite differences, to be exact). The pressure is computed at $N+1$ points, equally distributed from $z=0$ to $z=h$. The points are labeled $z_0$ through $z_{N}$, where $z_n=n\\Delta z$ and $\\Delta z$ is the vertical distance between the points. The pressure at point $z_n$ is called $p_n$. A separate solution is computed for every time step $\\Delta t$. The time derivative is approximated as\n", "\n", "$$\\frac{\\partial p}{\\partial t} \\approx \\frac{p_n(t) - p_n(t-\\Delta t)}{\\Delta t}$$\n", "\n", "while the spatial derivative is approximated as\n", "\n", "$$\\frac{\\partial^2 p}{\\partial z^2} \\approx \\frac{p_{n-1}(t) -2p_n(t) + p_{n+1}(t)}{\\Delta z)^2} $$\n", "\n", "Subsitution of the approximations of these derivatives and gathering terms gives the following equation:\n", "\n", "$$p_{n-1}(t) - (2+\\mu)p_n(t) + p_{n+1}(t) = -\\mu p_n(t-\\Delta t)$$\n", "\n", "where \n", "\n", "$$\\mu = (\\Delta z)^2/(c_v\\Delta t)$$\n", "\n", "This is an equation for the pressure in points $(n-1)$, $n$, and $(n+1)$ at time $t$, where it is assumed that the pressure at time $t-\\Delta t$ is known.\n", "\n", "The equations for $n=0$ and $n=N$ are different. \n", "At the bottom of the sample ($n=0$) the boundary condition is $\\partial p/\\partial z = 0$. The derivative may be approximated at $z_0=0$ as \n", "\n", "$$\\left(\\frac{\\partial p}{\\partial z}\\right)_{z=0} \\approx (p_1-p_{-1})/(2\\Delta z)=0$$\n", "\n", "where $p_{-1}$ is the pressure at an imaginary point $\\Delta z$ below $z_0$. The derivative is zero when $p_{-1}=p_1$, and substitution in the equation for $n=0$ gives\n", "\n", "$$- (2+\\mu)p_n(t) + 2p_{n+1}(t) = -\\mu p_n(t-\\Delta t)$$\n", "\n", "The equation for $n=N$ is easier, as at the top of the sample ($n=N$) the pressure is fixed to $p_N=0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example, the system of equations for $N=4$ is\n", "\n", "$$\n", "\\left(\n", "\\begin{array}{ccccc}\n", "-(2+\\mu) & 2 & 0 & 0 & 0 \\\\\n", "1 & -(2+\\mu) & 1 & 0 & 0 \\\\\n", "0 & 1 & -(2+\\mu) & 1 & 0 \\\\\n", "0 & 0 & 1 & -(2+\\mu) & 1 \\\\\n", "0 & 0 & 0 & 0 & 1 \\\\\n", "\\end{array}\n", "\\right)\n", "\\left(\n", "\\begin{array}{c}\n", "p_0(t) \\\\\n", "p_1(t) \\\\\n", "p_2(t) \\\\\n", "p_3(t) \\\\\n", "p_4(t) \\\\\n", "\\end{array}\n", "\\right)\n", "=\n", "\\left(\n", "\\begin{array}{c}\n", "-\\mu p_0(t-\\Delta t)) \\\\\n", "-\\mu p_1(t-\\Delta t)) \\\\\n", "-\\mu p_2(t-\\Delta t)) \\\\\n", "-\\mu p_3(t-\\Delta t) \\\\\n", "0 \\\\\n", "\\end{array}\n", "\\right)\n", "$$\n", "\n", "A solution is obtained by stepping through time. The matrix needs to be computed only once, as it doesn't change through time. Every time step, a new right-hand-side needs to be computed and a linear system of $N+1$ equations needs to be solved. If the matrix is called $A$ and the right-hand-side (based on the pressures at $t-\\Delta t$) is called $\\vec{r}(t-\\Delta t)$, then the pressure at time $t$, $\\vec{p}(t)$, is obtained by solving the system\n", "\n", "$$A\\vec{p}(t) = \\vec{r}(t-\\Delta t)$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note again that the presented numerical solution procedure is approximate and only gives accurate solutions when the time step $\\Delta t$ and the spatial discretization $\\Delta z$ are chosen small enough." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 6. One-dimensional consolidation\n", "Consider the consolidation process of a clay layer that is 2 m thick. A uniform load is applied at time $t=0$ causing a unit increase in the pressure, i.e., $p(t=0)=1$. The consolidation coefficient of the clay is $c_v=1\\cdot 10^{-6}$ m$^2$/s. Simulate the consolidation process using the numerical method described above. Use $N=40$ and a time step $\\Delta t=4\\cdot 10^4$ sec. Take 50 time steps and plot the pressure distribution in the clay every 10 time steps. Add labels along the axes and a legend. Compare your solution to the graph in Fig. 16.2 of Veruit (2012) (Note that Verruijt plots $p$ along the horizontal axis). The last line of your plot should approximate the line $c_v t / h^2=0.5$ in the graph of Verrujt. \n", "\n", "Make sure that your Python code:\n", "\n", "* Solves for the pressure in all $N+1$ points for all 50 time steps and plots the results after 10, 20, 30, 40, and 50 time steps.\n", "* Prints the maximum value of the pressure to the screen after 10, 20, 30, 40, and 50 time steps." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The inverse of a matrix\n", "As mentioned, the values of the matrix `A` don't change through time. Hence, it is more efficient to compute and store the inverse of the matrix rather than repeatedly calling the `np.linalg.solve` method. The inverse of a matrix may be computed with the `inv` function of the `linalg` package. If the inverse of matrix `A` is called `Ainv`, the solution for the pressure may be obtained through matrix multiplication of `Ainv` with the right-hand side. For example, for the first problem in this Notebook, fitting a parabola through three points, the inverse of the matrix can be computed to obtain a solution as follows: " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sol: [ 0.44444444 -0.55555556 -0.88888889]\n" ] } ], "source": [ "A = np.array([[ 4, -2, 1],\n", " [ 1, 1, 1],\n", " [16, 4, 1]])\n", "rhs = np.array([2,-1, 4])\n", "Ainv = np.linalg.inv(A)\n", "sol = Ainv @ rhs\n", "print('sol:', sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 7. One-dimensional consolidation revisited\n", "Modify your solution to Exercise 6 by computing and storing the inverse of the matrix, and compute a solution through multiplication of the inverse of the matrix with the right-hand-side vector" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 7" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sparse matrices\n", "The prodedure we have used so far to construct the matrix for a finite-difference solution is not very efficient, as a full matrix is created, which consists of mainly zeros. Non-zero values only appear on three diagonals. There are more efficient routines that store what are called *sparse matrices*. In a sparse matrix, only the value and location of non-zero values in a matrix are stored. Functionality for sparse matrices is available in the `scipy.sparse` package. A sparse matrix may be created from diagonals with the `diags` function, which takes a list of arrays for the diagonals and a list of the numbers of the diagonals. For example, the matrix\n", "$$\\left(\n", "\\begin{array}{cccc}\n", "2 & 3 & 0 & 0 \\\\\n", "1 & 2 & 3 & 0 \\\\\n", "0 & 1 & 2 & 3 \\\\\n", "0 & 0 & 1 & 2 \\\\\n", "\\end{array}\n", "\\right)$$\n", "is created as" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sparse matrix A\n", " (1, 0)\t1.0\n", " (0, 0)\t2.0\n", " (2, 1)\t1.0\n", " (1, 1)\t2.0\n", " (0, 1)\t3.0\n", " (3, 2)\t1.0\n", " (2, 2)\t2.0\n", " (1, 2)\t3.0\n", " (3, 3)\t2.0\n", " (2, 3)\t3.0\n", "Full matrix A as an array\n", "[[ 2. 3. 0. 0.]\n", " [ 1. 2. 3. 0.]\n", " [ 0. 1. 2. 3.]\n", " [ 0. 0. 1. 2.]]\n" ] } ], "source": [ "import scipy.sparse as sp\n", "A = sp.diags([1 * np.ones(3), \n", " 2 * np.ones(4), \n", " 3 * np.ones(3)], \n", " [-1, 0, 1], format='csc')\n", "print('Sparse matrix A')\n", "print(A) # Gives the way A is stored: row, column, value\n", "print('Full matrix A as an array')\n", "print(A.toarray()) # Returns the equivalent full array" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are many ways to store a sparse matrix. In the code above, the sparse matrix `A` is stored in *compressed sparse column* (specified as `'csc'`). The advantages and disadvantages of this format are given [here](http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csc_matrix.html). `A` is now a sparse matrix object. (Note that the multiplication sign does not do term-by-term multiplication for sparse matrix objects.) The solution to the system of equations $Ax=b$ is obtained with the `spsolve` function of the `scipy.sparse.linalg` module. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "type of A: \n", "right-hand-side defined as: [0 1 2 3]\n", "verify A @ x gives same: [ 0. 1. 2. 3.]\n" ] } ], "source": [ "from scipy.sparse.linalg import spsolve\n", "print('type of A:', type(A))\n", "b = np.arange(4)\n", "x = spsolve(A,b) # x is solution of Ax=b\n", "print('right-hand-side defined as:', b)\n", "print('verify A @ x gives same:', A @ x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The main advantage of sparse matrices is that you can solve *much* larger problems than with full matrices, as you only store the (few) points that are not zero. The solver `spsolve` also makes use of the sparsity of the matrix and will generally be faster. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 8 Sparse matrix\n", "Redo Exercise 5 but now use a *sparse* matrix. Obtain a solution for the head using $h_1^*=42$, $h_2^*=40$, and $N=10000$. All other parameters are the same as for Exercise 2. Create a plot of the head between the two canals. **Warning**: When you try to solve the problem with a regular (full) matrix and $N=10000$, you may run out of computer memory or the solve may take a *very* long time, and/or your program may hang. Don't try this, but if you accidentally do this and your Notebook doesn't recover, try to click on 'Kernel' in the menu bar at the top and then on 'Restart'." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 8" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solutions to the exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 1" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a,b,c,d: [ 1. 2. 1. -1.]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tp = np.array([0, 0.25, 0.5, 0.75])\n", "yp = np.array([ 3, 1, -3, 1])\n", "A = np.zeros((4, 4))\n", "rhs = np.zeros(4)\n", "for i in range(4):\n", " A[i] = np.cos(1 * np.pi * tp[i]), np.cos(2 * np.pi * tp[i]), \\\n", " np.cos(3 * np.pi * tp[i]), np.cos(4 * np.pi * tp[i]) # Store one row at a time\n", " rhs[i] = yp[i]\n", "sol = np.linalg.solve(A, rhs)\n", "print('a,b,c,d: ',sol)\n", "\n", "t = np.linspace(0, 1, 100)\n", "y = sol[0] * np.cos(1 * np.pi * t) + sol[1] * np.cos(2 * np.pi * t) + \\\n", " sol[2] * np.cos(3 * np.pi * t) + sol[3] * np.cos(4 * np.pi * t)\n", "plt.plot(t, y, 'b', label='wave')\n", "plt.plot(tp, yp, 'ro', label='data')\n", "plt.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 1\n", "\n", "Answers to Exercise 2" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1. 2. 4. 8. 16.]\n" ] } ], "source": [ "def fpoly(x, N):\n", " rv = np.zeros(N + 1)\n", " for n in range(N + 1):\n", " rv[n] = x ** n\n", " return rv\n", "\n", "print(fpoly(2, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 2\n", "\n", "Answers to Exercise 3" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3. 2.33333333 -6. 1.66666667]\n" ] } ], "source": [ "def solvepoly(x, y):\n", " N = len(x) - 1\n", " mat = np.zeros((N+1, N+1))\n", " for n in range(N+1):\n", " mat[n] = fpoly(x[n], N)\n", " par = np.linalg.solve(mat, y)\n", " return par\n", " \n", "xp = np.array([0, 1, 2, 3])\n", "yp = np.array([3, 1, -3, 1])\n", "a = solvepoly(xp, yp)\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 3\n", "\n", "Answers to Exercise 4" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3. 1. -3. 1.]\n" ] } ], "source": [ "def fpolyeval(x, a):\n", " rv = np.zeros(len(x))\n", " for n in range(len(a)):\n", " rv += a[n] * x ** n\n", " return rv\n", "\n", "print(fpolyeval(xp, a))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-1,4,100)\n", "y = fpolyeval(x, a)\n", "plt.plot(xp, yp, 'ko', label='data')\n", "plt.plot(x, y, label='fitted poly')\n", "plt.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 4\n", "\n", "Answers to Exercise 5" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "maximum head 22.45\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VNX9//HXJysQ9iWRPYAsgiJgRBQ3wLqg1qXWal2w\nLlirVVr77delrbW1tbX90drqt611t1htK9QFXBCpu8hikCUQEMJOEvZAINt8fn/M1KaYwAQyuTOT\n9/PxyGPuPXPPzOcMYT455557rrk7IiIiB5MSdAAiIpIYlDBERCQqShgiIhIVJQwREYmKEoaIiERF\nCUNERKKihCEiIlFRwhARkagoYYiISFTSgg6gMXXu3Nlzc3ODDkNEJGHMnz9/i7t3iebYpEoYubm5\nzJs3L+gwREQShpmtifZYDUmJiEhUYpYwzKynmc02s6VmtsTMbouU/8rMlpnZp2Y2zcza11O/yMwW\nmVm+manbICISsFj2MKqB2919MDAKuNnMBgMzgaPdfShQCNx5gNcY4+7D3D0vhnGKiEgUYpYw3H2T\nuy+IbJcBBUB3d3/D3asjh30E9IhVDCIi0nia5ByGmeUCw4E5+z11LfBqPdUceNPM5pvZxAO89kQz\nm2dm80pLSxsjXBERqUPME4aZtQZeACa5+65a5XcTHraaUk/Vk919GHAO4eGsU+s6yN0fcfc8d8/r\n0iWqmWEiInIIYpowzCydcLKY4u5Ta5VfA5wHXOH13PLP3TdEHkuAacDIWMYqIiIHFrPrMMzMgMeA\nAnefXKv8bOD7wGnuXl5P3Swgxd3LIttnAj+JVawiEp1QyNm6p5KSsn1s31PFvqoaKqpDX3isqK4h\nxYzMtBRapKd+4bFFeipd2mSS3TaTNplphL8uJN7F8sK90cBVwCIzy4+U3QX8DsgEZkZ+ST5y92+a\nWTfgUXcfD+QA0yLPpwHPuvtrMYxVRICqmhBrtu5hRfFuPivdzaad+yjeVUFpWfhxy+4KqkN1Dgoc\nshbpKeS0bUF2m0yyI489OrSif3ZrBuS0IadtphJKnLB6RoQSUl5enutKb5GDc3fWbC1n6aZdFBaX\nsaJkNyuKy1i9ZQ9VNf/5TuiYlfFfX+TZbTI//3LvmJVBy4xUMtNSaZGe8vlji/RUMlJTCLnX2fvY\nV1VDeWUNpWUVlJTto2RXBcVlFZTs2kdJ5HFPZc3nMbTJTOPInNYMyG5D/5zW9M9pw9Du7eiQlRHE\nR5d0zGx+tJcuJNXSICJSt8rqEEs27mT+mu3MK9rOvDXb2bK7AgAz6NmhFQNyWjN2UA4DclrTP7sN\n/bKzaJVx6F8RKRhpqSlkZTb8NbburqCweDcrS8ooLN7NipIy3iwo5vl56z4/5sjs1uT17sBxvTtw\nfG5HendqpZ5IjKmHIZKEqmtCLFi7g3cKS5lbtI2F63ewryoEQM+OLcnr3ZG83A4c26M9/bq0pmVG\nasARR2fr7gqWF5fxydodzCvaxvw129m1L3xZV+fWGRzXuwMj+3Ri7KBs+nTOCjjaxNCQHoYShkiS\n2Lm3ircLS3mroJh/FZayo7yK1BRjSLe2HNe7w+dJIqdti6BDbTShkLOiZDfz1mxjftF25q7Zxrpt\newHo2zmLsYOyGXdUDnm5HUhP1dJ5dVHCEGkmirbs4c2CYt4sKGZu0XZqQk7HrAxOH9iFcYNyOGVA\nZ9q2SA86zCa1bls5by0rYdayEj76bCuVNSHatkjjtIHZjBuUzZhB2bRr2bw+kwNRwhBJYtv3VPLK\npxt5YcEG8tftAGDQEW0+/2t6WM/2pKZoLB9gd0U1763YwlvLinlrWSlbdleQkZbCGUdlc/HwHpw2\nsEuz73koYYgkmYrqGmYvK2Hqgg3MXl5CVY0z6Ig2XDyiO+cc3ZWeHVsFHWLcC4Wc/PU7eCl/Iy8v\n3MjWPZV0zMrg/KFduXhED4b2aNcsT5orYYgkiUXrd/Lc3LW88ukmdu6tokubTC4c1o2LhvdgcLe2\nQYeXsKpqQrxTWMrUTzYwc2kxldUh+nbJ4isjevDVvB5kt0me8zwHo4QhksCqakK8vmQzT75fxLw1\n22mRnsLZQ47gohE9GN2vE2nNfAilse3cW8WrizYx9ZMNfLx6G+mpxvlDu3HN6FyG9qjzdj1JRQlD\nJAFt3V3Bc3PX8cyHa9i8ax+9O7Viwom5XJLXo9mduA7K6i17eOqDIv4xfz27K6oZ0as914zuwzlH\nH5G05zqUMEQSyNKNu3ji/dW8uHAjldUhTunfmW+MzuX0Admk6OR1IMr2VfHC/PU89eEaVm/ZQ07b\nTK48oTdfP6EXnVpnBh1eo1LCEEkAC9ft4MFZK3hrWQkt01P5ynHdmXBiLv1z2gQdmkSEQs7bhaU8\n8UER7xSW0iI9hStP6M3E0/omzXkOJQyROPbJ2u08OGsF/1peSvtW6dxwSl+uHNVb1wbEuZUlu/nD\nvz7jn/kbSEsxrjihN988rS/ZCX4hpBKGSBxasHY7D765grcLS+nQKp0bTu3L1Sfm0voQ1lqS4BRt\n2cNDs1cy7ZNw4vj6Cb246bR+CZs4lDBE4kj+uh1MnlnIO4WldMzK4IZT+nL1ib0PaVE+iR9rtu7h\nobdWMjWSOC4f2YtvjemXcENVShgicWD99nIeeG05Ly3cSMesDG48NTz0pESRXNZuLefh2St5YcF6\nMtNS+NaYI7nu5D60SE+MBR2VMEQCVLavij/86zMefW81KQYTT+nLjaf1U6JIckVb9nD/qwW8vqSY\nbu1a8L/nDOL8od3ifqabEoZIAKprQvxt3nomz1zOlt2VXDy8O987ayDd2rcMOjRpQh+t2sp905ey\neMMuju3Znh+eexR5uR2DDqteShgiTeydwlJ+Nr2A5cVlHJ/bgR+eN7hZXCUsdQuFnKmfbOBXry+j\neFcF5w7tyh1nD4rLNb+UMESayOad+7jnpcW8vqSYXh1bcec5gzj76COa5SJ28kXlldU88s4q/vT2\nKmrc+faYI7nxtH5kpMXPVeNKGCIxVhNypsxZwwOvLaeqJsSt4/pz/Sl9yExLjBOd0rQ279zHT6cv\nZfqnm+if3Zr7Lz4mboaplDBEYqhg0y7unLqI/HU7OKV/Z+678Gh6d9LtQOXg3lpWzA//uYQNO/Zy\n+che3HHOoMAv2GxIwtC0DZEo7a2s4cFZK3j03VW0a5nOb782jAuGddPwk0Rt7KAcTvhOJ34zs5DH\n31/NmwXF3HP+YM49pmtC/B6phyEShXdXlHL3tMWs3VbOpXk9uPOco+iQlRF0WJLAFm/YyZ1TF7Fo\nw07GDOzCTy88mh4dmv6kuIakRBpJeWU1989YxjMfraFv5yx+dtExnNivU9BhSZKorgnx5AdFTJ5Z\nSIoZ9355CBeP6N6kvQ0NSYk0gvx1O/ju8/ms3rqHG07pw+1nDkyYq3clMaSlpnD9KX05a8gR3P63\nhdz+94W8WVDMzy46ho5x2INVwhDZT1VNiIdnr+T3b60kp00mU64/gZP6dQ46LEliPTu24q8TR/Ho\nu6v49RvLmbdmOw9cMpQxA7ODDu2/xM9kYJE4sKp0N5f88UN+++YKLji2G69OOlXJQppEaopx42n9\nePHmk+nYKoNvPDGXH/xzEeWV1UGH9jn1MEQAd+cvc9bys+lLaZGeysNfH8G5Q7sGHZY0Q4O7teXF\nW0YzeWYhf353Fe+v3MrkS49leK8OQYemHobIjvJKbnh6Hj/852KOz+3I65NOVbKQQLVIT+Wu8Ufx\n7PWjqKiq4ZI/fsj//WsloVCwk5SUMKRZW7huB+f+7j3eLizlR+cN5ulrR5KToDfCkeRzYr9OvDrp\nVM4++ggeeG05Nzw9jx3llYHFo4QhzZK78/SHRXz1jx8C8LcbT+Tak/skxMVT0ry0a5nOQ5cP594v\nD+GdFaWc+7v3WLhuRyCxxCxhmFlPM5ttZkvNbImZ3RYp/5WZLTOzT81smpnVuaSnmZ1tZsvNbKWZ\n3RGrOKX52V1Rza3P5fOjF5cw+shOvPLtk+NifFikPmbGhJNy+fs3TwLgq3/8kKc/LKKpr6OL2YV7\nZtYV6OruC8ysDTAfuBDoAbzl7tVm9ksAd//f/eqmAoXAl4D1wFzgcndfeqD31IV7cjDLN5dx05T5\nFG3Zw+1nDuSm0/rF/Q1uRGrbUV7Jd/+2kLeWlXD+sd24/+JjDuu+8A25cC9mPQx33+TuCyLbZUAB\n0N3d33D3f88T+4hwAtnfSGClu69y90rgOeCCWMUqzcML89dzwcPvsWtvNVOuH8XNY45UspCE075V\nBo9encf3zx7I9E838uWH3mP55rImee8mOYdhZrnAcGDOfk9dC7xaR5XuwLpa++sjZSINVl0T4scv\nLeH2vy9kWM/2zLjtZC3vIQktJcX41ulHMuX6UezaW81lj3zInorYX68R8+swzKw18AIwyd131Sq/\nG6gGphzm608EJgL06tXrcF5KktDO8ipu+esC3l2xhetP7sMd5wwiLVVzPSQ5nNivEzNuO5klG3c1\nyT3jY/oOZpZOOFlMcfeptcqvAc4DxnndJ1E2AD1r7feIlH2Buz8CPALhcxiNE7kkg1Wlu7n+qXms\n217OA18ZyqXH9zx4JZEEk92mBdkDm2YqeMwShoXnJz4GFLj75FrlZwPfB05z9/J6qs8F+ptZH8KJ\n4jLg67GKVZLPuytKuXnKAtJSU3j2hlEcHyd3NxNJZLHsm48GrgLGmll+5Gc88BDQBpgZKfsjgJl1\nM7MZAJGT4rcArxM+Wf43d18Sw1glSbg7T31QxDVPzKVb+5a8ePNoJQuRRhKzHoa7vwfUNQVlRj3H\nbwTG19qfUd+xInWpqglxz0tLeHbOWs44KoffXjbssKYbish/0/8mSQq79lVx49Pz+XDVVr51ej++\nd+ZATZkVaWRKGJLwNu/cxzVPfMxnpbuZfOmxXDyirkt7RORwKWFIQltZUsaEx+eyo7ySJ64Zycn9\nde8KkVhRwpCENa9oG9c9NY/01BSev/FEju7eLuiQRJKaEoYkpNeXbObWv35Ct/YtefrakfTs2Cro\nkESSnhKGJJy/fLSGH724mKE92vP4NcfTMSsj6JBEmgUlDEkY7s7kmYX8/q2VjB2UzUNfH06rDP0K\nizQV/W+ThBAKOT98cTFT5qzl0rwe/PyiY7QmlEgTU8KQuFddE+L7L3zK1AUb+OZp/fjfswfqzngi\nAVDCkLhWVRNi0vP5TP90E9/90gC+PfZIJQuRgChhSNzaV1XDLc9+wpsFxdw9/ihuOLVv0CGJNGtK\nGBKX9lbWMPGZeby7Ygs/vWAIV52YG3RIIs2eEobEnd0V1Vz75FzmFW3jV5cM5at5uo+FSDxQwpC4\nsnNvFRMe/5hFG3by28uG8+VjuwUdkohEKGFI3NhRXskVj85hRfFu/nDFCM4cckTQIYlILUoYEhd2\n7avi6sc/ZkXxbh65+jhOH5gddEgish9d+SSB211RzYTHP6Zg0y7+eNUIJQuROKUehgSqvLKaa5+Y\ny6frd/Lw10cwdlBO0CGJSD3Uw5DA7Kuq4fqn5jFvzTYevGwYZx+tcxYi8Uw9DAnEvqoaJj4TvqXq\n5EuP5byhmg0lEu/Uw5AmV1kd4uYpC3insJRfXjyUi4brlqoiiUAJQ5pUVU2IW//6CbOWlXDfhUdz\n6fG6KE8kUShhSJMJhZzv/X0hry3ZzD3nD+bKUb2DDklEGkAJQ5qEu/OTV5byYv5G/uesgXxjdJ+g\nQxKRBlLCkCbx8OyVPPlBEded3Idvnd4v6HBE5BAoYUjMPTtnLb9+o5CLhnfn7vFH6X4WIglKCUNi\n6tVFm/jBPxcxZmAXHrhkKCkpShYiiUoJQ2Lmg8+2cNtz+Qzv1YH/u+I40nUPbpGEpv/BEhOLN+xk\n4tPzye3ciscm5NEyIzXokETkMClhSKNbvWUPEx7/mHYt03n62hNo3yoj6JBEpBEoYUijKinbx1WP\nzcGBp68byRHtWgQdkog0kpglDDPraWazzWypmS0xs9si5V+N7IfMLO8A9YvMbJGZ5ZvZvFjFKY2n\nvLKa656cx9bdlTxxzfH069I66JBEpBHFcvHBauB2d19gZm2A+WY2E1gMXAz8KYrXGOPuW2IYozSS\nmpBz61/zWbJxJ3++Oo9je7YPOiQRaWQxSxjuvgnYFNkuM7MCoLu7zwQ0Fz/J/Gx6AW8WFHPvl4cw\n7ijd00IkGTXJOQwzywWGA3MaUM2BN81svplNjEVc0jie+qCIx99fzTdG5zLhpNygwxGRGIn5/TDM\nrDXwAjDJ3Xc1oOrJ7r7BzLKBmWa2zN3fqeP1JwITAXr16tUoMUv0ZhUUc+/LS/jS4Bx+cO7goMMR\nkRg6aMIwsxbAecApQDdgL+HzENPdfclB6qYTThZT3H1qQwJz9w2RxxIzmwaMBL6QMNz9EeARgLy8\nPG/Ie8jhWbxhJ7c8+wlHd2/Hg5cNI1VXcYsktQMOSZnZvcD7wImEh5P+BPyN8AntX5jZTDMbWk9d\nAx4DCtx9ckOCMrOsyIlyzCwLOJNwkpI4sXHHXq59ci4dszJ4dEIerTJ080aRZHew/+Ufu/s99Tw3\nOTJcVN840GjgKmCRmeVHyu4CMoHfA12A6WaW7+5nmVk34FF3Hw/kANMiJ8bTgGfd/bWoWyUxVbav\nimufnMveyhqeuekEstvoWguR5uCACcPdpx/k+RKgpJ7n3gPqG6OYVsfxG4Hxke1VwLEHem8JRnVN\niFue/YSVJbt54hvHM/CINkGHJCJNJKpxhMgFdncDvSN1DHB3r3M4SpLXL19bxtuFpdx/8TGc0r9L\n0OGISBOKduB5CvA/wCIgFLtwJJ69MH89f353NRNO7M3lIzUjTaS5iTZhlLr7SzGNROJa/rod3Dlt\nESf27cQPztP0WZHmKNqEcY+ZPQrMAir+XdjQqbKSmIp37WPi0/PIaZvJ/10xQve1EGmmok0Y3wAG\nAen8Z0jKASWMJLevqoaJz8xnd0U1T193Eh2ytFS5SHMVbcI43t0HxjQSiTvuzl3TFrFw3Q7+eOVx\nDDqibdAhiUiAoh1b+MDMNHDdzDz23mqmLtjApDP6c/bRRwQdjogELNoexigg38xWEz6HoWm1Se6d\nwlJ+PqOAs4ccwa1j+wcdjojEgWgTxtkxjULiStGWPdzy7AIG5LTh/116LClaI0pEOEjCMLPW7r7b\n3dcc7JjGD02CUF5ZzY3PzCclxfjz1XlkZWqNKBEJO9g5jBfN7P+Z2amRRQABMLO+Znadmb2Oeh9J\nw925e9piCkvKePCy4fTs2CrokEQkjhxsLalxZjYeuBEYbWYdCK9UuxyYDkxw982xD1OawpQ5a5n2\nyQa+c8YAThugZT9E5L8ddLzB3WcAM5ogFglQ/rod/OTlpZw+sAvfHntk0OGISBzSJbvCtj2V3Dxl\nAV3aZPKbS4fpJLeI1ElnNJu5mpBz23OfUFpWwT9uOlFXcotIvZQwmrkHZ63g3RVb+PlFxzC0R/ug\nwxGROHawabUdD/S8u29r3HCkKc1eVsLvZq3gKyN6cPnInkGHIyJx7mA9jPmEFxk0wrdi3R7Zbg+s\nBfrENDqJmXXbypn0fD6DjmjDfRceTeR2uCIi9TrgSW937+PufYE3gfPdvbO7dwLOA95oigCl8VVU\n1/CtKQsIhZw/XnkcLTNSgw5JRBJAtLOkRkWm1wLg7q8CJ8UmJIm1+2csY9GGnfz60mPJ7Zx18Aoi\nIkR/0nujmf0A+Etk/wpgY2xCkliaubSYJz8o4pqTcjlriFagFZHoRdvDuBzoAkyL/GRHyiSBbNyx\nl//5x0KGdGvLneMHBR2OiCSYqHoYkdlQt8U4Fomh6poQtz33CVXVIR76+ggy03TeQkQaJqqEYWZd\ngO8DQ4AW/y5397Exiksa2e9mrWBu0XZ++7Vh9NF5CxE5BNEOSU0BlhGeRnsvUATMjVFM0sg+WLmF\n389eySXH9eDC4d2DDkdEElS0CaOTuz8GVLn72+5+LaDeRQLYsruC257Pp2/nLH5ywZCgwxGRBBbt\nLKmqyOMmMzuX8AypA14FLsELhZzv/X0hO/dW8fS1I2mVoZVgROTQRfsNcp+ZtQNuB34PtAW+E7Oo\npFE8+t4q/rW8lJ9eeDRHdW0bdDgikuCinSX1SmRzJzAmduFIY8lft4MHXlvOOUcfwZUn9Ao6HBFJ\nAlGdwzCzAWY2y8wWR/aHRi7kkzi0u6Ka2577hJy2LfjFxUO1TpSINIpoT3r/GbiTyLkMd/8UuCxW\nQcnh+enLS1m3rZzfXjaMdq3Sgw5HRJJEtAmjlbt/vF9ZdWMHI4fv9SWbeX7eOm46vR/H52pegog0\nnmgTxhYz60d4qXPM7BJg04EqmFlPM5ttZkvNbImZ3RYp/2pkP2RmeQeof7aZLTezlWZ2R5RxNmsl\nu/Zxxwufckz3dtw2bkDQ4YhIkol2ltTNwCPAIDPbAKwGrjxInWrgdndfYGZtgPlmNhNYDFwM/Km+\nimaWCjwMfAlYD8w1s5fcfWmU8TY77s7//ONT9lbV8JuvDSMjTbdrF5HGFe0sqVXAGWaWBaS4e1kU\ndTYR6YW4e5mZFQDd3X0mcLATsSOBlZH3xcyeAy4AlDDq8cxHa3i7sJSfXjCEI7NbBx2OiCShaNeS\nygS+AuQCaf/+snf3n0RZPxcYDsyJMq7uwLpa++uBE+p57YnARIBevZrn9NGVJWX8bHoBpw/swpWj\negcdjogkqWjHLV4k/Bd+NbCn1s9BmVlr4AVgkrvvOpQgD8TdH3H3PHfP69KlS2O/fNyrrA4x6fl8\nsjLTeOASTaEVkdiJ9hxGD3c/u6EvbmbphJPFFHef2oCqG4Cetd8/Uib7+e2bhSzesIs/XXUc2W1a\nHLyCiMghiraH8YGZHdOQF7bwn7qPAQXuPrmBcc0F+ptZHzPLIHzNx0sNfI2k9/Hqbfzh7c/4Wl5P\n3T1PRGLugD0MM1tEeCptGvANM1sFVAAGuLsPPUD10cBVwCIzy4+U3QVkEl6Pqgsw3czy3f0sM+sG\nPOru49292sxuAV4HUoHH3X3JoTcz+ZTtq+I7z+fTq2MrfnT+4KDDEZFm4GBDUucd6gu7+3uEE0td\nptVx/EZgfK39GcCMQ33/ZHffKwVs2rmXv3/zJLIytQqtiMTeAb9p3H1NUwUi0Zu9vOTzq7mP690h\n6HBEpJnQ1V0JZufeKu58YRH9s1sz6Yz+QYcjIs2IxjISzE9fWUrp7gr+dNVxZKalBh2OiDQj6mEk\nkLeWFfOP+eu56bR+HNuzfdDhiEgzo4SRIHaWV3HHC4sYmNOGb487MuhwRKQZ0pBUgrj35SVs3VPJ\n49ccr6EoEQmEehgJYObSYqZ+soGbxxzJ0d3bBR2OiDRTShhxbvueSu6atoijurblljEaihKR4GhI\nKs79+OUlbN9TyZPfOF73uBCRQOkbKI69tngzL+Zv5Ntj+zOkm4aiRCRYShhxakd5JT/45yKGdGvL\nt8b0CzocERENScWr+6YXsL28iqeuHUl6qvK6iARP30Rx6L0VW/jH/PXceGpfDUWJSNxQwogzeytr\nuHPap/TtnMWt47RWlIjEDw1JxZnJM5ezbttenps4ihbpukBPROKHehhx5NP1O3jsvdVcPrIXo/p2\nCjocEZH/ooQRJ6pqQvzvC4vo3DqTO8cPCjocEZEv0JBUnHjknVUUbNrFn646jrYt0oMOR0TkC9TD\niAOrSnfz4KwVjD/mCM4ackTQ4YiI1EkJI2ChkHPH1EW0SEvhx18eEnQ4IiL1UsII2HNz1/Hx6m3c\nfe5RZLdpEXQ4IiL1UsIIUPGufdw/o4CT+nXi0ryeQYcjInJAShgB+vFLS6isCfHzi47BzIIOR0Tk\ngJQwAjJ7WQmvLt7MreP6k9s5K+hwREQOSgkjAHsra/jRS4s5Mrs1N5zSN+hwRESiouswAvDQ7BWf\nL/+hmyKJSKLQt1UTW1lSxiPvrOLiEd21/IeIJBQljCbk7tw9bTGtMtK4a/xRQYcjItIgShhNaOqC\nDcxZvY07zhlE59aZQYcjItIgShhNZEd5JT+bUcCIXu35mq65EJEEpITRRH752nJ27q3ivguPISVF\n11yISOKJWcIws55mNtvMlprZEjO7LVLe0cxmmtmKyGOHeuoXmdkiM8s3s3mxirMpzF+zjb9+vJZr\nR+cyuFvboMMRETkksexhVAO3u/tgYBRws5kNBu4AZrl7f2BWZL8+Y9x9mLvnxTDOmKquCXH3tMV0\nbdeCSWcMCDocEZFDFrOE4e6b3H1BZLsMKAC6AxcAT0UOewq4MFYxxIMnPyhi2eYy7jl/CFmZuuxF\nRBJXk5zDMLNcYDgwB8hx902RpzYDOfVUc+BNM5tvZhNjHmQMbNq5l8kzCxk3KJuzhtTXTBGRxBDz\nP3nNrDXwAjDJ3XfVXmTP3d3MvJ6qJ7v7BjPLBmaa2TJ3f6eO158ITATo1atX4zfgMPx8xjKqQ86P\nvzxEiwuKSMKLaQ/DzNIJJ4sp7j41UlxsZl0jz3cFSuqq6+4bIo8lwDRgZD3HPeLuee6e16VLl8Zu\nwiH78LOtvLxwIzed1o+eHVsFHY6IyGGL5SwpAx4DCtx9cq2nXgImRLYnAC/WUTfLzNr8exs4E1gc\nq1gbW3VNiB+/tITu7Vty0+n9gg5HRKRRxLKHMRq4ChgbmRqbb2bjgV8AXzKzFcAZkX3MrJuZzYjU\nzQHeM7OFwMfAdHd/LYaxNqpnPlrD8uIyfnjeYFqkpwYdjohIo4jZOQx3fw+ob+B+XB3HbwTGR7ZX\nAcfGKrZY2rK7gskzCzmlf2ed6BaRpKIrvRvZr15bzt7KGu45Xye6RSS5KGE0ovx1O3h+3jquPbkP\nR2a3DjocEZFGpYTRSEIh554XF5PdJpNvjz0y6HBERBqdEkYj+fv8dSxcv5M7xw+iTYv0oMMREWl0\nShiNYGd5FQ+8tpzjcztw4bDuQYcjIhITShiN4DdvFrK9vFJXdItIUlPCOEwFm3bx9IdFXHFCb4Z0\naxd0OCIiMaOEcRjcnXtfXkK7luncfqaWLheR5KaEcRheX1LMR6u28d0vDaB9q4ygwxERiSkljENU\nUV3Dz2eWQ/9NAAAJX0lEQVQUMCCnNZePjK9VckVEYkEJ4xA9+X4Ra7eV88PzBpOWqo9RRJKfvukO\nwZbdFfz+rZWMHZTNKf3jZ0l1EZFYUsI4BJNnFrKvqoa7xh8VdCgiIk1GCaOBCjbt4rmP13LVib21\nXpSINCtKGA3g7tw3fSltW6Zz27j+QYcjItKklDAa4M2CEt5fuZVJ4/prGq2INDtKGFGqrA7xs+lL\n6dcliytG9Q46HBGRJqeEEaWnPyyiaGs5PzhvMOmaRisizZC++aKwbU8lD85awWkDujBmYHbQ4YiI\nBEIJIwq/mVlIeWUNPzhX02hFpPlSwjiIwuIypsxZwxUn9KJ/TpugwxERCYwSxkH84tVlZGWmMekM\nrUYrIs2bEsYBfPDZFt5aVsLNY46kY5am0YpI86aEUY9QyLl/xjK6tWvBNSflBh2OiEjglDDq8fKn\nG1m0YSffO2sgLdJTgw5HRCRwShh1qKiu4YHXljO4a1suHNY96HBEROKCEkYdnv5gDRt27OWu8UeR\nkmJBhyMiEheUMPazo7yS37+1glMHdOHk/p2DDkdEJG4oYezn4dkrKauo5s5zBgUdiohIXFHCqGXd\ntnKe+mANXxnRg6O6tg06HBGRuKKEUcuv31iOGdx+pi7SExHZX8wShpn1NLPZZrbUzJaY2W2R8o5m\nNtPMVkQeO9RT/2wzW25mK83sjljF+W+L1u/kxfyNXHdyH7q2axnrtxMRSTix7GFUA7e7+2BgFHCz\nmQ0G7gBmuXt/YFZk/7+YWSrwMHAOMBi4PFI3Jtydn88ooGNWBt88vV+s3kZEJKHFLGG4+yZ3XxDZ\nLgMKgO7ABcBTkcOeAi6so/pIYKW7r3L3SuC5SL2Y+NfyUj5ctZVbxx5J2xbpsXobEZGE1iTnMMws\nFxgOzAFy3H1T5KnNQE4dVboD62rtr4+UNbqakHP/qwXkdmrF10/QnfREROqTFus3MLPWwAvAJHff\nZfafC+Hc3c3MD/P1JwITAXr16tXg+nurahjeswOnD+xCRprmAIiI1CemCcPM0gkniynuPjVSXGxm\nXd19k5l1BUrqqLoB6Flrv0ek7Avc/RHgEYC8vLwGJ5/WmWn88pKhDa0mItLsxHKWlAGPAQXuPrnW\nUy8BEyLbE4AX66g+F+hvZn3MLAO4LFJPREQCEssxmNHAVcBYM8uP/IwHfgF8ycxWAGdE9jGzbmY2\nA8Ddq4FbgNcJnyz/m7sviWGsIiJyEDEbknL394D6Vu4bV8fxG4HxtfZnADNiE52IiDSUzvKKiEhU\nlDBERCQqShgiIhIVJQwREYmKEoaIiETF3A/rQuu4YmalwJpDrN4Z2NKI4SQCtTn5Nbf2gtrcUL3d\nvUs0ByZVwjgcZjbP3fOCjqMpqc3Jr7m1F9TmWNKQlIiIREUJQ0REoqKE8R+PBB1AANTm5Nfc2gtq\nc8zoHIaIiERFPQwREYlKs08YZna2mS03s5Vm9oX7iycqM+tpZrPNbKmZLTGz2yLlHc1sppmtiDx2\nqFXnzsjnsNzMzgou+kNnZqlm9omZvRLZT+r2AphZezP7h5ktM7MCMzsxmdttZt+J/E4vNrO/mlmL\nZGyvmT1uZiVmtrhWWYPbaWbHmdmiyHO/s9p3sWsod2+2P0Aq8BnQF8gAFgKDg46rkdrWFRgR2W4D\nFAKDgQeAOyLldwC/jGwPjrQ/E+gT+VxSg27HIbT7u8CzwCuR/aRub6QtTwHXR7YzgPbJ2m7Ct2pe\nDbSM7P8NuCYZ2wucCowAFtcqa3A7gY+BUYRXD38VOOdQY2ruPYyRwEp3X+XulcBzwAUBx9Qo3H2T\nuy+IbJcRvq9Id8Lteypy2FPAhZHtC4Dn3L3C3VcDKwl/PgnDzHoA5wKP1ipO2vYCmFk7wl8sjwG4\ne6W77yC5250GtDSzNKAVsJEkbK+7vwNs26+4Qe2M3NW0rbt/5OHs8XStOg3W3BNGd2Bdrf31kbKk\nYma5wHBgDpDj7psiT20GciLbyfBZ/Bb4PhCqVZbM7YXwX5OlwBORobhHzSyLJG23u28Afg2sBTYB\nO939DZK0vXVoaDu7R7b3Lz8kzT1hJD0za034vuqT3H1X7ecif3EkxTQ5MzsPKHH3+fUdk0ztrSWN\n8LDFH9x9OLCH8FDF55Kp3ZEx+wsIJ8puQJaZXVn7mGRq74EE0c7mnjA2AD1r7feIlCUFM0snnCym\nuPvUSHFxpJtK5LEkUp7on8Vo4MtmVkR4aHGsmf2F5G3vv60H1rv7nMj+PwgnkGRt9xnAancvdfcq\nYCpwEsnb3v01tJ0bItv7lx+S5p4w5gL9zayPmWUAlwEvBRxTo4jMhHgMKHD3ybWeegmYENmeALxY\nq/wyM8s0sz5Af8InyxKCu9/p7j3cPZfwv+Nb7n4lSdref3P3zcA6MxsYKRoHLCV5270WGGVmrSK/\n4+MIn59L1vbur0HtjAxf7TKzUZHP6+padRou6JkAQf8Qvo94IeFZBXcHHU8jtutkwt3VT4H8yM94\noBMwC1gBvAl0rFXn7sjnsJzDmEkR9A9wOv+ZJdUc2jsMmBf5t/4n0CGZ2w3cCywDFgPPEJ4ZlHTt\nBf5K+DxNFeGe5HWH0k4gL/JZfQY8ROSC7UP50ZXeIiISleY+JCUiIlFSwhARkagoYYiISFSUMERE\nJCpKGCIiEhUlDBERiYoShkiMmFlLM3vbzFIbUOcWM7s2lnGJHCpdhyESI2Z2M5Dm7g82oE4r4H0P\nrwslElfUwxBpIDM73sw+jdy4JytyM5+j6zj0CiLLMJjZ6ZHexotmtsrMfmFmV5jZx5Gb2/QDcPdy\noMjMEmIJbmle0oIOQCTRuPtcM3sJuA9oCfzF3RfXPiayNllfdy+qVXwscBThexysAh5195EWvhvi\nt4FJkePmAaeQ2GseSRJSwhA5ND8hvHjlPuDWOp7vDOzYr2yuR+5lYGafAW9EyhcBY2odVwIMatRo\nRRqBhqREDk0noDXh29+2qOP5vXWUV9TaDtXaD/Hff7y1iNQXiStKGCKH5k/AD4EpwC/3f9LdtwOp\nZlZXMjmYAYRXFxWJK0oYIg1kZlcDVe7+LPAL4HgzG1vHoW8QXma+oUYDMw8jRJGY0LRakRgxsxHA\nd9z9qgbUGQ58tyF1RJqKehgiMeLuC4DZDblwj/DJ8h/GKCSRw6IehoiIREU9DBERiYoShoiIREUJ\nQ0REoqKEISIiUVHCEBGRqPx/Cs1ARlvepPwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "k = 10\n", "D = 10\n", "h1star = 20\n", "h2star = 22\n", "L = 1000\n", "P = 0.001\n", "N = 40\n", "\n", "d0 = -2 * np.ones(N + 1) # main diagonal\n", "d0[0] = 1 # first value of main diagonal is 1\n", "d0[-1] = 1 # last value of main diagonal is 1\n", "dplus1 = np.ones(N) # diagonal right above main diagonal, position 1\n", "dplus1[0] = 0 # first value of diagonal is 0\n", "dmin1 = np.ones(N) # diagonal right below main diagonal, position -1\n", "dmin1[-1] = 0 # last value of diagonal is 0\n", "A = np.diag(d0, 0) + np.diag(dplus1, 1) + np.diag(dmin1, -1)\n", "# Right hand side\n", "delx = L / N\n", "rhs = -P * delx ** 2 / (k * D) * np.ones(N + 1)\n", "rhs[0] = h1star\n", "rhs[-1] = h2star\n", "# Solve for the head and plot\n", "h = np.linalg.solve(A, rhs)\n", "x = np.linspace(0, L, N + 1)\n", "plt.plot(x, h)\n", "plt.xlabel('x (m)')\n", "plt.ylabel('head (m)')\n", "print('maximum head ', np.max(h))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 5\n", "\n", "Answers to Exercise 6" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "maximum value after 10 timesteps is: 0.942582661527\n", "maximum value after 20 timesteps is: 0.774232516343\n", "maximum value after 30 timesteps is: 0.611765747348\n", "maximum value after 40 timesteps is: 0.480122757381\n", "maximum value after 50 timesteps is: 0.376368780322\n" ] }, { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cv = 1e-6 # m^2/s\n", "h = 2 # m\n", "N = 40\n", "delt = 4e4 # seconds\n", "#\n", "delz = h / N\n", "mu = delz ** 2 / (cv * delt)\n", "\n", "d0 = -(2 + mu) * np.ones(N + 1)\n", "d0[-1] = 1\n", "dp1 = np.ones(N)\n", "dp1[0] = 2\n", "dm1 = np.ones(N)\n", "dm1[-1] = 0\n", "A = np.diag(d0) + np.diag(dp1, 1) + np.diag(dm1, -1)\n", "\n", "p = np.ones(N + 1)\n", "for i in range(5):\n", " for j in range(10):\n", " rhs = -mu * p\n", " rhs[-1] = 0\n", " p = np.linalg.solve(A, rhs)\n", " plt.plot(np.arange(0, h + 0.01, delz), p, label=str((i + 1) * 10) + ' timesteps')\n", " print('maximum value after', 10 * ( i + 1), 'timesteps is:', p[0])\n", "plt.xlim(0, 2)\n", "plt.legend(loc='best')\n", "plt.xlabel('z')\n", "plt.ylabel('p')\n", "plt.yticks(np.linspace(0, 1, 11))\n", "plt.title('Consolidation');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 6\n", "\n", "Answers to Exercise 7" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "maximum value after 10 timesteps is: 0.942582661527\n", "maximum value after 20 timesteps is: 0.774232516343\n", "maximum value after 30 timesteps is: 0.611765747348\n", "maximum value after 40 timesteps is: 0.480122757381\n", "maximum value after 50 timesteps is: 0.376368780322\n" ] }, { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cv = 1e-6 # m^2/s\n", "h = 2 # m\n", "N = 40\n", "delt = 4e4 # seconds\n", "#\n", "delz = h / N\n", "mu = delz ** 2 / (cv * delt)\n", "\n", "d0 = -(2 + mu) * np.ones(N + 1)\n", "d0[-1] = 1\n", "dp1 = np.ones(N)\n", "dp1[0] = 2\n", "dm1 = np.ones(N)\n", "dm1[-1] = 0\n", "A = np.diag(d0) + np.diag(dp1, 1) + np.diag(dm1, -1)\n", "Ainv = np.linalg.inv(A)\n", "\n", "p = np.ones(N + 1)\n", "for i in range(5):\n", " for j in range(10):\n", " rhs = -mu * p\n", " rhs[-1] = 0\n", " p = Ainv @ rhs\n", " plt.plot(np.arange(0, h + 0.01, delz), p, label=str((i + 1) * 10) + ' timesteps')\n", " print('maximum value after', 10 * ( i + 1), 'timesteps is:', p[0])\n", "plt.xlim(0, 2)\n", "plt.legend(loc='best')\n", "plt.xlabel('z')\n", "plt.ylabel('p')\n", "plt.yticks(np.linspace(0, 1, 11))\n", "plt.title('Consolidation');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 7\n", "\n", "Answers to Exercise 8" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.sparse import diags\n", "from scipy.sparse.linalg import spsolve \n", "k = 10\n", "D = 10\n", "h1star = 42\n", "h2star = 40\n", "L = 1000\n", "P = 0.001\n", "N = 10000\n", "d0 = -2 * np.ones(N + 1) # main diagonal\n", "d0[0] = 1 # first value of main diagonal is 1\n", "d0[-1] = 1 # last value of main diagonal is 1\n", "dplus1 = np.ones(N) # diagonal right above main diagonal, position 1\n", "dplus1[0] = 0 # first value of diagonal is 0\n", "dmin1 = np.ones(N) # diagonal right below main diagonal, position -1\n", "dmin1[-1] = 0 # last value of diagonal is 0\n", "A = diags([dmin1, d0, dplus1], [-1, 0, 1], format='csc')\n", "# Right hand side\n", "delx = L / N\n", "rhs = -P * delx ** 2 / (k * D) * np.ones(N + 1)\n", "rhs[0] = h1star\n", "rhs[-1] = h2star\n", "h = spsolve(A, rhs)\n", "plt.plot(h)\n", "plt.xlabel('node number')\n", "plt.ylabel('head (m)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 8" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 1 }