diff --git a/notebooks/pdes.ipynb b/notebooks/pdes.ipynb index edb0585..bb634bc 100644 --- a/notebooks/pdes.ipynb +++ b/notebooks/pdes.ipynb @@ -28,6 +28,45 @@ "- Distributed sparse matrix-vector product" ] }, + { + "cell_type": "markdown", + "id": "a343cca6", + "metadata": {}, + "source": [ + "
\n", + "Note: Do not forget to execute the cell below before starting this notebook! \n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "821ac5e2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pdes_check_1 (generic function with 1 method)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using Printf\n", + "function answer_checker(answer,solution)\n", + " if answer == solution\n", + " \"🥳 Well done! \"\n", + " else\n", + " \"It's not correct. Keep trying! 💪\"\n", + " end |> println\n", + "end\n", + "pdes_check_1(answer)=answer_checker(answer, \"b\")" + ] + }, { "cell_type": "markdown", "id": "da4d45cd", @@ -35,7 +74,7 @@ "source": [ "## Mini project\n", "\n", - "- Simulating the temperature distribution in a closed room" + "For the demonstration of different numberical methods we will use the example project of simulating the temperature distribution in a closed room. " ] }, { @@ -45,9 +84,9 @@ "source": [ "### Problem statement\n", "\n", - "- Given the temperature at the boundary of a room (walls, window, heater)\n", - "- Predict the temperature at any point of the room\n", - "- Compute it in parallel" + "Given the temperature at the boundary of a room, predict the temperature at any point in the room. The illustration below shows the temperature at different intervals of the room boundary (including a window and a heater). \n", + "\n", + "We will discuss the serial implementation first and learn how to compute it in parallel afterwards." ] }, { @@ -72,7 +111,10 @@ "source": [ "### Laplace equation\n", "\n", - "$\\dfrac{\\partial^2 u(x,y)}{\\partial x^2} + \\dfrac{\\partial^2 u(x,y)}{\\partial y^2} = 0$\n" + "Assuming that the room is isolated, it can be shown that the temperature in the room can be described using the [Laplace equation](https://en.wikipedia.org/wiki/Laplace%27s_equation)\n", + "\n", + "\n", + "$$\\dfrac{\\partial^2 u(x,y)}{\\partial x^2} + \\dfrac{\\partial^2 u(x,y)}{\\partial y^2} = 0.$$\n" ] }, { @@ -132,13 +174,15 @@ "source": [ "### Numerical methods for PDEs\n", "\n", + "There are several methods for solving PDEs: \n", + "\n", "- Finite difference method (FDM)\n", "- Finite element method (FEM)\n", "- Finite volume method (FVM)\n", "- Boundary element method (BEM)\n", "- Meshfree methods\n", "\n", - "Main idea: Transform a PDE into a system of algebraic equations.\n" + "All of them follow the same main idea: to transform a PDE into a system of linear equations. The problem is first discretized into a computational mesh. The solution to the PDE at any point of the mesh is then given by the solution for vector x. \n" ] }, { @@ -164,8 +208,7 @@ "source": [ "### Finite Difference method\n", "\n", - " - Pro: Easy to implement and computationally efficient\n", - " - Con: Difficult to handle complex geometries\n" + "To solve the temperature distribution in the room, we choose the Finite Difference method. The advantage of this method is that it is easy to implement and computationally efficient. On the other hand, it is not suitable for more complex geometries. " ] }, { @@ -188,9 +231,9 @@ "id": "54a8f290", "metadata": {}, "source": [ - "- Goal: Compute the temperature at each grid point\n", - "- The (unknown) values can be stored in a computer using an array\n", - "- `u[i,j]` is the temperature at point $(i,j)$" + "With the finite difference method, we first model the room as a grid, which can be stored using an array. Each entry of the matrix `u[i,j]` represents the temperature in the room at point $(i,j)$. The goal is now to compute the temperature at each grid point. \n", + "\n", + "Let's set up the grid matrix for our problem." ] }, { @@ -205,10 +248,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "b3b69c74", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "8×8 Matrix{Float64}:\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", + " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "N = 8\n", "u = zeros(N,N)" @@ -216,10 +278,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "c7af2b38", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "fill_boundary! (generic function with 1 method)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "function fill_boundary!(u)\n", " u_window = 5.0\n", @@ -248,10 +321,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "76888875", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "8×8 Matrix{Float64}:\n", + " 20.0 20.0 40.0 20.0 20.0 20.0 20.0 20.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 20.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 20.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 20.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 20.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0\n", + " 20.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0\n", + " 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "fill_boundary!(u)" ] @@ -261,12 +353,14 @@ "id": "53231e30", "metadata": {}, "source": [ - "### Data Visualization" + "### Data Visualization\n", + "\n", + "To illustrate the solution, we also write a visualization function that plots the temperature of the room as a heatmap. " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "e29f8eaf", "metadata": {}, "outputs": [], @@ -276,10 +370,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "b75d45cf", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "visualize (generic function with 1 method)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "function visualize(u;title=\"Temperature distribution\")\n", " xlabel=\"x-coordinate\"\n", @@ -297,41 +402,559 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "b5a0362c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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YSFWbeTIkXw+v0uXLr/99tuQIUPoJwYFBdGPdu3ataysrKioiE4bourq6nJzcx8/fkxvWllZmZqaSvOiAAAUAUWIsCX1s7KymF88QkinTp14PB6zmZqaOnv27F27dtGj2aWlpczwtZKSkqamZlPrMEnQfJ5IT09fvnz5unXrlixZ0tK9E0IqKir09PSYTU1NzfLycrE6ERERTk5OFEX9/vvv48aNe/XqlYmJSUVFBXPtPPoFl5WVNcwTqamply9fjouLozcDAgJa1wEHAB+IioqKtjycsrKyurq6hAoUkbahQDt+/PjNmzeZzfHjx3/77bf0/YyMDD8/vzVr1owbN44uMTExYc42EggEFRUVJiYmLYqfSJMniouLT5w4sXXr1pbumsbj8UpKSkT31vD/fbpZxOFwFixYsHXr1ujo6DFjxog+saioiBDSaEPBycnJwsJiw4YNrQsPAD402trabIfwXpYsWbJo0aKG5VlZWUOGDJk3b97cuXOZwu7du//777/0/djYWD09PUtLy5YesfnxCUdHRz09vWfPnrV017SePXtGR0fT9xMSEjgcjr29fVOV6+rqysvL6e4s0SdGR0c7Ojo2PCkYAKC9E7bk1pTi4uKhQ4c6Ozv36tXr2rVr165dKywsJITMmDHj3r17x44dS0tL+/777z///HNVVdWWRth8e0JDQ2Pnzp2LFi3S1NT09vZWUmrZpY3Gjx//zTffhISEDB8+fMWKFTNnzqQ7y1asWKGtrb169eqkpKSIiAgPDw+BQPDbb7+ZmZl5enoSQmbNmtWjR499+/Y5ODisWrVKdJYfAECHIf0AtQRFRUXW1tZVVVWbNm2iS3766SdjY2NTU9MzZ8788MMPP/zwg7+/f3BwcCt23nyeqK+v/+GHH/Ly8nx9fVVVVc3NzblcLv2QqalpVFSU5KdraGhcv3593bp1Fy9e9PX1XbVqFV3epUsXun2gp6f3+vXryMhIVVXV3r177969m77stq2t7fnz57ds2VJSUjJ37tx58+a14uUBACi4lo5jN8rOzu7q1auNPjRkyBD65KBWe6/rY+vr60tzDCcnp6NHj4oVfvnll/QdCwuLv/76q9Enenl5eXl5SXMIAACQk+bzhJKSUlO/4wAA8J7a8TqATREIBLjcKQCArAgpouDriks7KH3hwgVfX18TExMVFRVzc/NRo0bh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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "visualize(u)" ] }, - { - "cell_type": "markdown", - "id": "8e683fe1", - "metadata": {}, - "source": [ - "### How to find the temperature at the interior points?\n", - "\n", - "- We have an unknown for each interior point\n", - "- We need an equation for each unknown\n", - "- How to define these equations?\n" - ] - }, { "cell_type": "markdown", "id": "7f7a0f7f", "metadata": {}, "source": [ - "### Finite Difference stencil\n", + "### How to find the temperature at the interior points?\n", "\n", + "To set up a system of linear equations, we have to find one equation for each unknown value in the grid. The Laplace equation can be approximated by the following linear equation:\n", "\n", + "$$\\dfrac{\\partial^2 u}{\\partial x^2} + \\dfrac{\\partial^2 u}{\\partial y^2} = 0 $$\n", "\n", - "$\\dfrac{\\partial^2 u}{\\partial x^2} + \\dfrac{\\partial^2 u}{\\partial y^2} = 0 $\n", + "$$\\downarrow$$\n", "\n", - "$\\downarrow$\n", + "$$u_{i-1,j} + u_{i+1,j} + u_{i,j-1} + u_{i,j+1} - 4u_{i,j} = 0.$$\n", "\n", - "$u_{i-1,j} + u_{i+1,j} + u_{i,j-1} + u_{i,j+1} - 4u_{i,j} = 0$\n", - "\n" + "This approximation computes the value at point $(i,j)$ by combining the values of its neighbors. \n" ] }, { @@ -357,18 +980,30 @@ "source": [ "### System of linear equations\n", " \n", - " - At each interior point we have an equation\n", - " - All these equations can be arranged in array form\n", + "We can now obtain this kind of equation for every unknown point in the grid (= all the interior points). All these equations can be arranged in array form\n", " \n", - "$Ax=b$" + "$$Ax=b.$$\n", + "\n", + "Next we create the matrix $A$: " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "ec0622d6", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "generate_system_sparse (generic function with 1 method)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "using SparseArrays\n", "function generate_system_sparse(u)\n", @@ -410,10 +1045,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "a5cc7201", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "9×9 SparseMatrixCSC{Float64, Int64} with 33 stored entries:\n", + " 4.0 -1.0 ⋅ -1.0 ⋅ ⋅ ⋅ ⋅ ⋅ \n", + " -1.0 4.0 -1.0 ⋅ -1.0 ⋅ ⋅ ⋅ ⋅ \n", + " ⋅ -1.0 4.0 ⋅ ⋅ -1.0 ⋅ ⋅ ⋅ \n", + " -1.0 ⋅ ⋅ 4.0 -1.0 ⋅ -1.0 ⋅ ⋅ \n", + " ⋅ -1.0 ⋅ -1.0 4.0 -1.0 ⋅ -1.0 ⋅ \n", + " ⋅ ⋅ -1.0 ⋅ -1.0 4.0 ⋅ ⋅ -1.0\n", + " ⋅ ⋅ ⋅ -1.0 ⋅ ⋅ 4.0 -1.0 ⋅ \n", + " ⋅ ⋅ ⋅ ⋅ -1.0 ⋅ -1.0 4.0 -1.0\n", + " ⋅ ⋅ ⋅ ⋅ ⋅ -1.0 ⋅ -1.0 4.0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "N = 5\n", "u = zeros(N,N)\n", @@ -421,6 +1076,16 @@ "A" ] }, + { + "cell_type": "markdown", + "id": "1f4c98fd", + "metadata": {}, + "source": [ + "We created the matrix $A$ of the system of linear equations $Ax=b$ for a grid size $N=5$. For a grid of this size, we need 9 linear equations since there are 9 interior points. Note that we are using two types of numeration: one that defines the coordinates in the grid, e.g. $(2,3)$. The other numeration simply enumerates the interior values row-wise (1,2,...,9). The latter numeration is used to construct the matrix $A$. \n", + "\n", + "For any grid size, the equations matrix will only contain up to 5 nonzero values per row. Therefore, it is useful to store it as a sparse array which only stores the nonzero values under the hood. This is essential for the implementation because a lot of memory can be saved in this way. " + ] + }, { "cell_type": "markdown", "id": "7e521df4", @@ -453,8 +1118,48 @@ "\n", "Two possible solution methods have already been discussed in the course:\n", "\n", - "- Jacobi\n", - "- Gaussian elimination" + "- Jacobi method\n", + "- Gaussian elimination\n", + "\n", + "To determine wether any of these methods are useful solvers for our problem, we analyze if they are _algorithmically scalable_. " + ] + }, + { + "cell_type": "markdown", + "id": "f29c756a", + "metadata": {}, + "source": [ + "### Algorithmically scalable solver\n", + "\n", + "A computation method is an _algorithmically scalable_ solver if the total cost scales at most linearly with respect to the total problem size.\n", + "\n", + "
\n", + "Question: Let $R$ be our problem size, the number of rows in our matrix $A$. Because we have $N$ points in each dimension of the grid, $R=O(N^2)$. What is the complexity of the Jacobi method and Gaussian elimination with respect to the problem size $R$?\n", + "
\n", + "\n", + " a) Jacobi: O(N^2) = O(R) per iteration, GE: O(N^3) = O(R*sqrt(R))\n", + " b) Jacobi: O(N^2) = O(R) per iteration, GE: O(R^3)\n", + " c) Jacobi: O(R^2) per iteration, GE: O(R^3)\n", + " d) Jacobi: O(N^2) = O(R) per iteration, GE: O(R) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0244f525", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "It's not correct. Keep trying! 💪\n" + ] + } + ], + "source": [ + "answer=\"x\" # Replace x with a,b,c or d\n", + "pdes_check_1(answer)" ] }, { @@ -462,22 +1167,7 @@ "id": "638b0ecc", "metadata": {}, "source": [ - "### Algorithmically scalable solver\n", - "\n", - "- If the total cost scales at most linearly with respect to the total problem size\n", - "\n", - "
\n", - "Question: Are Gaussian elimination and Jacobi algorithmically scalable?\n", - "
\n", - "\n", - "- Answer: NO.\n", - "\n", - "- Problem size is R = O(N^2)\n", - "\n", - "- Gaussian Elimination: O(R^3) (more than linear)\n", - "\n", - "- Jacobi: O(N^2) = O(R) per iteration. Linear per iteration, but how many iterations?\n", - "\n" + "To conclude, we find that none of the two solvers are algorithmically scalable. The Jacobi method scales linearly with respect to the problem size per iteration. However, the number of iterations might increase with the problem size, as we will demonstrate in the next section." ] }, { @@ -485,15 +1175,28 @@ "id": "4ca3d718", "metadata": {}, "source": [ - "### Complexity of Jacobi method\n" + "### Complexity of Jacobi method\n", + "\n", + "Next we implement the Jacobi method to solve the PDE. In addition to using a fixed maximum number of iterations, we introduce a relative tolerance threshold. The iterations stop when the relative error in an iteration subceeds this threshold." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "2f70617a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "jacobi! (generic function with 2 methods)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "using LinearAlgebra\n", "function jacobi!(u,f=zeros(size(u));reltol=0.0,maxiters=0)\n", @@ -518,14 +1221,568 @@ "end" ] }, + { + "cell_type": "markdown", + "id": "a3b1b69d", + "metadata": {}, + "source": [ + "Run the following code cell several times with different values for $N$. For instance, $N=10$, $N=20$, $N=40$. Compare the number of iterations that are needed to converge for each problem size." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "7a8ff556", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jacobi converged in 136 iterations\n" + ] + }, + { + "data": { + "image/png": "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fnzevHndunUrLS0dPXr0tGnT6HINDQ3kCQBofigRUfF+J4XniaKiok2bNt27d699+/YzZsywtrZevny5o6OjeJ0NGzbQd9LS0vbt2zd58mTmoT/++EPREQIAsEnlz3dS+PhETEyMsbEx3RQwMjLy9PS8evXqpyrv3bu3T58+NjY2TMnBgwcPHjyYlJSk6DgBANhBEUrmmxRjxoyxtLTU19fv1KlTZGQkU37o0CE7OzsjI6Nx48YxPTdyUXh7IiMjo2XLlsymubl5RkZGnTUpijpw4MDatWvpTQ6H071795iYmOzs7G+++Wb79u2TJk2q/az09PQHDx4sWLCA3uzWrduQIUMa+0UAQPMhPhqqBFwuV11dXQkHmjJlypYtW4yMjP7555+xY8cmJiba2tq+efNm5syZFy5c6Nix4xdffLFs2bLNmzfLu2eF5wkul0uJJUGhUMjl1t2IuXr1akFBQXBwML1pZGR0//59+v7JkyenTp06fvz42mPg6urqWlpaRkZG9KahoeGn9g8AQAhR8k9E/YejOI2yDmD//v3pOyNGjDA0NExJSbG1td2/f//AgQN79OhBCFm6dOmAAQM2bNigpibfL7/C84SFhYV4AyIjI6Nv37511ty7d++ECRM0NTVrP9S3b9/i4uL09PRWrVpJPGRmZubl5fXDDz80YswA0Iwp57972TXi9eyeP3+empp6/vx5FxcXOjckJia6u7vTj3bs2LGwsDArK8vKykqu3So8r3p5eZWVlT18+JAQkpWV9fDhw8DAQEJIXl5efHw8U62wsPDvv/+eMmUKUyIUCpn7165d09fXt7S0VHS0AADKRo9jy3gjpKKiokCMeDfaxYsXd+3adebMGX9/f7rRkJ+fr6+vTz+qo6OjpqaWl5cnb4AKb0/o6uouXbp0+PDho0ePvnDhwtSpU+lh6lOnTm3atCkuLo6udujQIVdX186dOzNP3L59+19//dWpU6esrKxz5879/vvvtTudAACaOnnnY69evfqXX35hNqdPn75u3Tr6/sKFCxcuXFhUVNSxY8f27dsPGzbM2Ni4uLiYfrSsrKympsbU1FTeCJUxfyI0NLRnz55PnjzZvHlzQEAAXThgwAAXFxemjo+PD93OYEyePNne3j45OdnT0/OXX35p3bq1EkIFAFBxa9asmTt3rpQKhoaG7dq1e//+PSHE2dk5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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "N = 40\n", + "N = 10\n", "u = zeros(N,N)\n", "fill_boundary!(u)\n", "u, iter = jacobi!(u,reltol=1.0e-5,maxiters=1000000)\n", @@ -538,12 +1795,13 @@ "id": "791691b8", "metadata": {}, "source": [ - "### Convergence analysis" + "### Convergence analysis\n", + "We can observe that the number of iterations scales with the problem size. In the next step, we plot the number of iterations needed for convergence against the problem size. " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "67e79b9c", "metadata": {}, "outputs": [], @@ -553,10 +1811,131 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "86c8fbb7", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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JrAA+iUjI+PChQtubm5PP/20amFNTU1sbGxAQEDXrl3vWb++vn7//v12dnZq7+DFcVx8fHxGRkZ5ebmnp+e4ceOajkQAACIiAQD0yZtvvklEbdq0KS4uVi3Mzc0lorVr196zckNDg+rGXV988cU9r9bW1jo5ORGRra2tj49Pq1atrK2tf/rpJ63/DAAGBbtGAfSRIAirVq16+DoKhWLSpEl//fXXvn37VqxYsXDhws8///yedUJCQtLS0iorK8+dO3f58mVPT89Zs2ZhMB5AUwhCAH00f/78DRs2XL58+UErcBw3bdq0hISEw4cPjxs3buXKld98883SpUujo6NV61haWv7www8BAQHKp+3bt3/77bcbGhpSUlK0/gMAGA4EIYA+Wrx4sbW19fvvv6/2VY7jpk+ffuLEieTkZNWhxKioqB07dixcuDAmJuZBm62uriYijJYEaApBCKCP7Ozs3nrrrV9++SUjI0PtCl9//XVOTo63t3fThWFhYaWlpZMnT1b7loaGhujo6E6dOvXp00fzFQMYLAQhgJ6aP3++m5vb8uXL739JJpPZ29ubm5vf/5KVlZWtra3aDb7xxhtZWVkbNmxQ+0YAk4UgBNBTlpaW77zzzt69e5OSklq+tXfffXfDhg3r1q3DnHSAeyAIAfTXjBkzunTpsnTp0hZuZ/Xq1atWrfriiy/mzJmjkcIAjAmCEEB/mZmZffDBB4mJiQcPHnzijfz73/9+5513Vq1apbxCEQDugSAE0GuTJ08OCAj46KOPnuzta9euXbBgwQcffLBs2TLNFgZgNBCEAHpNKpWuWrXqyS6BLyoqevPNN83MzPbs2dOvie3bt2u8TgDDhXuNAuiX5557rlWrVk2XjBkz5uOPP66srOzXr99jbapNmzaLFy++f7mHh0eLSgQwLhJBEMSuAQAAQDTYNQoAACYNQQgAACYNQQgAACYNQQgAACYNQQgAACbt/wF921dmWBVSkgAAAABJRU5ErkJggg==", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Ns = [20,40,80,160]\n", "reltol = 1.0e-6\n", @@ -576,9 +1955,7 @@ "id": "4886157c", "metadata": {}, "source": [ - "- The number of iterations to achieve a relative error of $10^{-s}$ increases as $O(s N^2)$\n", - "- Remember: The cost per iteration is $O(N^2)$\n", - "- Total cost is $O(N^4) = O((N^2)^2) $" + "It can be analytically proven that the number of iterations to achieve a relative error of $10^{-s}$ increases as $O(s N^2)$. Remember: The cost per iteration of the Jacobi method is $O(N^2) = O(R)$. Treating $s$ as a constant, the total cost of the Jacobi method will be $O((N^2)^2) = O(R^2) = O(N^4)$.\n" ] }, { @@ -588,7 +1965,7 @@ "source": [ "### Complexity of some solvers\n", "\n", - "Work to solve a Laplace equation on a regular mesh of $S$ points ($S=N^d$)" + "There exist several methods to solve a Laplace equation on a regular mesh of $S$ points ($S=N^d$). The following table compares the scalability of these solvers for different numbers of mesh dimensions." ] }, { @@ -608,25 +1985,27 @@ "id": "d24408b4", "metadata": {}, "source": [ - "### Conjugate gradient method\n", + "## Conjugate gradient method\n", "\n", - "- Idea: Transform the problem into an optimization problem\n", + "In this section, we will discuss the implementation of the best known solver, the [Conjugate Gradient Method](https://en.wikipedia.org/wiki/Conjugate_gradient_method).\n", "\n", - "$A x = b$\n", "\n", - "equivalent to \n", + "The idea of the conjugate gradient method is to transform the problem into an optimization problem of the form\n", "\n", - "$ x = \\text{arg }\\min_{y} f(y)$ with $ f(y)= \\frac{1}{2}( y^\\mathrm{T}Ay - y^\\mathrm{T} b )$\n", + "$$ x = \\text{arg }\\min_{y} f(y)$$ \n", "\n", - "- We can use some sort of gradient descent to solve it\n", + "

with

\n", + "\n", + "$$ f(y)= \\frac{1}{2}( y^\\mathrm{T}Ay - y^\\mathrm{T} b ).$$\n", + "\n", + "Thus, the goal is to find vector $x$, the minimum of function $f(y)$. This vector is equivalent to the solution of the system of linear equations, $A x = b$. \n", + "\n", + "The conjugate gradient method is a gradient descent algorithm optimized for symmetic ($A^\\mathrm{T}=A$) positive-definite ($y^\\mathrm{T}Ay > 0$) matrices. The algorithm is applicable to our problem since the matrix $A$ is both symmetric and positive-definite.\n", "\n", - "- The [Conjugate Gradient Method](https://en.wikipedia.org/wiki/Conjugate_gradient_method) is a gradient descent algorithm optimized for symmetic ($A^\\mathrm{T}=A$) positive-definite ($y^\\mathrm{T}Ay > 0$) matrices\n", - "- It is applicable to our problem\n", - "- It is a type of Krylov subspace method\n", "\n", "### Top 10 algorithms of the 20th century\n", "\n", - "According to IEEE Computer Society\n", + "The conjugate gradient method is a type of Krylov subspace method, which is listed by the IEEE Computer Society as one of the top 10 algorithms of the past century:\n", "\n", "- Metropolis Algorithm for Monte Carlo\n", "- Simplex Method for Linear Programming\n", @@ -642,11 +2021,881 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "cb4068bb", + "cell_type": "markdown", + "id": "a9f516e6", "metadata": {}, - "outputs": [], + "source": [ + "### Convergence analysis\n", + "\n", + "For a first convergence analysis, we will use the implementation of the conjugate gradient method from the `IterativeSolvers` package." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9f8dbf39", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Converged after 158 iterations." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAHCCAIAAADjLG0/AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydd3wU1fr/z+xuEhJSSICQhAghECCAdCkivUkzInj5Kd0IIoIiKOVemkhRRLEhiIgXpIgKSqQXQZqAgAKB0BKSEEhIISGFlM3O/P6Y7509k+zZncnWhM/7NX+cOTlz5pmZzT4753Oe53CCIBAAAACAgcbZBgAAAHBp4CcAsCUzZsyYNm2atJuQkBAdHf3NN9/Y9aQTJkyYPXu2tHvp0qXXXnvthx9+sOtJCSFLliyJjo7Oz8+394mAc4GfcEW+//57dwWsWbPG2ZY6iPz8/LVr1/7222/ONsQyGzdu/O9//yvtpqenr1+//ujRo8p7OHDgwNq1azMzM5Uf8u23327btk3aTUpKWrt27alTp5T3YJ7vvvtu48aN5et37ty5fv36oqIiW50IuCY6ZxsATBAYGNilSxe6Rvyi6dq1q1arlSqDg4MdbJizePDgwWuvvda9e/chQ4Y42xZ1+Pn59ejRo1mzZsoPWbNmzS+//PLUU0/VqlVL4SE9e/asU6dOhQxUxFtvveXu7j5mzJgy9e3bt69evbq7u7v9Tg1cAfgJV6R///79+/eXdnmeF93D7t27fXx8nGcXUE1kZOSRI0fsfZbDhw/b+xQm+eqrr5xyXuBg4CcqNwkJCceOHUtPTw8MDOzZs2f9+vXpv969ezctLa1BgwYBAQF//fXXmTNn3NzcevXqFRERITZIS0s7cOBARkZGs2bN+vfvr9EYxyFzcnLi4+Pr1KkTGhp67dq1P/74o7CwsFWrVt27d6ebSaSmph4+fDgtLc3Pz69r165Nmzal/5qZmZmUlFS3bt2goKAbN24cO3bs4cOHI0eODAoKIoTk5uaeOnUqOTk5Ly+vbt26ZX4dp6amXr58mRCSl5d3/vx5sbJ27dr16tUrKiq6cuWKn59fo0aN6NPdu3cvNTVVvHCx5vLlyyUlJe3atSsuLj5w4EB8fHy9evVeeOEF8a9FRUVHjhy5efOmIAjNmzfv0aOHTqfoXyMnJ2fv3r337t0LDQ0dMGCAr69vmQYFBQXXrl2rWbNmWFiYVFlUVHT8+PHExMT8/PyaNWtGRka2bdtWq9UaDIZ//vknJyeHEBIXF8fzvNi+TZs2Go0mOTk5IyMjIiLC19f3zJkz586d0+v1U6ZM0el0Fy5ccHd3b9GiRXkLb9y4cfTo0UePHrVs2bJHjx70s8vLy7tx40atWrXKfGwSExOzsrKaNGni7e0tfgwMBkNpaal08729vZs0aUIIuXbtWkFBQevWrenXXELIlStXTp069fDhw+Dg4D59+pR518nIyEhOThY/DNevXz969GhhYWGLFi169epl8qMFnI8AXB6DwSA+rNzcXKkyNzf3pZde4jhOepRarXbGjBkGg0Fq8+9//5sQsn79+ueff55u9vnnnwuC8NVXX9EjBj179nz06JF07Pbt2wkh06dPp1VZQki3bt2ysrJo80pKSt588036i5XjuJEjR9K9rV27lhCyePHi119/XWr2xx9/CIIwe/bsMgMXHh4eS5YskY59//33y39uJ02aJAjC9evXCSEDBgwoc8fmzZtHCNm8ebNUU79+fY1Gc+7cuXr16kkXIv5px44dZUbwmjRpcvnyZYvPZe/evZIfIoTUrFnz8OHDtWrV8vPzk9r8+eefhJCXX35Zqjlx4kT5AcPevXuLz7T8lRJCCgsLBUEQb90PP/zQt29f6U95eXmCIHAcFxYWJp0iJiaGEDJlypR33nmH/oR06dIlIyNDaia+hUyYMKHMdY0fP156Ojt27ChvT9euXcWWTz31FCGE7jM3N3fo0KFlnubixYt5npfarF69mhCybNmy6dOn0+Z169ZNvBzgasBPVALK+wm9Xt+9e3dCyLPPPrt///5r167t3r27TZs2hJD58+dLB4p+on79+k2bNt22bduFCxdWrVrl5eWl1WpXrlzp5eX1wQcfnDlzZu/evU8++SQhhP52Fv1ESEhIQEDAhg0bkpOTz549O3DgQPFLjf63Hz16NCGkQ4cOO3fuvHbt2uHDh/v06UMIGT16tNRG9BP16tWrU6fOypUr//jjj5iYmMTEREEQoqOjp0yZsmvXrtjY2MuXL69bt+6JJ54ghGzbtk08NiEhYfPmzYSQli1bHvwfcXFxgko/wXHcE088MXz48J9++unUqVMxMTGCIMTExGg0moCAgM8+++zChQvnz5+fO3euTqcLDg6mv/7Kc+3aNU9PTzc3t+XLlyckJMTGxk6aNMnf39/T09OMn9Dr9SEhIeJRV65cSU5O/vPPPz///PPJkycLglBaWnrw4EFRmlq9erV0saLvF/1E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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "using IterativeSolvers: cg!\n", "N = 80\n", @@ -660,30 +2909,151 @@ "visualize(u)" ] }, - { - "cell_type": "markdown", - "id": "a9f516e6", - "metadata": {}, - "source": [ - "### Convergence analysis" - ] - }, { "cell_type": "code", - "execution_count": null, - "id": "100f1b77", - "metadata": {}, - "outputs": [], - "source": [ - "#plt = plot(xlabel=\"N^2\",ylabel=\"Iterations\");" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "30c6e04e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dZ0AUV9sG4DOzhQ7Si6x0QYogViwYjb1FjaCxYIkaY/xiDCnGJJYkahLf+FqS2DVRExQ0dk0siR1jR1E6S5UqReq2me/H+K4Iq6DCFva+fu3Ozs4+KLs3M3vOcyiWZQkAAIC+ojVdAAAAgCYhCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK8hCAEAQK/pRhB+8803JSUlmq5CH8lkMk2XAKDD8A7SCboRhHv37n3w4IGmq9BHtbW1mi4BQIfhHaQTdCMIAQAAWgiCEAAA9BqCEAAA9BqCEAAA9BqCEAAAdMb1YnafmGneYyIIAQBAZ9wpYU9ks817TAQhAADoNb6mCwAAAGhEuZQwLCGEVMuJREFKJY+3WwgJTb3qwRGEAACg7foclWdWslKGSBXEkEeO5zz+mvDOWL6zyasmYWsOwqNHj9bU1Gi6Ct1WU1NjZGSk6Sqak4+PT0BAgKarAICmyqxkD2aw5gJiLqDGulLGfFJYQ7aF8prxJVptED58+HDcuHGjRo3SdCG6jWVZinrl6w5aIy8vz8LC4ujRo5ouBAAakVPF7hezMWImqZwd6kwvDea93paiCNmezBTWNPNgmVYbhCzLmpmZRUdHa7oQ0CLHjx//6aefNF0FADzTQwk5lsXsSmVuFrPDRfSngfRQZ5rfwsM6W20QAgCAriiVkCNZTIyYOZ/HDnam3/ejBzvTQlX518WGcjRq5stUCEIAANCMajk5ls3sTGHO57GhjlSYG72nP23y3FzqaEV1tGrmMhCEAACgVrUKciqXiUlnj2UzPe2pMDf69360mUBj9SAIAQBAHSQKcjKXiUlnj2QxfpZUmBu9uofAxlDTZSEIAQCgRSlYElvAxoiZPemMlzkV5kav6i6w16ZpWQjCRiSUseVS0sOu9UwhAABQA4YllwvYGDGzN52xNqAivOhbY/hOxtr4WYpeo434I4NdE9/Mnc6fJSEhoemD+x89erRo0aIm7iyRSO7cuZObm/usHaRS6ZkzZ06cOFFVVdXEYyrl5+cfPnz49OnTjx49UrnDrl270tLSCCF5eXncjVckkUgWLlyoUCjqbT99+vSBAwcIIZmZmTt27Hj1FwKAl3CvlF14TSGKkr9zUWFpQC6O5N8bx/80kNbOFCQIQq2SlpYWFRVFCJHJZB4eHtXV1c/ZuaKiYu3atU057Ny5c83Nzbt3775+/XqVO1RWVoaEhCxevHj9+vW+vr7Z2dlNr3nz5s3+/v4bNmxYtWrVhx9+2HCHtLS077//3sXFhRCydevWTz75pOkHfxapVPrdd98xTP0/UDIzM1NTUwkhIpFo7dq1CQkJr/5aANBE90rZpTcVXtHy8DMKQx45M4x3bxx/aTDP01xL808Jl0bVLTMz08jIyM7OjhBSUlJSVVUlEonq7cOybHp6er0P+tLS0oqKinbt2r3oK77//vsrV65csGDBs3bYvn27iYnJ2bNnaZqeMWPGqlWr1q1bxz2kUCgyMzPt7e1NTEwaPvHu3buRkZH//vuvr68vIaRhMhFC1q5dGxERweer+E3Ly8urrq52cXGp92heXl5tba2LiwtNP/5D7dGjRyUlJS4uLvXa3OTl5VEU5eDgwN2dNm0ay7KEEJqmp0+fvnbt2o0bNz77HwYAmsH9MjY6ndmbztbIyRsu1I5QXm8HbU++enBGqCbnz5/39vYeOXLkqFGjtm3bVlxcPGTIkD59+owdO7Zz5845OTl1d54+fTohJDQ0tEuXLrdu3aqtrQ0PDw8KCho7dqyvr29iYuILvbSPj4+FhcVzdjh06ND48eO51JkwYQJ3dZEQcuDAATc3t2nTprVv33758uUNn/jbb7+NHTtWJBJdvXq1rKxMmVtKLMvu3bt3xIgRDZ/bsWPHUaNGRUREuLq6njt3jtt47969jh07Dh48eOLEiSEhIYQQhmHmzJnj4+Mzfvx4d3f3q1evKo/wf//3f6NHj+7evfuECRPkcjkhZMWKFR988AH36KhRo/bu3dvw8ikANIusSnZtPNP7iHzwCUWphGzpzRNP4K8N0b0UJHp1RihnyOEsRtFYj7rMSvZ28ZO78aVsuYxM/ufJ56m7ORXQhOmcA5xoS4OntiQnJ69Zs2bo0KGEkKlTp3bs2PHPP/8khKxcufLTTz/97bfflHvu2LHj999/P3/+vKmpKSFk1apVubm5ycnJBgYGS5cunT179vnz5+seedq0aUeOHKlXQGhoqDLSni8nJ0d5VtquXbu8vDyFQvHgwYN33333woULXl5ejx49Cg4OHjx4cJcuXeo+MTU1tbS0tGvXrq6urteuXfvpp58mTJhQd4e0tLSKigpvb++GL3rmzBlbW1tCyLFjx+bPn3/79m2GYSZMmDB9+nTuEmt5eTkh5Pfffz937lxSUpKZmdnGjRsjIiLu37/PHcHJyWnjxo21tbW9evXauXPnjBkz6h7fzc2NEJKYmOjn59eUfwQAaAplC9DEMnaYiF4azOvvRL36QkiapUdBWK0gBzPY2sbOEPJrSHL5k0t8VXLCsNTpB0+2OJVRiWWN/LfzaNLRirU0eGq3tm3bcilICDl8+PDixYtjYmIIIUZGRhcuXHjO0U6fPj1jxgwDAwNCyJw5c77++ut6q2ps3Ljxxx9/rPcslVcjVZJKpcqdBQIBwzByufzUqVOOjo63b9++ffs2IcTV1fXixYtubm63bt0ihJiamvbo0aOqqio5Ofn+/ftmZmbHjx+fOHHi6NGjDQ2fTAsqKCiwsrJqeKZICMnLy1u9enVubm5FRcX9+/e5a7ApKSnz58/nduDOYk+fPj1p0iQzMzNCyNtvv/3+++9nZWVZW1tzdwkhhoaGkyZNOnPmTL0gJITY2Njk5eUhCAFeXcMWoEOcaUFruaSoR0FoLiA7X2viyh1Pdlt+m7lbwu7p3wz/UJaWltwNuVxeUVFRVFQklUq5Lc/5Ao8QUlFRwSUBIcTc3JxhmMrKyro7REVFcXFVV/v27d97772mFObo6Fhc/PgsuLCw0MrKysDAoLS0VKFQpKenc9sHDhzYpUuXrKwsblyrSCTq0aOHo6OjhYUFV9vgwYMrKirS09O57ws5RkZGtbW1DV/x/v37gwcPXrFixahRoyQSycGDB2UyWXl5uampKY/31P9R3Z9dIBAYGRk9evSIC0LldjMzM5UDVqurq1V+tQkATVQmJYczm9QCVKfpURBqDz6f7+vrGxgYOH78eJU78Hg8Ho8nk8m4uz4+PteuXQsPDyeE/PvvvzY2Nra2tnXnQjg6OjYcYurs7Pz8MuRyOXci2KtXr7///jsiIoIQ8vfff/fu3ZsQ0rFjx8rKygULFgiFwrrPqnu5NTQ0dPPmzdzt7OxslmXt7e3r7sxdVi0rK2vTpk3d7RcvXuzTpw/3VeipU6eUO1dXV9+/f79ulHI/O3c7MTFRIpG4u7tzI2Ju3LjRr18/Qsj169c7dOhQ76erqqoqKipSeVUWAJ6vRk5OP2B2pbB/5TBNbAGq01rvT6bdVq1aNWPGjOzsbE9Pz/T09OLi4hUrVigf5fF4nTp1ioyM9Pb2njhxYmRkZN++fa2trZ2cnJYtW7ZkyZJ6RxsyZMhzXuvPP/88e/bs9evXjY2NFy5cOHz48D59+ty6dSs4OLi2ttbAwGDu3LnBwcFLly61tLRctWoVt1zfgAEDAgICRowYMWPGDIZhLl++PHny5B49etQ98oQJE5YvX/7+++937979xx9/nDlzJneupmRmZhYSEnLx4sV642WCg4M/++yzHTt2UBS1ZcsWbqOpqenSpUvfeOONhQsXmpqaxsXFrVix4r333uvUqdMXX3zh6+v73XffRUZGmpqaVlRUEEKWLFmSn58vFov/+OOP69ev1/upL1++3KlTJyur5u7OC9B6KVuAHs5iutpSUzzpbaECDbYAVZtWd4qrrdzc3JQDGgkhgwcP/vvvv2tra0+ePFlbWztp0iRCiK+v77x587gdTpw4ERoayt328/OLjY2tra29c+fOhg0buH0sLCzqZudzGBkZWVpaTpo0acyYMZaWltx3eG3btl21ahV3Rujm5hYbG1tTU5ORkfHXX39xZ4QURR04cGDGjBlXr169du1a9+7dGy7sbmhoGBsba2dnd+XKlXnz5qmcqzBnzpzdu3dzt8vLy7lk6tKlS1RU1M2bN9PT0/fs2fPtt99ylXzyyScbNmxISkqKjY3t1q0bIcTJyenmzZtGRkZXr15dsmQJN3jVwMDg22+/3bFjx+3btysqKi5evMjNUxw4cOCYMWO419q9e/ecOXOa8u8DoOcULDmdy0acVTj+JvsujulsQ6WEC04N5Ud4abIRtjpR3FUmLRcQEBAVFeXv79/0pxQXF3fo0KGoqOgVX/p4Nptbxc7ywV8ML4lhmJ49e27atKm8vHzq1KlLliyZNm1aS79oVlbWqFGjrl+/Xm/EELcw77Fjx1q6AABO3S+5tY2yBejedMbTnApzo8d70A7a1AJUbXBptBHDRBQhOj40WKNomr5y5crVq1cXLVo0Y8aMyZMnq+FF27Vr13D0EACQOi1Ao9MZKwMqzJ2KHcV3M9PrTzkE4fPcvXv39u3bCoXC29u7W7du9QY0QtN169bt4sWLmq4CQK/dK2VjxMzOFNaIR8LcqfMj+F4Wep1/SghC1W7dujVr+tR7CYm+DtYCmkosLLOytl6/YePw4cNb7kXj4+P/+uuvyMjIpuxcXl6+ZMmSNWvWNGXnR48epaam2tvbt23bVuUONTU1p06dkkgkAwcOrDfC8znKysrqNtH29PRU2cJmw4YN/fv3Vw7gLCgoiI2NlUgk3t7eQUFByt1qa2svXrxYUFDg4OAQFBTEjbspKytbs2bN0qVLm1gSANTD5d/vaaycIeHu1LHBvA5tkH9PwVdfKly/fj20d6/ehjW3Z/Y9NCZw3xsdb7/dZ5aXefi4N6Ojo1vudTMyMrjJCVKp1MrK6vkLQVRWVirHWz7f22+/bWtr27dv32c13S4vL+/ateu6deuio6N9fX3FYnETCz5//vyAAQMW/k9ycnLDfZKSkjZu3Ojp6cndXblyZfv27Tdt2nT8+PEpU6b07NmT237mzBk3N7dFixadPn36+++/9/Pz4yYstmnT5saNG1wLHgBoOnEF+10c47tPPuwvRamEbO/DSx/P/7YrUlAFnBHWx7Ls21MjZnZsG9ndQ7mRT1NTAkRtDAVzZs0cPHjw81t3qiSXy6urq83NzRMSEszMzLhJftnZ2TU1NR4eHg1nkZeWlpaWlkqlUjMzM27ER25ubmVlpYeHR9NbxnA+//zzH3/88TmT67dt22Zvb3/q1CmKot55553vv/9+w4YN3EMSiSQ5Oblt27bPmofg7++vnAio0tq1a6dOncr9gNHR0d9+++358+cDAwO5R/fs2UMIyc7OHj169OrVq2fNmsVtLyoqio2N5W7Pnj37hx9+eP4UEQDgZFWyBzLYGDGTUUnedKU29+b1cqAQfc+HM8L64uLiUtPS5nZ2bfjQSC8HexODhl09m+Ly5cudO3ceNGjQzJkzo6Ki8vPzQ0NDR48ePXv27KCgoIyMjLo7f/7554SQiIiI8PDwhISE6urqkSNH9u/ff+bMmT4+Pnfv3n2hl3Z3dzcyet5QsCNHjoSFhXELO4SHhyt/wKioKA8Pj48++ig4OJgrqaGampqzZ8/eunVLOf2/LpZlY2JilJMI169fP2/ePGUKEkK43qQ7duzw9fVVpiAhxNbWdtSoUdztQYMGXbx48dUHAAO0YrlVj1tgBx+Q3yhmPw2kM8Y/boGNFGyUHp0Rsgp59fUzpLHlCG6e/MfH1tyIr3pcTCcbo9snD49xb3yatlFgb9rEvO6W1NTUzZs3c81QJk6c+Nprr3311VeEkNWrV3/66ad79+5V7rlu3bpNmzYdPnyYa7q9YsWKioqK+Ph4gUCwcuXKd9555/Lly3WP/NZbbzXsr/3aa6818Ypibm6u8rtDZ2fn/Px8uVyek5OzYMGCK1euuLq6VldXd+rUaeTIkfUm1BNCHj169O2336akpBgZGR09etTV1bXuoykpKdXV1V5eXtzdO3fuqGwmFx8f36lTJ+4213+OEMLj8czNzQkhBgYG3t7e//77r8pVLAD0WYmEHM1iYsRMbAE7rNW1AFUbPQpCIpfJslNZppEgrC3Ke87YUD5FakuLpTmpjb6aQftO9YJQJBJxKUgIOX78+IIFC7j+ZJWVlfWCrZ6zZ89GREQIBAJCyIwZMz7//PN6DdWioqIazgelmvyHoFwuV16b5fF4DMMwDHPmzBkbG5uTJ09y2+3t7S9fvuzh4cFdsTQzM+vXr9/QoUO58zaFQjFlypSPPvpo3759dY/MdS5VViKXy+s1bGu4PS4uLjw8vKqqytra+t69e9xGGxubgoKCJv44AK1e3RagoY5UhBe9f0ArbAGqNnoUhJSBUZtxjTeh7uh0MW3nATnD8lWtLJL0SDZjxHjL8HdeogDlN4tyubyqqkq5SoODgwN3avgsVVVVyubRpqamLMvWC8KNGzfeuHGj3rN8fHyaOADV0dFReeGxsLDQ2tpaKBSWl5fXXUdi8uTJwcHBeXl53Jmrs7Nzv379uGwmhPB4vIkTJ77//vv1jmxiYlK3VC8vr8TExIYndh4eHnfu3OFud+7cOS0tbf/+/YsXL677L8CdHAPos4YtQKP60ab60fylRelREDZRSEiIsZnZvoTcCX71m1bfyCu7m1ei/O7qpfH5fH9//7Zt2z5rdjmfz+fz+cpv3Xx9fa9cucJ16I6NjbW3t7exsanbdNvb25tbpKkuJyen59TALWHBXXsMDQ09efLk1KlTCSGnTp3q27cvISQoKIhbXL5uHBJC6q6bWNft27cbzs3w8vKqqKh4+PAhNxciIiJi7dq1b7/9tnIhjvj4eH9//0mTJq1ZsyY2NpZbjLeh9PR0rKYEeqthC9CtoQJz5F/zQRDWx+PxftywaeKE8SYC/sj2DsrtV3NL5566v3jJUkdHx1d/ldWrV0+aNCktLc3T01MsFpeWlv7www/KR2ma7tKly7vvvtupU6eJEyd+/PHHvXv3NjMza9u27fLly7/++ut6R1NecVXpwIEDf/755+XLlw0NDUtLS8PCwgYMGBAXF6dsus290CeffGJlZbV69Wrucmj//v1DQkIGDRo0depUlmUvXbo0a9Ys5WwHTmRkJEVRIpEoISFh9+7dDb+nNDU17dOnz4ULF0aPHk0Ief/992NjYwMDA6dMmWJvb3/r1q1Tp07l5OQEBQX997//HThw4OTJk/39/Wtra2NiYnx8fLiD3L9/38DAAEEI+kbBkn8esDtTmCNZjJ8lFeZG/6e7wE4vW6C1NPQaVW3fvn3vzJxpY8jrYm8qpKm7JbX3C0qXffX1x5988nIHzMvLu3Tp0rhx45RbMjIy9u/fn5eXJxKJhg8f7unpmZmZefPmTa5t9KNHj06cOFFeXj5y5EhHR8esrKw9e/ZUVFQMGjSoT58+hJCqqqrff/+97kjLZ7l69WrdfmMhISEBAQHFxcXR0dFz5szhVs0Vi8W//vqrRCKZMGGCclQny7JHjx6NjY3l8/mBgYHDhw+vd3Z469atP//8s7i42MHBYezYsR4eHqSBffv27dmzp+53h3///ffZs2dra2t9fHzCwsKUnRhTUlIOHjyYn5/v4ODQvXt3Zc/xRYsWmZqaLlq0qEn/0M+FXqOgZi/Ra1TZAg0tQNUGQfhMlZWVhw8fvnXrllwu9/X1feONN+zs7F76aHqLZdmQkJAtW7Y0XLyiKcrLy3v06HH16tVm6VyMIAQ1a3oQNmwBGuFFu+t3C1C1waXRZzI1NZ04ceLEiRM1XYhuoyjqypUrL/10CwuLhISEZqwHQNtwLdB2pbCGPBLmTp0bwW+PFqDqhSAEANAALv+i0lgpQ0a1o2Je5wXbIP80A0EIAKA+GRXsoUx2ZypTVEPGuFLb+vB6OyD/NAxBCADQ4rKr2D/EbIyYSSpnx7rSa3ugBagWQRACALSUhxIqKpfZmcIklj1ugTbUmeajBYyW0YogTExMlEqlHTt21HQhAADNQNkC9HK+cHg7Fi1AtZzmg7CwsHD48OHBwcExMTHNe+SamprvvvuueY8JOi0pKUnTJUBrVi4lh+q0AA1zo7d1q7Vrg+6A2k7zQRgZGTlv3rznd51+CZaWlpGRkaWlpc17WH0jlUpVtsnWUXZ2dsOHD9d0FdDacC1AY9LZY9lMT/unWoBWVOjARG3QcBAePnzYw8PDz8+v2YOQx+MtW7aseY+ph16iLwaAnpAoyMn/tQD1t6QivOgfe6EFqE7SZBCWlZWtWbPm+PHj58+f12AZAABNp2BJbAG7K5WJETO+bdACtDVQdxDKZLLs7GxHR0cjI6Ndu3aVlpZGREQUFBSkp6evXr36ww8/VHM9AABNoWyBtiedEZlQUzzpe28KHI01XRY0hxYJwpMnTy5dujQuLq5Dhw7Xr19Xbj937tyECRMsLS0LCgp+/vnniIgI7gubixcv7tmzZ9KkSS1RDADAq7hRzO5MYWLEjKWQCnOnLo/ke5hjBmCr0iJBaGdn98UXXyQnJ+/evVu5kWXZWbNmrVy5ctq0aRcvXhw+fHhOTo67uzshpLCwMCAgwN7eviWKAQB4CVwLtN2prAFNwtypf4bzvdECtJVqwdUndu/evWbNGuUZ4dWrVwcPHlxYWMgtax4YGLhw4cK33nqrKYeytra2s7MzMnp8Gb59+/Zbt25tobKhrsrKSiwND3oloZw6kE3vy+RJGGp4W8VbropOVi//IYl3kMYZGhry+Y2c8qnvO8KMjAxXV1cuBQkhXl5eYrG4ic+1tbVdtmyZcrk7S0tL/G6pB8uy+KcGfZBZyR7MYHelMoU1ZIwrtb0v3cuBosirjgHFO0gnqC8IKyoqlKd0hBBjY+OKioomPlcgEPj6+r7QeoQAAI2q1wJ0DVqA6iX1BaG9vX3d6e2lpaXBwcFqe3UAAKWHErJfzOxMYRLK2OFoAar31BeEAQEB6enpDx8+tLa2Zhjm2rVrkZGRant1AIBSCTmS9bgF2mBn+tNAerAzLUT+6b0WCcKCgoLz589fvXq1tLQ0JibG0dGxd+/eLi4uQ4cOnTt37sKFC3fu3GlnZ9e3b9+WeHUAgLqq5eRYNrMz5UkL0D39aRPN95cEbdEifwsVFhbGxMTk5+d37tw5JibmwoUL3PZffvnFzs7uvffeKysrO378OIVL8QDwCh7JiOLZIzpr5ORIFhNxViGKku1MYcLc6JyJgiOD+BFeSEF4SgtOn2hGAQEBUVFRGCyjfug1CtrMd598/wBehzZP/UmtbAF6JIvxs6TC3OhJnrSNoWYqxDtIJ+DvIgBoDbgWoFwLNC9zKsyNXtVdYI8WoNAECEIA0GEMSy7mszFiZm86Y21ARXjRt8bwnYzxtQu8AAQhAOiS68XslkSGEFJUSzKr2C4H5aYC4mFOfeBPLwzkabo60EkIQgDQJVUytqCG/FvEsizhEeptH8rfkiKEoBE2vDQEIQDogDIpOZzJ7EplbhWzb7rRMf15vRwov33ydzvQ9QbLALwoBCEAaC/lENCj2Uwve2q2Dz3ahRZgCjw0KwQhAGgjbhXAvemMpzkV4UX/2Etg3qADtrmQ8HA2CK8MQQgAWiSpnI1KY35LZYU0CXOnYkfx3cyemXVXRuETDJoBfo0AQPNKJGSfmNmZwmRUkjddqR2hvN4OONcDNUEQAoDG1CrIqVxmVwr7Vw7DdcHGKhCgfghCAFA3hiWXC9hdqUx0OtPFlpriSW8PFZi+6iK4AC8JQQgA6nOvlI0RM7+msMY8EuFFJ4QJHNAFDTQNQQgALS63it0nZnemMkU1ZIwrdXAgL9AKXwGCtkAQAkBLqZGTo9nMzhQmtoAdJqK/68p7vS1WXwOtgyAEgGamYMk/D9idKcyxbKanPRXmRu/tTxvjwwa0FX43AaDZ3Ctld6UyvyQzzibUFE/6hx4CWw0tBAjQdAhCAHhV2VXs76ns9mSGpsh4d+riSL4nWmCD7kAQAsBLqtcIe1sfXi8HfAUIugdBCAAvhmuEzc2CD3VEI2zQeQhCAGgqrhH2nnTGy5yK8KK3hQrMMAsedB+CEAAakVDG7k1ndqeyBjQJc6f+HcV3fXYjbACdgyAEANUeSsj+Oo2wo/vzgm2Qf9AKIQgB4Cm1CnIk68kseDTChlYPQQgAhKhqhL2nP22CTwjQA/g1B9B33Cz4nSmMpZCK8KITwwT2aIQN+gRBCKCnuEbYv6YwDyXkLQ/q7HB+ewt8BQj6CEEIoF/KpeRQJhMjZq4UskOd6e+7oRE26DsEIYBeqNcIO8KL3j+AFmIIDACCEKDV42bBR6czHuZUmBu9uofABo2wAepAEAK0TlmVbFQauy2Z4VMk3J26NIrvjlnwAKogCAFalVIJiREzO1OYpHJ2rCu9vQ+vtwPyD+B5EIQArUHdRtiDnelPA+khzmiEDdAkCEIAHcbNgo8RM1FpTHsLNMIGeBkIQgCddL+MjU5ndqWwhjwS4UXHjRU4Gmu6JgDdhCAE0CUPqtmYdDZGzGRWkrGu1L4BvE7W+AoQ4JUgCAF0QI2cHM1+0gh7aTCvvxNFIwEBmgOCEEB7KRth701nutpSUzzpvf1pY7xrAZoV3lIA2ohrhP1rMtPWhJriSSeHCezQCBugZSAIAbRIThW7X8z+ksKUSsgED+r8CL4XGmEDtDAEIYDmlUnJ4UxmVypzq5h9041eH8Lr5YBG2ABqgiAE0BgpQ/7KYWLSWa4R9mwf+g0XNMIGUDcEIYAGcI2w96YznuZUmBv93xCBtYGmawLQVwhCAPXJrGT3pLFbkxghTcLcqdhRfDc0whauBD0AACAASURBVAbQNAQhQIsrkZB9YmZnCiOuIOPcqB2haIQNoEUQhAAtpVZBTj3dCHuoM83HV4AAWgZBCNDMlLPgo9OZLrbUFE96e6jAFI2wAbQVghCg2dwrZWPEzM4U1ohHIrzohDCBA2bBA2g9BCHAq+IaYe9KZQpryBhX6sBAXqAVvgIE0BkIQoCXpGyEfaWQHepMf9uV93pbzIIH0D0IQoAXo2DJPw/YnSkMNws+zA2NsAF0G96+AE3FNcL+JZlxNqGmeNI/9BDYGmq6JgB4ZQhCgEZkV7G/p7I7khmKIuPdqYsj+Z7muAIK0HogCAFUq9cIe2sfNMIGaJ0QhABPkSjIyf/Ngg91pGb70KNdaAFmwQO0XghCgMe4Rth70hkvcyrCi94WKjDDLHgAPYAgBH2XWMbuSWd2p7IGNAlzp/4dxXdFI2wAfYIgBD2lbISdUUnedKWi+/OCbZB/APoIQQj6pVZBjmQxO1OY2AJ2mAiNsAEAQQj6oWEj7D39aRP8+gMAghBah5vF7MlcdmGgijM7rhH2L8msCZ9EeNGJYQJ7NMIGgDoQhNAaPKgmlwoYQp4EYW4Vu0/M/prCPJSQtzyok0N57S3wFSAAqIAghFalXEoOZTIx4seNsL/vhkbYANAIBCHosIQytlpOCCFJ5ay4gh14XPFvEdPNlp7tQ+8fQAsxBAYAmgBBCDpsxW3mZjFbLGEf1hIBTVXKWA9zqkzKBlghBQGgqRCEoJPKpCQ6nRFXsOUyMr097WFGHc5ijgzC7zMAvDB8cIAuYVjy9wN2ZwpzNJsZ4PRkFuDRLFbTpQGArkIQgm5ILmd/T2N+SWZtDMkUT/q/IQJrA03XBACtAoIQtNojGTmYwexKZe6VsmFu9KFBvEArFYNAO9tQn3bkqb88AGgFmhSEWVlZd+7c6dixY7t27Vq6IABSpxHMPjHT077xtZAcjYmjMWZJAMDLUB2E48eP9/X1XbJkCSHkn3/+GTZsWG1trVAojIqKGjt2rHorBP2SU8X+lspuSWIMaBLhRSeME9ihEQwAtCQVf2PL5fKDBw+GhIRwdz/77DMfH5/Y2NiIiIgPPvhAoVCot0LQC7UKEiNmBp6QB/4hT69gfwnl3RvH/zSQRgoCQEtTcUZYUlIilUo9PDwIIYWFhdeuXdu9e3ePHj1cXV23bt2alZXl5uam9jqh1eKWw/09jQmypqZ40ocH0kb45hoA1EjFR45AICCESCQSQsjx48dZlu3fvz8hxNLSkhDy8OFDBCG8ugfVbEw6uy2ZkSrIBA/q+mi+iym+5AMADVBxadTS0rJt27ZbtmwpKSnZsmVLcHCwvb09ISQjI4MQYmtrq+YSoTWRKMiRLCb8jKLjfvmNYnZ1d15CGH9pMA8pCACaovoi1IoVK6ZPn75mzRoejxcTE8NtPHr0qK2tLQaOwsu5V8ruSmV2JDNe5lSEF72jrwDLAQKANlD9URQREdG5c+dbt24FBQX5+/tzG9u2bbtu3ToKrfzhRZRKSIyY2ZjAFNeSiZ5U7Ci+uxl+hQBAizzzb3I/Pz8/P7+6WyZMmNDy9UAroWDJPw/YzYnMXznMYCyHBABa7JlByLJsRkZGdna2VCqtu33AgAEtXxXosIQy9tcU5pdkxtmEmu1DbwsVmAk0XRMAwLOpDsIbN27MnDnz9u3bDR9iWXQ3BhXKpWRvOrMzhcmoJJM9qQsj+F5YER4AdIHqIJw8eXJ1dfXWrVs7dOhgYIDexvBMz1oOAgBAV6gIwrKyssTExKNHjw4fPlz9BYGu4JaD+DWFNeaRCC96dQ+BjaGmawIAeHEqgpDH49E0jfmCoFKNnBzNZjYnMreK2Tfd6AMDeEHWuAQKADpMRRCamZmNHj16//793bp1U39BoLVuFLObE5m96UxX28aXgwAA0BXPnEf47rvvFhUVDRkyxMrKqu5DGDWqb3Kr2N2p7NYkRkiTCC86OQzLQQBAq0KpHAXq4OBQUFCg8gkaGTUaEBAQFRWlnNoPalCrIEeymO0J0msPeW+60VM86d4OuAQK8GIqKirMzMw0XQU0QvUZ4cmTJ2UymZpLAS3BLQcRlcYEWlNhImb/IENj9EIDgNZL9Sdcx44d1VwHaFxeNYlOZ7YnM7UK8pYHdW0038WUqqioQQoCQOv2vA+53Nzc+Pj47OxsR0dHPz8/V1dXdVUF6iNlyF85zK4U9u8HzDAR/UN39EIDAP2iOghlMtm8efO2bdumXI+eoqhx48Zt377d1NRUjeVBC+KWg/glmfE0pyK86O2hAlP0QgMA/aM6CBcuXLh169ZZs2ZNmDDB0dGxqKjo8OHD69atmz179u+//67mEqF5cctBbEpkCmvIJE/q0ki+hznOAAFAf6kIQplMtmXLlqVLl3755ZfcFm9v7969e3t7e8+ePXvdunU2NjbqLRKaQb3lIL7rikugAACEqFyhvqioqKKiYvTo0fW2jxkzhmEYbp160CGJZezSmwr3vfKF1xS97CnxBEH067wBSEEAAEKIyjNCc3NzHo+XkpISEBBQd3tycjIhxNLSUk2lwaspl5JDmcyuVOZ+KRnnRh0dxAuwQvYBANSnIghNTU1ff/31efPmtWnTpn///tzG69evT58+3d/f38PDQ70VwothWHK5gN2VysSImV721GwfeowLloMAAHgm1YNlNmzY8Prrr7/++uu2trYODg5FRUX5+fm2trZ//fWXmuuDpsuuYn9PZTclMkY8EuFFJ4UJbLEcBABAY1QHobu7+507d3799dcLFy6UlJR4eXmFhIRMnz7d2tpazfVBo5TLQdwsZse50fsH8DphOQgAgCZ75oR6MzOzefPmzZs3T53VwAuptxzEGy60EJdAAQBeENpn6R7lchACmkz1opPCBPZYDgIA4GU9CcJDhw59+eWX8+fPf/vtt/v16/fw4UOVT7hz5466aoOnSBTkcBazM4WJLWDfdKN3hPKwHAQAwKt7EoSWlpYBAQF2dnaEkA4dOpSXl6vh5T/99NPTp08rFIrAwMCNGzcaGeHURoW6y0FM8aT39qfRCBsAoLmoXo9QbYqLi21sbFiWnTFjRpcuXd577z2Vu+nneoT5NWRvGrMjmalRkLc8qGletKuZuk8BsZoawKvAO0gnqB5csWvXroYL8xYUFGzevLl5X57r1iaXyyUSia2tbfMeXEcpWHI6lw0/o/COll0qYP/TnZcYxl8azFN/CgIA6APVQfjxxx+npaXV25ienv7OO+80ewVz58719PTMy8t74403mv3guuV+GbvwmsLpd9nCa4oBbancieiFBgDQ4l5guH1FRUVLrMH0888/Z2ZmduvWbcWKFc1+cJ1QJiWbE5neR+SDTygIIZdG8q+P5s/2obEoEgCAGjw16OLu3bux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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Ns = [20,40,80,160]\n", "reltol = 1.0e-5\n", @@ -700,6 +3070,14 @@ "plt" ] }, + { + "cell_type": "markdown", + "id": "5396554c", + "metadata": {}, + "source": [ + "The number of iterations needed to converge is much lower with the conjugate gradient method than with the Jacobi method. However, the number of iterations still increase with the problem size, so there is still room for improvement. " + ] + }, { "cell_type": "markdown", "id": "92bfd7d7", @@ -707,11 +3085,10 @@ "source": [ "### Number of iterations\n", "\n", + "We can prove that the number of iterations to achieve a relative error of $10^{-s}$ increases as $O(s \\sqrt{\\kappa(A)})$. As a reminder, the condition number of A $\\kappa(A)$ is ratio between the largest and smallest eigenvalues of A: \n", + "$$\\kappa(A)=\\dfrac{\\lambda_{max}(A)}{\\lambda_{min}(A)}$$\n", "\n", - "- The number of iterations to achieve a relative error of $10^{-s}$ increases as $O(s \\sqrt{\\kappa(A)})$\n", - "- $\\kappa(A)=\\dfrac{\\lambda_{max}(A)}{\\lambda_{min}(A)}$ is the condition number of A (ratio between the largest and smallest eigenvalues)\n", - "- In our example, $\\kappa(A) = O(N^2)$\n", - "- Thus, the iterations number scales as $O(s N)$\n" + "In our example, it can be shown that $\\kappa(A) = O(N^2)$. Thus, the number of iterations scales as $O(s N)$ for the conjugate gradient method. Remember that the number of iterations scales as $O(sN^2)$ for the Jacobi method.\n" ] }, { @@ -721,7 +3098,7 @@ "source": [ "### Goal\n", "\n", - "- Find an iterative method whose number of iterations is independent of problem size" + "The conjugate gradient method provides some improvement to the Jacobi method, since the number of iterations increases more slowly with the problem size. However, the ultimate goal is to find an iterative method whose number of iterations is independent of problem size." ] }, { @@ -731,31 +3108,26 @@ "source": [ "### Preconditioner\n", "\n", - "A linear function $M$ such that\n", + "To achieve this goal, we will apply a [preconditioner](https://en.wikipedia.org/wiki/Preconditioner) to transform the original problem into a format that is easier to solve. \n", "\n", - "$M(b) \\approx x$ with $Ax=b$ for any $b$\n", + "A preconditioner is simply a linear function $M$ such that \n", + "$$M(b) \\approx x, \\text{ with } Ax=b \\text{ for any } b.$$ \n", "\n", - "$\\downarrow$\n", + "When we have found such a function $M(b)$, we can solve the _preconditioned problem_ $(MA)x = Mb$, which is equivalent to $Ax=b$.\n", "\n", - "$ M(b) \\approx A^{-1}b $\n", + "The way that this preconditioning affects the number of iterations is that it reduces the condition number of $A$: \n", "\n", - "$\\downarrow$\n", + "$$ \\begin{align}\n", + "&M(b) \\approx x, \\text{ with } Ax=b \\text{ for any } b \\\\\n", + "&\\rightarrow M(b) \\approx A^{-1}b \\\\\n", + "&\\rightarrow M \\approx A^{-1} \\\\\n", + "&\\rightarrow M A \\approx I \\text{ (Identity matrix)} \\\\\n", + "&\\rightarrow \\kappa (MA) \\approx 1 \\\\\n", + "&\\rightarrow \\text{ Conjugate gradients will be fast when solving } (MA)x = Mb \\Longleftrightarrow Ax=b.\n", + "\\end{align}$$\n", "\n", - "$ M \\approx A^{-1}$\n", "\n", - "$\\downarrow$\n", "\n", - "$ M A \\approx I$ (Identity matrix)\n", - "\n", - "$\\downarrow$\n", - "\n", - "$\\kappa (MA) \\approx 1$\n", - "\n", - "$\\downarrow$\n", - "\n", - "Conjugate gradients will be fast when solving\n", - "\n", - "$(MA)x = Mb \\Longleftrightarrow Ax=b$\n", "\n" ] }, @@ -781,7 +3153,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "cd608f2f", "metadata": {}, "outputs": [], @@ -807,10 +3179,591 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "858ac6ba", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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ceOGg4PD8uXLa70eNyws7MCBAwKBYM6cOQMGDGASi4uLt2zZEhsb6+bm9tlnnxkZGam34A0UExPz/fffFxUVjRkzZtKkSTLP5uXlnThx4tatW1Kp1MvLa9asWcyFZxEREefPn2ezrVixollcI5SXl7d58+aEhAQPD48lS5bo6+vLZNi9e3dCQgKzbGVlxVx9RwhJSkrasmVLVlbW4MGD58yZU8/IKa1x/vz5w4cPC4XCuXPn9uvXT+bZc+fOXblyhZsSHBzM5/MPHDgQGxvLpJiYmHzxxRdqKm4jZGZmXrt27dGjR46Oju+//36teV6+fLl169acnBw/P7/Zs2ez01ocPHjw7NmzpqamS5YseXuu/lJc8/isq9mXX355+PDhqVOnlpaWDh48uObozatXr06cONHPz69fv37+/v7srFtTp06NioqaMWPGgwcP3nvvPbUXvCEyMzO9vb0dHR3Hjx//6aefHjp0SCbDuXPnLl265OXl5e/v//3333/88cdMemRkZHh4uNn/NJffzcDAwMTExOnTp1++fHnevHk1Mxw9ejQ1NZV5UaampkyiRCLx9vbW1dV97733fvjhh02bNqm31A0UHh4+efLkYcOG9enT55133nn8+LFMBpFIxJ7BqKiosLAw5jyGhIQkJCTIvAla7uDBgz///HNERMSJEydqzVBSUuLl5WVoaDh58uStW7du27aNSd+1a9dXX301YcIEW1tbLy+v3NxcNZa6maDhTUVFRSYmJg8ePKBpmqIoJyen0NBQmTxjx45dt24ds7x48eLZs2fTNB0fH6+vr19QUEDTdGFhoUgkevLkiXrL3hAbNmwICAhglg8dOtS9e3eZDBRFsctXrlwxMjJiUjZu3Dh37ly1lbNJ3L59u1WrVuXl5TRNp6Wl6enppaWlyeTx9fU9efKkTOKBAwc8PDyY5StXrtjY2FRUVKihwI0UEBAQHBzMLC9YsGDevHlyMvfs2fOHH35glgMDA/fu3avy8qnA9u3bhw8fXutTe/bs6du3L7McFhbm4OBQVVVF07Srqyt7xocNG7Zt2zb1FLUZaR7/AdXpyZMnPB6vW7duhBAejzdw4MA7d+7I5Llz5w57nwwvLy8mw927d7t06WJiYkIIMTY27t69+927d9Vb9oa4c+eOt7c3s+zt7f3w4cPy8jdmM+ROOZmammptbc2mREVF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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "N = 80\n", "u = zeros(N,N)\n", @@ -825,10 +3778,189 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "1750ecb1", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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VDAGZgkL5t5jt27dTp48+fbbbxNCTp061b17d0JIcHAws7i8bhwSQnTXTdR1586dsrUZTZo0USqVmZmZTC1ERETE6tWrp0yZwi7E8eDBg6CgoPHjx69atSo6OppZjLes+Ph4rKYEdUq+mtz+N/yYxp7MGu56jT2VJaYbIlRarQShQqG4cuXKrVu3BALBe++9x24vKSn59ddfb9682bRp0/fff5/L5drZ2X377bfJycmxsbEHDhyYMeN1rrRqFpfLXbN2/bixY+z5vMFNxez2aynZ75569PniLyQSSfXPsnLlyvHjxz979qxx48bPnz/Pzs5esWIF+y6Hw2nXrt0777zTpk2bcePGffTRR2FhYUKh0NPT85tvvvnqq6/0jsbecTVo//79x48fv3z5so2NTXZ29qhRo8LDw+/evcs23WZO9PHHHzs7O69cuZK5HdqrV6/Q0NC+ffu+/fbbNE1funRp2rRpnTt31j3yvHnzKIry9vaOiYnZtm1b2eeUAoGga9euFy9eHDp0KCFkzpw50dHRrVu3fuutt0Qi0e3bt0+dOpWcnBwcHPzjjz/26dNnwoQJQUFBRUVFe/bsadasGXOQR48eWVtbIwjB5JjGnmW7Wu8L5zjwTT04qIZa6TW6fv3633//3drauqCgQHdZgOnTp8fExMyZM2fHjh0KheL06dPM9pMnT27cuJFZpdYg4/ca3bt374ypU11tuO1EAisOdT+r6JE8e8mXX3308cevd0CpVHrp0qWRI0eyW168eLFv3z6pVOrt7T1w4MDGjRsnJCTcunVr2LBhhJDc3Nxjx44pFIrBgwdLJJLExMSdO3cqlcq+fft27dqVEJKfn799+3bdmZbluXbtmm6/sdDQ0JYtW2ZkZOzevXvmzJnMqrnPnz//448/iouLx44dy87qpGn6yJEj0dHRPB6vdevWAwcO1Ls6vH379vHjxzMyMsRi8fDhwxs1akTK2Lt3786dO3WfHZ45c+bcuXNFRUXNmjUbNWoUe+MoLi7uwIEDMplMLBZ37NixW7duzPZPPvlEIBB88sknlfpB1y/oNWpyShW5+m9X6wfZdJBT1Rp71kavUahxtdh0e9u2batWrWKDMC0tzcfHJy4uztvbu7i4WCQSnT59um3btoSQzMzMlJSUVq1alXeoxo0bz5w508fHh/nS09OzvHtorIyMjBYtWlRn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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Ns = [20,40,80,160]\n", "reltol = 1.0e-5\n", @@ -856,10 +3988,551 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "db9397dd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "N = 10\n", "u = zeros(N,N)\n", @@ -882,10 +4555,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "ee7679f4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "prolongate! (generic function with 1 method)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "function prolongate!(u_fine,u_coarse)\n", " ni_coarse, nj_coarse = size(u_coarse)\n", @@ -909,10 +4593,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "260bbcb0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to C:\\Users\\gelie\\Home\\TeachingInnovationProject\\XM_40017\\notebooks\\a2.gif\n" + ] + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "Plots.AnimatedGif(\"C:\\\\Users\\\\gelie\\\\Home\\\\TeachingInnovationProject\\\\XM_40017\\\\notebooks\\\\a2.gif\")" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "iters_in_level = [2,2,2,2,2,2,2,2]\n", "u_coarse = zeros(2,2)\n", @@ -938,10 +4643,210 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "8a5e1031", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mPrecompiling Preconditioners [af69fa37-3177-5a40-98ee-561f696e4fcd]\n" + ] + }, + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "using Preconditioners\n", "Ns = [20,40,80,160]\n", @@ -1016,10 +4921,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "b37f6be4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "conjugate_gradient! (generic function with 1 method)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "function conjugate_gradient!(x,A,b;M,reltol,maxiters=size(A,1))\n", " c = similar(x)\n",