{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multigrid examples" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from __future__ import print_function\n", "\n", "import numpy as np\n", "\n", "import pyro.mesh.boundary as bnd\n", "import pyro.mesh.patch as patch\n", "import pyro.multigrid.MG as MG" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constant-coefficent Poisson equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to solve \n", "\n", "$$\\phi_{xx} + \\phi_{yy} = -2[(1-6x^2)y^2(1-y^2) + (1-6y^2)x^2(1-x^2)]$$\n", "\n", "on \n", "\n", "$$[0,1]\\times [0,1]$$ \n", "\n", "with homogeneous Dirichlet boundary conditions (this example comes from \"A Multigrid Tutorial\").\n", "\n", "This has the analytic solution\n", "$$u(x,y) = (x^2 - x^4)(y^4 - y^2)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We start by setting up a multigrid object--this needs to know the number of zones our problem is defined on" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cc data: nx = 2, ny = 2, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 4, ny = 4, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 8, ny = 8, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 16, ny = 16, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 32, ny = 32, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 64, ny = 64, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 128, ny = 128, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n", "cc data: nx = 256, ny = 256, ng = 1\n", " nvars = 3\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", "\n" ] } ], "source": [ "nx = ny = 256\n", "mg = MG.CellCenterMG2d(nx, ny, \n", " xl_BC_type=\"dirichlet\", xr_BC_type=\"dirichlet\",\n", " yl_BC_type=\"dirichlet\", yr_BC_type=\"dirichlet\", verbose=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we initialize the RHS. To make life easier, the `CellCenterMG2d` object has the coordinates of the solution grid (including ghost cells) as `mg.x2d` and `mg.y2d` (these are two-dimensional arrays)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Source norm = 1.097515813669473\n" ] } ], "source": [ "def rhs(x, y):\n", " return -2.0*((1.0-6.0*x**2)*y**2*(1.0-y**2) + (1.0-6.0*y**2)*x**2*(1.0-x**2))\n", "\n", "mg.init_RHS(rhs(mg.x2d, mg.y2d))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The last setup step is to initialize the solution--this is the starting point for the solve. Usually we just want to start with all zeros, so we use the `init_zeros()` method" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "mg.init_zeros()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can now solve -- there are actually two different techniques we can do here. We can just do pure smoothing on the solution grid using `mg.smooth(mg.nlevels-1, N)`, where `N` is the number of smoothing iterations. To get the solution `N` will need to be large and this will take a long time.\n", "\n", "Multigrid accelerates the smoothing. We can do a V-cycle multigrid solution using `mg.solve()`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "source norm = 1.097515813669473\n", "<<< beginning V-cycle (cycle 1) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.097515813669473\n", " after G-S, residual L2: 1.502308451578657\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.0616243965458263\n", " after G-S, residual L2: 1.4321452257629033\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.011366277976364\n", " after G-S, residual L2: 1.281872470375375\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.903531158162907\n", " after G-S, residual L2: 0.9607576999783505\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.6736112182020367\n", " after G-S, residual L2: 0.4439774050299674\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.30721142286171554\n", " after G-S, residual L2: 0.0727215591269748\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.04841813458618458\n", " after G-S, residual L2: 3.9610700301811246e-05\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 3.925006722484123e-05\n", " after G-S, residual L2: 1.0370099820862674e-09\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.07010129273961899\n", " after G-S, residual L2: 0.0008815704830693547\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.4307377377402105\n", " after G-S, residual L2: 0.007174899576794818\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.911086486792154\n", " after G-S, residual L2: 0.01618756602227813\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.1945438349788615\n", " after G-S, residual L2: 0.022021327892004925\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.313456560108626\n", " after G-S, residual L2: 0.02518650395173617\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.3618314516335004\n", " after G-S, residual L2: 0.026870007568672097\n", "\n", "cycle 1: relative err = 0.999999999999964, residual err = 0.02448256984911586\n", "\n", "<<< beginning V-cycle (cycle 2) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 0.026870007568672097\n", " after G-S, residual L2: 0.025790216249923552\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.018218080204017304\n", " after G-S, residual L2: 0.023654310121915274\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.01669077991582338\n", " after G-S, residual L2: 0.01977335201785163\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.013922595404814862\n", " after G-S, residual L2: 0.013577568890182053\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.009518306167970536\n", " after G-S, residual L2: 0.006115159484497302\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.004244630812032651\n", " after G-S, residual L2: 0.0010674120586864006\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.0007108144252738053\n", " after G-S, residual L2: 5.818246254772703e-07\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 5.765281065294632e-07\n", " after G-S, residual L2: 1.5231212503339452e-11\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.0010291471590693868\n", " after G-S, residual L2: 1.2950948742201083e-05\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.006239446983842889\n", " after G-S, residual L2: 0.00010483463130232172\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.014573363314854\n", " after G-S, residual L2: 0.00026233988398787004\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.021564270263952755\n", " after G-S, residual L2: 0.0003944827058086955\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.02579092712136628\n", " after G-S, residual L2: 0.00048636495715121916\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 0.028051324215592862\n", " after G-S, residual L2: 0.0005440874957950154\n", "\n", "cycle 2: relative err = 13.739483825281054, residual err = 0.0004957445615074047\n", "\n", "<<< beginning V-cycle (cycle 3) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 0.0005440874957950154\n", " after G-S, residual L2: 0.0005095844930046698\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.0003597879816772893\n", " after G-S, residual L2: 0.00044648485218937167\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.0003147892995472901\n", " after G-S, residual L2: 0.0003492541721056348\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.0002457276904804801\n", " after G-S, residual L2: 0.00022232862524233384\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.0001558932199490972\n", " after G-S, residual L2: 9.511093023364078e-05\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 6.616899520585456e-05\n", " after G-S, residual L2: 1.711006102346096e-05\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.139522901981679e-05\n", " after G-S, residual L2: 9.33004809910226e-09\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 9.245125097272049e-09\n", " after G-S, residual L2: 2.442311694447821e-13\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.64991725637487e-05\n", " after G-S, residual L2: 2.0771258971860784e-07\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.00010097720436460624\n", " after G-S, residual L2: 1.7241727900979902e-06\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.0002575410544503153\n", " after G-S, residual L2: 4.766282851613449e-06\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.00041133882050328275\n", " after G-S, residual L2: 7.600616845344458e-06\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.0005232809692242086\n", " after G-S, residual L2: 9.860758095018993e-06\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 0.0005945070122423073\n", " after G-S, residual L2: 1.1466134915427874e-05\n", "\n", "cycle 3: relative err = 34.347638624909216, residual err = 1.0447352805871284e-05\n", "\n", "<<< beginning V-cycle (cycle 4) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.1466134915427874e-05\n", " after G-S, residual L2: 1.054466722279011e-05\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 7.442814693866286e-06\n", " after G-S, residual L2: 8.955050475722099e-06\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 6.311313968968047e-06\n", " after G-S, residual L2: 6.734553609148436e-06\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 4.737984987500691e-06\n", " after G-S, residual L2: 4.091799997658277e-06\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 2.871028473858937e-06\n", " after G-S, residual L2: 1.6319551993366253e-06\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.1372178077508109e-06\n", " after G-S, residual L2: 2.961040430099916e-07\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.9721864323458624e-07\n", " after G-S, residual L2: 1.61503943872384e-10\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.6003411195777404e-10\n", " after G-S, residual L2: 4.2274326344473505e-15\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 2.855691101825338e-07\n", " after G-S, residual L2: 3.5961118754371857e-09\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.7893831203170535e-06\n", " after G-S, residual L2: 3.1136282101831173e-08\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 4.97129807196115e-06\n", " after G-S, residual L2: 9.544819739422644e-08\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 8.281644276572538e-06\n", " after G-S, residual L2: 1.56637783149839e-07\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.0888850082357996e-05\n", " after G-S, residual L2: 2.0777271327080248e-07\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.2717522622400765e-05\n", " after G-S, residual L2: 2.464531349025277e-07\n", "\n", "cycle 4: relative err = 0.17409776671446628, residual err = 2.24555429482631e-07\n", "\n", "<<< beginning V-cycle (cycle 5) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 2.464531349025277e-07\n", " after G-S, residual L2: 2.2491138140311698e-07\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.5874562191875262e-07\n", " after G-S, residual L2: 1.886249099391391e-07\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.3294481979637655e-07\n", " after G-S, residual L2: 1.397710191717015e-07\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 9.836928907527788e-08\n", " after G-S, residual L2: 8.269030961692836e-08\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 5.8062531341283565e-08\n", " after G-S, residual L2: 3.034725896415429e-08\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 2.116912379336852e-08\n", " after G-S, residual L2: 5.467519592468213e-09\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 3.6418116003284676e-09\n", " after G-S, residual L2: 2.982625229812215e-12\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 2.955484162036181e-12\n", " after G-S, residual L2: 7.806739482450516e-17\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 5.273610709946236e-09\n", " after G-S, residual L2: 6.642323465658688e-11\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 3.4146989205844565e-08\n", " after G-S, residual L2: 6.052228076583688e-10\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 1.031248597196911e-07\n", " after G-S, residual L2: 2.0541497445308587e-09\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.7585349306604133e-07\n", " after G-S, residual L2: 3.421022608879089e-09\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.3383756442516674e-07\n", " after G-S, residual L2: 4.552170797983864e-09\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 2.7592842790687426e-07\n", " after G-S, residual L2: 5.41488950707315e-09\n", "\n", "cycle 5: relative err = 0.005391244339065405, residual err = 4.933769007818501e-09\n", "\n", "<<< beginning V-cycle (cycle 6) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 5.41488950707315e-09\n", " after G-S, residual L2: 4.948141362729419e-09\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 3.4929583962703016e-09\n", " after G-S, residual L2: 4.154445183511443e-09\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 2.9288841397931397e-09\n", " after G-S, residual L2: 3.074779198797186e-09\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 2.164991235492634e-09\n", " after G-S, residual L2: 1.788028730183651e-09\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.2562223343389894e-09\n", " after G-S, residual L2: 6.021983813990021e-10\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 4.2028073688787063e-10\n", " after G-S, residual L2: 1.0655724637281067e-10\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 7.097871736854444e-11\n", " after G-S, residual L2: 5.813506543301849e-14\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 5.760611936011378e-14\n", " after G-S, residual L2: 1.521555112430923e-18\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.027891920456506e-10\n", " after G-S, residual L2: 1.294879454701896e-12\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 6.914011940773812e-10\n", " after G-S, residual L2: 1.2453691230551983e-11\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 2.2570491487662195e-09\n", " after G-S, residual L2: 4.639035392364569e-11\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 3.908967396962745e-09\n", " after G-S, residual L2: 7.803740782474827e-11\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 5.196394306272565e-09\n", " after G-S, residual L2: 1.033274523100204e-10\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 6.117636729623554e-09\n", " after G-S, residual L2: 1.2199402602477584e-10\n", "\n", "cycle 6: relative err = 7.51413991329132e-05, residual err = 1.111546863428753e-10\n", "\n", "<<< beginning V-cycle (cycle 7) >>>\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.2199402602477584e-10\n", " after G-S, residual L2: 1.121992266879251e-10\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 7.921861122082639e-11\n", " after G-S, residual L2: 9.493449600138316e-11\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 6.694993398453784e-11\n", " after G-S, residual L2: 7.050995614737483e-11\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 4.9666563586565975e-11\n", " after G-S, residual L2: 4.045094776680348e-11\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 2.843147343834713e-11\n", " after G-S, residual L2: 1.2576313722677801e-11\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 8.777954081387978e-12\n", " after G-S, residual L2: 2.170559196862902e-12\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.445876195415056e-12\n", " after G-S, residual L2: 1.1842925278593641e-15\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.1735184729034125e-15\n", " after G-S, residual L2: 3.0994757710835167e-20\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 2.094012660676073e-12\n", " after G-S, residual L2: 2.6382579574150587e-14\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.466147487151147e-11\n", " after G-S, residual L2: 2.6760553592700965e-13\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 5.130705216489902e-11\n", " after G-S, residual L2: 1.0810419626613159e-12\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 9.001551103280705e-11\n", " after G-S, residual L2: 1.8342879121275396e-12\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.1914921193827463e-10\n", " after G-S, residual L2: 2.4124327865487605e-12\n", "\n", " level: 7, grid: 256 x 256\n", " before G-S, residual L2: 1.3907209384461257e-10\n", " after G-S, residual L2: 2.8429898342353533e-12\n", "\n", "cycle 7: relative err = 7.062255558417692e-07, residual err = 2.590386214782638e-12\n", "\n" ] } ], "source": [ "mg.solve()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can access the solution on the finest grid using `get_solution()`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "phi = mg.get_solution()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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9PHeZ2UA8MADD+AXfuEXsvLn/pO/ONbUNtlkk002OQH55je/iYsXL85udyrgdeutt2K322Us65FHHsnYGAC8613vwn333Rf3x3HEX/7lX+If/+N/jK997WuL7KVPd7l8+TLuvPPO7fwUZDs/bdnOUV2281OX1vnx3uOb3/wm7rjjjkX9nwp43XDDDXjRi16EBx98ED/6oz8ayx988EH883/+zzP9Cxcu4MKFC6JsGIK77uabb94unIps56cu2/lpy3aO6rKdn7rUzs8SxkVyambD++67D//qX/0rfN/3fR9+4Ad+AP/5P/9n/NVf/RV++qd/+rSmtMkmm2yyyTUipwZeP/7jP46//du/xb/7d/8O3/jGN3DXXXfhd37nd/Dc5z73tKa0ySabbLLJNSKnGrDx1re+FW9961sXtb1w4QJ+/ud/PjMnbhJkOz912c5PW7ZzVJft/NTl2Ofn1BYpb7LJJptssslS2dJTbLLJJptscs3JBl6bbLLJJptcc7KB1yabbLLJJtecbOC1ySabbLLJNSfXLHht3wID7r//fjjnxL9Lly7Feu897r//ftxxxx248cYb8fKXvxxf/vKXT3HGx5fPfvazeN3rXoc77rgDzjn8xm/8hqjvOSdXrlzB29/+dtx666145jOfide//vX4+te/foJHcTxpnZ83v/nN2TX1kpe8ROg8nc/PAw88gO///u/HTTfdhOc85zl4wxvegD/90z8VOtfzNdRzfk7qGromwWv7FliS7/3e78U3vvGN+O9P/uRPYt173/tevO9978MHPvABfPGLX8SlS5fw6le/Gt/85jdPccbHlW9961t44QtfiA984ANmfc85uffee/GpT30Kn/zkJ/G5z30Ojz/+OF772tdiv9+f1GEcTVrnBwB+5Ed+RFxTv/M7vyPqn87n5zOf+Qze9ra34Qtf+AIefPBBXL16FXfffTe+9a1vRZ3r+RrqOT/ACV1D/hqUf/pP/6n/6Z/+aVH2D//hP/T/5t/8m1Oa0enIz//8z/sXvvCFZt04jv7SpUv+P/yH/xDL/u///b/+4sWL/v/z/2/vbl5SacMwgN8Eo4SEJBSOSSJBKyWoIJQocBEIQuDGWrkKCgwi/4C2bWoXHIiIEwSuDIKgKPyAiCBKyD4WgvZBKIIUCUYWXe/i5czJypPnfU96xrl/MKA+z8AzFzfcDDP4fPtWpRXWFhFhbW1N+l5JJnd3dxAEAYFAQJpzc3ODhoYGbG5uVm3t1fA2HwDwer0YHh4ue46S8gGAbDYLIkI0GgXANfTW23yA6tWQ7O68eC+wUolEggwGA5nNZhoZGaFkMklERKlUijKZTElOarWaBgcHFZkTUWWZHB4e0tPTU8kcg8FAFotFMblFIhFqbW2lzs5OGhsbo2w2K40pLZ8f2y/pdDoi4hp6620+P1SjhmTXvH53L7B61tfXRysrK7S1tUWLi4uUyWTIbrdTLpeTsuCcfqokk0wmQyqVipqbm8vOqWdOp5NWV1cpFArR3NwcHRwckMPhkPbTU1I+AGh6epr6+/vJYrEQEdfQax/lQ1S9Gqrp30P9H5XuBVbPnE6n9NlqtZLNZqOOjg76/v279ICUc3rvv2SilNw8Ho/02WKxUG9vL5lMJtrY2CC32132vHrMx+fz0fHxMe3u7r4b4xoqn0+1akh2d16/uxeYkmg0GrJarZRIJKS3DjmnnyrJRK/XU7FYpNvb27JzlEQURTKZTJRIJIhIOflMTk7S+vo6hcNhMhqN0u9cQ/8ql89HvqqGZNe8Xu8F9tr29jbZ7fYarerv8Pj4SOfn5ySKIpnNZtLr9SU5FYtFikajis2pkkx6enpIEISSOel0mk5OThSZWy6Xo+vraxJFkYjqPx8A5PP5KBgMUigUIrPZXDKu9Br6LJ+PfFkNVfxqx18kEAhAEAQsLS3h7OwMU1NT0Gg0uLi4qPXSqsrv9yMSiSCZTGJ/fx8ulwtNTU1SDrOzs9BqtQgGg4jH4xgdHYUoiri/v6/xyr9OPp9HLBZDLBYDEWF+fh6xWAyXl5cAKstkfHwcRqMROzs7ODo6gsPhQFdXF56fn2t1WX/Mr/LJ5/Pw+/3Y29tDKpVCOByGzWZDW1ubYvKZmJiAVqtFJBJBOp2WjkKhIM1Rcg19lk81a0iWzQsAFhYWYDKZoFKp0N3dXfKqplJ4PB6IoghBEGAwGOB2u3F6eiqNv7y8YGZmBnq9Hmq1GgMDA4jH4zVc8dcLh8MgoneH1+sFUFkmDw8P8Pl80Ol0aGxshMvlwtXVVQ2u5s/7VT6FQgFDQ0NoaWmBIAhob2+H1+t9d+31nM9H2RARlpeXpTlKrqHP8qlmDfGWKIwxxmRHds+8GGOMMW5ejDHGZIebF2OMMdnh5sUYY0x2uHkxxhiTHW5ejDHGZIebF2OMMdnh5sUYY0x2uHkxxhiTHW5ejDHGZIebF2OMMdnh5sUYY0x2/gG3L8q6nrC/SAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.transpose(phi.v()), origin=\"lower\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can also get the gradient of the solution" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "gx, gy = mg.get_solution_gradient()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.subplot(121)\n", "plt.imshow(np.transpose(gx.v()), origin=\"lower\")\n", "plt.subplot(122)\n", "plt.imshow(np.transpose(gy.v()), origin=\"lower\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General linear elliptic equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `GeneralMG2d` class implements support for a general elliptic equation of the form:\n", "\n", "$$\\alpha \\phi + \\nabla \\cdot (\\beta \\nabla \\phi) + \\gamma \\cdot \\nabla \\phi = f$$\n", "\n", "with inhomogeneous boundary condtions.\n", "\n", "It subclasses the `CellCenterMG2d` class, and the basic interface is the same" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will solve the above with\n", "\n", "\\begin{align}\n", "\\alpha &= 10 \\\\\n", "\\beta &= xy + 1 \\\\\n", "\\gamma &= \\hat{x} + \\hat{y}\n", "\\end{align}\n", "\n", "and\n", "\n", "\n", "\\begin{equation}\n", "f = -\\frac{\\pi}{2}(x + 1)\\sin\\left(\\frac{\\pi y}{2}\\right) \\cos\\left(\\frac{\\pi x}{2}\\right ) -\\frac{\\pi}{2}(y + 1)\\sin\\left(\\frac{\\pi x}{2}\\right) \\cos\\left(\\frac{\\pi y}{2}\\right ) +\\left(\\frac{-\\pi^2 (xy+1)}{2} + 10\\right) \\cos\\left(\\frac{\\pi x}{2}\\right) \\cos\\left(\\frac{\\pi y}{2}\\right)\n", "\\end{equation}\n", "\n", "\n", "on $[0, 1] \\times [0,1]$ with boundary conditions:\n", "\n", "\\begin{align}\n", "\\phi(x=0) &= \\cos(\\pi y/2) \\\\\n", "\\phi(x=1) &= 0 \\\\\n", "\\phi(y=0) &= \\cos(\\pi x/2) \\\\\n", "\\phi(y=1) &= 0\n", "\\end{align}\n", "\n", "\n", "This has the exact solution:\n", "\n", "$$\\phi = \\cos(\\pi x/2) \\cos(\\pi y/2)$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import pyro.multigrid.general_MG as gMG" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For reference, we'll define a function providing the analytic solution" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def true(x,y): \n", " return np.cos(np.pi*x/2.0)*np.cos(np.pi*y/2.0) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the coefficents--note that since $\\gamma$ is a vector, we have a different function for each component" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def alpha(x,y): \n", " return 10.0*np.ones_like(x) \n", " \n", "def beta(x,y): \n", " return x*y + 1.0 \n", " \n", "def gamma_x(x,y): \n", " return np.ones_like(x) \n", " \n", "def gamma_y(x,y): \n", " return np.ones_like(x) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the righthand side function" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def f(x,y):\n", " return -0.5*np.pi*(x + 1.0)*np.sin(np.pi*y/2.0)*np.cos(np.pi*x/2.0) - \\\n", " 0.5*np.pi*(y + 1.0)*np.sin(np.pi*x/2.0)*np.cos(np.pi*y/2.0) + \\\n", " (-np.pi**2*(x*y+1.0)/2.0 + 10.0)*np.cos(np.pi*x/2.0)*np.cos(np.pi*y/2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our inhomogeneous boundary conditions require a function that can be evaluated on the boundary to give the value" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def xl_func(y):\n", " return np.cos(np.pi*y/2.0)\n", "\n", "def yl_func(x):\n", " return np.cos(np.pi*x/2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can setup our grid object and the coefficients, which are stored as a `CellCenter2d` object. Note, the coefficients do not need to have the same boundary conditions as $\\phi$ (and for real problems, they may not). The one that matters the most is $\\beta$, since that will need to be averaged to the edges of the domain, so the boundary conditions on the coefficients are important.\n", "\n", "Here we use Neumann boundary conditions" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import pyro.mesh.patch as patch\n", "\n", "nx = ny = 128\n", "\n", "g = patch.Grid2d(nx, ny, ng=1)\n", "d = patch.CellCenterData2d(g)\n", "\n", "bc_c = bnd.BC(xlb=\"neumann\", xrb=\"neumann\",\n", " ylb=\"neumann\", yrb=\"neumann\")\n", "\n", "d.register_var(\"alpha\", bc_c)\n", "d.register_var(\"beta\", bc_c)\n", "d.register_var(\"gamma_x\", bc_c)\n", "d.register_var(\"gamma_y\", bc_c)\n", "d.create()\n", "\n", "a = d.get_var(\"alpha\")\n", "a[:,:] = alpha(g.x2d, g.y2d)\n", "\n", "b = d.get_var(\"beta\")\n", "b[:,:] = beta(g.x2d, g.y2d)\n", "\n", "gx = d.get_var(\"gamma_x\")\n", "gx[:,:] = gamma_x(g.x2d, g.y2d)\n", "\n", "gy = d.get_var(\"gamma_y\")\n", "gy[:,:] = gamma_y(g.x2d, g.y2d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can setup the multigrid object" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cc data: nx = 2, ny = 2, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 4, ny = 4, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 8, ny = 8, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 16, ny = 16, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 32, ny = 32, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 64, ny = 64, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n", "cc data: nx = 128, ny = 128, ng = 1\n", " nvars = 7\n", " variables:\n", " v: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " f: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " r: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: dirichlet +x: dirichlet -y: dirichlet +y: dirichlet \n", " alpha: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " beta: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_x: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", " gamma_y: min: 0.0000000000 max: 0.0000000000\n", " BCs: -x: neumann +x: neumann -y: neumann +y: neumann \n", "\n" ] } ], "source": [ "a = gMG.GeneralMG2d(nx, ny,\n", " xl_BC_type=\"dirichlet\", yl_BC_type=\"dirichlet\",\n", " xr_BC_type=\"dirichlet\", yr_BC_type=\"dirichlet\",\n", " xl_BC=xl_func,\n", " yl_BC=yl_func,\n", " coeffs=d,\n", " verbose=1, vis=0, true_function=true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "just as before, we specify the righthand side and initialize the solution" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Source norm = 1.775181492337501\n" ] } ], "source": [ "a.init_zeros()\n", "a.init_RHS(f(a.x2d, a.y2d))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and we can solve it" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "source norm = 1.775181492337501\n", "<<< beginning V-cycle (cycle 1) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.775181492337501\n", " after G-S, residual L2: 188.9332667507471\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 129.93801550392874\n", " after G-S, residual L2: 56.28708770794368\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 38.88692621665778\n", " after G-S, residual L2: 18.722754099081875\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 12.92606814051491\n", " after G-S, residual L2: 6.7418584016115615\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 4.646478379380238\n", " after G-S, residual L2: 2.0651261541465855\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.3745334259197386\n", " after G-S, residual L2: 0.02244519721859255\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.03125252087247784\n", " after G-S, residual L2: 8.232822131629766e-05\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 2.8059768631102897\n", " after G-S, residual L2: 0.07481536016729919\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 8.77240243659538\n", " after G-S, residual L2: 0.2436194269452686\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 19.59101132435104\n", " after G-S, residual L2: 0.5448263647958954\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 50.4641088994847\n", " after G-S, residual L2: 1.3597629173942345\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 160.2131163846867\n", " after G-S, residual L2: 4.125142056231144\n", "\n", "cycle 1: relative err = 0.9999999999999981, residual err = 2.323786088373021\n", "\n", "<<< beginning V-cycle (cycle 2) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 4.125142056231144\n", " after G-S, residual L2: 2.4247311846143984\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.6915411385849388\n", " after G-S, residual L2: 1.048624109440286\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.728341635357186\n", " after G-S, residual L2: 0.4554818109365305\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.3165327512850202\n", " after G-S, residual L2: 0.22128563126748022\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.15332496186655523\n", " after G-S, residual L2: 0.07471968817844267\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.04974939187294444\n", " after G-S, residual L2: 0.000813357286041041\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.0011325179143730278\n", " after G-S, residual L2: 2.9833778391774223e-06\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.10152627387884025\n", " after G-S, residual L2: 0.00270070470024105\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.2981467241559525\n", " after G-S, residual L2: 0.008199107952269268\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.5218848114624626\n", " after G-S, residual L2: 0.014956130961989951\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.9910630869231989\n", " after G-S, residual L2: 0.028422939317571477\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.0441877458177586\n", " after G-S, residual L2: 0.05829382601881069\n", "\n", "cycle 2: relative err = 0.036315310129800826, residual err = 0.03283823443993396\n", "\n", "<<< beginning V-cycle (cycle 3) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.05829382601881069\n", " after G-S, residual L2: 0.04172011870726864\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.029246699093099682\n", " after G-S, residual L2: 0.02335632639759113\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.01630629679281779\n", " after G-S, residual L2: 0.012906629461195187\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.009011110787953677\n", " after G-S, residual L2: 0.00731526293890866\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.005081499522859446\n", " after G-S, residual L2: 0.0025625265171556363\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 0.0017064130732666084\n", " after G-S, residual L2: 2.7912387046731846e-05\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 3.88652692543315e-05\n", " after G-S, residual L2: 1.0238217009469722e-07\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.0034819145217790757\n", " after G-S, residual L2: 9.252096659805304e-05\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.010064990348703503\n", " after G-S, residual L2: 0.000274405441825591\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.016032310448839227\n", " after G-S, residual L2: 0.0004558226543272719\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.02430374388018733\n", " after G-S, residual L2: 0.0007098551729200968\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.03777531891587048\n", " after G-S, residual L2: 0.001103512282001738\n", "\n", "cycle 3: relative err = 0.0012532978372415558, residual err = 0.0006216334987521017\n", "\n", "<<< beginning V-cycle (cycle 4) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.001103512282001738\n", " after G-S, residual L2: 0.0008898317346982837\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.0006257398720757915\n", " after G-S, residual L2: 0.0006077401190832001\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.00042604165447805513\n", " after G-S, residual L2: 0.0003976740182571413\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.0002784624522915077\n", " after G-S, residual L2: 0.00024268300992448264\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.0001688184030128213\n", " after G-S, residual L2: 8.63435240004183e-05\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 5.750132804421135e-05\n", " after G-S, residual L2: 9.407985171394705e-07\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.309971480329214e-06\n", " after G-S, residual L2: 3.4508339509814223e-09\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 0.0001173242104275028\n", " after G-S, residual L2: 3.115753146780207e-06\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 0.0003385086711958763\n", " after G-S, residual L2: 9.177601888021123e-06\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 0.0005249527904445416\n", " after G-S, residual L2: 1.4651643231018942e-05\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 0.0007080871923403828\n", " after G-S, residual L2: 2.0290645679962866e-05\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 0.0009185166830467631\n", " after G-S, residual L2: 2.657030046653513e-05\n", "\n", "cycle 4: relative err = 4.257466296364851e-05, residual err = 1.4967652930826935e-05\n", "\n", "<<< beginning V-cycle (cycle 5) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.657030046653513e-05\n", " after G-S, residual L2: 2.3098223935313785e-05\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.62748573956126e-05\n", " after G-S, residual L2: 1.790614264207289e-05\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 1.258588239889598e-05\n", " after G-S, residual L2: 1.2880701434507449e-05\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 9.035061893240921e-06\n", " after G-S, residual L2: 8.103003189063974e-06\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 5.641504288200945e-06\n", " after G-S, residual L2: 2.901212906819645e-06\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.9321695178564805e-06\n", " after G-S, residual L2: 3.161675602297454e-08\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 4.402332099930838e-08\n", " after G-S, residual L2: 1.1596974315664115e-10\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 3.9422658752906826e-06\n", " after G-S, residual L2: 1.0466257646978307e-07\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.1405869021996882e-05\n", " after G-S, residual L2: 3.081954658995012e-07\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 1.769602521372454e-05\n", " after G-S, residual L2: 4.853326075346603e-07\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 2.2817221850081978e-05\n", " after G-S, residual L2: 6.339093027063977e-07\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.7204506619363593e-05\n", " after G-S, residual L2: 7.617366608567251e-07\n", "\n", "cycle 5: relative err = 1.437223355768636e-06, residual err = 4.2910353907176844e-07\n", "\n", "<<< beginning V-cycle (cycle 6) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 7.617366608567251e-07\n", " after G-S, residual L2: 6.887955156426563e-07\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 4.858303576730231e-07\n", " after G-S, residual L2: 5.698844687563798e-07\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 4.0114485957443323e-07\n", " after G-S, residual L2: 4.288730517202583e-07\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 3.011320287772163e-07\n", " after G-S, residual L2: 2.722913600393885e-07\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.8967555906447816e-07\n", " after G-S, residual L2: 9.770491560795584e-08\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 6.507167362727163e-08\n", " after G-S, residual L2: 1.0648579124114833e-09\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.4827137305196198e-09\n", " after G-S, residual L2: 3.905880555246777e-12\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.327670548521078e-07\n", " after G-S, residual L2: 3.5242457966015008e-09\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 3.856314492307069e-07\n", " after G-S, residual L2: 1.0398885089175414e-08\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 6.038836851891428e-07\n", " after G-S, residual L2: 1.6338312488394662e-08\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 7.682416354755789e-07\n", " after G-S, residual L2: 2.077211623429353e-08\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 8.865085868685839e-07\n", " after G-S, residual L2: 2.4019193506676187e-08\n", "\n", "cycle 6: relative err = 4.849259894834445e-08, residual err = 1.3530556515124825e-08\n", "\n", "<<< beginning V-cycle (cycle 7) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.4019193506676187e-08\n", " after G-S, residual L2: 2.2125281372771198e-08\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 1.561381038807939e-08\n", " after G-S, residual L2: 1.886960673167899e-08\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 1.329268816246029e-08\n", " after G-S, residual L2: 1.4485741753521445e-08\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.0177211567137172e-08\n", " after G-S, residual L2: 9.198083184898649e-09\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 6.409466908197649e-09\n", " after G-S, residual L2: 3.3018376959918963e-09\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 2.199060578574703e-09\n", " after G-S, residual L2: 3.598749904926513e-11\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 5.0109192227870255e-11\n", " after G-S, residual L2: 1.3200150083511782e-13\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 4.48679191788079e-09\n", " after G-S, residual L2: 1.1908944666026909e-10\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 1.308116183600633e-08\n", " after G-S, residual L2: 3.5229822636126385e-10\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 2.0705036251434032e-08\n", " after G-S, residual L2: 5.546643278736882e-10\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 2.628082249674873e-08\n", " after G-S, residual L2: 6.964954416636588e-10\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 2.99444121990791e-08\n", " after G-S, residual L2: 7.914127842417476e-10\n", "\n", "cycle 7: relative err = 1.6392149576904378e-09, residual err = 4.458207725000789e-10\n", "\n", "<<< beginning V-cycle (cycle 8) >>>\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 7.914127842417476e-10\n", " after G-S, residual L2: 7.355859728039993e-10\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 5.192197657358953e-10\n", " after G-S, residual L2: 6.364658784609479e-10\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 4.485501516615104e-10\n", " after G-S, residual L2: 4.92822276848544e-10\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 3.463701923819941e-10\n", " after G-S, residual L2: 3.1194086454251064e-10\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 2.1741762390347935e-10\n", " after G-S, residual L2: 1.1194487678586295e-10\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 7.455716542482062e-11\n", " after G-S, residual L2: 1.2201470093856338e-12\n", "\n", " bottom solve:\n", " level: 0, grid: 2 x 2\n", "\n", " level: 1, grid: 4 x 4\n", " before G-S, residual L2: 1.6989396365976684e-12\n", " after G-S, residual L2: 4.475476506307932e-15\n", "\n", " level: 2, grid: 8 x 8\n", " before G-S, residual L2: 1.5212108616548206e-10\n", " after G-S, residual L2: 4.037425067492746e-12\n", "\n", " level: 3, grid: 16 x 16\n", " before G-S, residual L2: 4.449137567321805e-10\n", " after G-S, residual L2: 1.1972449146203713e-11\n", "\n", " level: 4, grid: 32 x 32\n", " before G-S, residual L2: 7.109768080523844e-10\n", " after G-S, residual L2: 1.8912282007395565e-11\n", "\n", " level: 5, grid: 64 x 64\n", " before G-S, residual L2: 9.034003713243436e-10\n", " after G-S, residual L2: 2.3606440301264504e-11\n", "\n", " level: 6, grid: 128 x 128\n", " before G-S, residual L2: 1.0238015900738368e-09\n", " after G-S, residual L2: 2.6756968686627095e-11\n", "\n", "cycle 8: relative err = 5.555097426033948e-11, residual err = 1.5072807373286882e-11\n", "\n" ] } ], "source": [ "a.solve(rtol=1.e-10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compare to the true solution" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "v = a.get_solution()\n", "b = true(a.x2d, a.y2d)\n", "e = v - b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The norm of the error is" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.671934405e-05\n" ] } ], "source": [ "print(f\"{e.norm():20.10g}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.13" } }, "nbformat": 4, "nbformat_minor": 4 }