{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Adaptive PDE discretizations on Cartesian grids\n", "## Volume : Divergence form PDEs\n", "## Part : Static problems\n", "## Chapter : Elliptic equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook illustrates the use of non-negative finite difference schemes to solve elliptic partial differential equations (PDEs). More precisely, we look for a solution $u$ defined over a bounded domain $\\Omega$ to the PDE\n", "$$\n", " -\\mathrm{div}(D\\nabla u) + \\alpha u = f,\n", "$$\n", "where $D$ is a field of positive definite matrices, and $\\alpha$ is a non-negative scalar field. \n", "Dirichlet boundary conditions are applied on the boundary. We also consider Neumann boundary conditions which take the form\n", "$$\n", " < n(x), D(x)\\nabla u(x)> = 0\n", "$$\n", "for all points $x$ in a subset $\\Gamma \\subset\\partial \\Omega$ of the boundary.\n", "\n", "**Energy minimization.** The above PDE can be rephrased as the optimality condition to an optimization problem, involving an elliptic energy. More precisely, the solution $u \\in H^1(\\Omega)$ to above PDE is also the unique minimizer to the energy\n", "$$\n", " E(u) = \\frac 1 2 \\int_\\Omega (\\| \\nabla u\\|_{D}^2 + \\alpha u^2) - \\int_\\Omega f u.\n", "$$\n", "Again, Dirichlet boundary conditions are imposed on the boundary. In this form, Neumann boundary conditions become to free boundary conditions (a.k.a. no constraint) on the corresponding part of the boundary.\n", "\n", "**Variational form.** The equivalence of the PDE with the energy minimization is obtained by considering an arbitrary test function $v \\in H^1_0(\\Omega)$ (or $v \\in H^1(\\Omega)$ for Neumann boundary conditions). Then (i) multiplying the PDE and integrating by parts, or (ii) considering that $E(u+\\epsilon v) \\geq E(u)$ for any $\\epsilon$, one obtains the variational form\n", "$$\n", " \\int_\\Omega <\\nabla u,D \\nabla v> + \\alpha u v - f v = 0.\n", "$$\n", "The variational form is *not* used in this notebook, where we prefer the energetic formulation. It does appear in the next notebook.\n", "\n", "**Note on the implementation of the boundary conditions.**\n", "A cartesian grid of scale $h>0$ is used for discretization:\n", "$$\n", " \\Omega_h := \\Omega \\cap h Z^d.\n", "$$\n", "Because of the use of a cartesian grid, the implementation of the boundary conditions is rather crude, which limits the accuracy of the numerical solution. Ad-hoc techniques including changes of variables, domain decompositions, fictitious domains, etc ... may be used to improve the discretization of the boundary conditions. \n", "\n", "The proposed implementations, if not modified, should therefore be used in contexts where the boundary conditions only play a minor role, if e.g. the solution decays quickly, or where accurary is not the main concern, e.g. in image processing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[**Summary**](Summary.ipynb) of volume Divergence form PDEs, this series of notebooks.\n", "\n", "[**Main summary**](../Summary.ipynb) of the Adaptive Grid Discretizations \n", "\tbook of notebooks, including the other volumes.\n", "\n", "# Table of contents\n", " * [1. Isotropic scheme](#1.-Isotropic-scheme)\n", " * [2. Naive anisotropic scheme](#2.-Naive-anisotropic-scheme)\n", " * [3. Anisotropic scheme](#3.-Anisotropic-scheme)\n", " * [4. Neuman boundary conditions](#4.-Neuman-boundary-conditions)\n", "\n", "\n", "\n", "**Acknowledgement.** Some of the experiments presented in these notebooks are part of \n", "ongoing research with Ludovic Métivier and Da Chen.\n", "\n", "Copyright Jean-Marie Mirebeau, Centre Borelli, ENS Paris-Saclay, CNRS, University Paris-Saclay" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 0. Importing the required libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.447743Z", "iopub.status.busy": "2024-04-30T09:01:29.446940Z", "iopub.status.idle": "2024-04-30T09:01:29.462091Z", "shell.execute_reply": "2024-04-30T09:01:29.461388Z" } }, "outputs": [], "source": [ "import sys; sys.path.insert(0,\"..\") # Allow import of agd from parent directory (useless if conda package installed)\n", "#from Miscellaneous import TocTools; TocTools.displayTOC('Elliptic','Div')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.465895Z", "iopub.status.busy": "2024-04-30T09:01:29.465565Z", "iopub.status.idle": "2024-04-30T09:01:29.526490Z", "shell.execute_reply": "2024-04-30T09:01:29.526168Z" } }, "outputs": [], "source": [ "from agd import Selling\n", "from agd import LinearParallel as lp\n", "from agd import FiniteDifferences as fd\n", "from agd import AutomaticDifferentiation as ad\n", "LInfNorm = ad.Optimization.norm_infinity" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.528200Z", "iopub.status.busy": "2024-04-30T09:01:29.528073Z", "iopub.status.idle": "2024-04-30T09:01:29.692614Z", "shell.execute_reply": "2024-04-30T09:01:29.692334Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Isotropic scheme\n", "\n", "We first consider a simplified problem in which the diffusion tensors are isotropic : \n", "$$\n", " D = c \\mathrm{Id},\n", "$$\n", "for some positive function $c$.\n", "The optimization problem becomes\n", "$$\n", " \\frac 1 2 \\int_\\Omega ( c \\| \\nabla u\\|^2 + \\alpha u^2) -\\int_\\Omega f u.\n", "$$\n", "It is discretized using the scheme\n", "$$\n", " \\frac{h^d} 2 \\sum_{x \\in \\Omega_h} (c(x) a_h(x) + \\alpha(x) u(x)^2) \n", " {-} h^d \\sum_{x \\in \\Omega_h} f(x) u(x)\n", "$$\n", "where for each point $x \\in \\Omega_h$ of the discretization domain\n", "$$\n", " a_h(x) := \\frac 1 2 \\sum_{i\\in \\{0,1\\}} \\sum_{\\sigma\\in \\{-1,1\\}} (\\frac{u(x+\\sigma h e_i)-u(x)} h)^2 \n", "$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.694225Z", "iopub.status.busy": "2024-04-30T09:01:29.694112Z", "iopub.status.idle": "2024-04-30T09:01:29.697119Z", "shell.execute_reply": "2024-04-30T09:01:29.696894Z" } }, "outputs": [], "source": [ "def Scheme_Iso(u,diff,α,f,bc,h):\n", " \"\"\"Isotropic elliptic energy, with Dirichlet boundary conditions\"\"\"\n", " hd = h**u.ndim # h^d scaling factor for integrals\n", " \n", " # Apply Dirichlet boundary conditions\n", " boundary = np.logical_not(np.isnan(bc))\n", " bc_integrand = (u-bc)**2\n", " bc_energy = bc_integrand[boundary].sum()*hd\n", " \n", " u=u.copy() # Avoid side effects.\n", " u[boundary] = bc[boundary]\n", " \n", " # Construct energy \n", " offsets = np.stack( ((1,0), (0,1), (-1,0), (0,-1)), axis=-1)\n", " du = fd.DiffUpwind(u, offsets,h)\n", " integrand = 0.25*diff*(du**2).sum(axis=0)+0.5*α*u**2 - f*u\n", " \n", " ad.simplify_ad(integrand) # Recommended for performance\n", " energy = integrand.sum()*hd\n", " \n", " return energy + bc_energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our next step is to generate the parameters." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.698577Z", "iopub.status.busy": "2024-04-30T09:01:29.698498Z", "iopub.status.idle": "2024-04-30T09:01:29.701088Z", "shell.execute_reply": "2024-04-30T09:01:29.700836Z" } }, "outputs": [], "source": [ "# Create the domain\n", "gridScale = 0.02\n", "aX0 = np.arange(-1,1,gridScale); aX1=aX0;\n", "X0,X1 = np.meshgrid(aX0,aX1,indexing='ij')\n", "\n", "# Set the boundary conditions \n", "bc=np.full(X0.shape,np.nan) \n", "bc[X0**2+X1**2>=0.9**2] = 1\n", "\n", "# Choose the PDE parameters\n", "diff = 1+0.8*X0\n", "α = 1+0.8*X1\n", "f = np.sin(4*(X0+X1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We next evaluate the scheme on a variable which incorporates second order symbolic perturbation." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.702445Z", "iopub.status.busy": "2024-04-30T09:01:29.702354Z", "iopub.status.idle": "2024-04-30T09:01:29.725118Z", "shell.execute_reply": "2024-04-30T09:01:29.724843Z" } }, "outputs": [], "source": [ "u = ad.Sparse2.identity(X0.shape)\n", "energy = Scheme_Iso(u,diff,α,f,bc,gridScale)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the energy is quadratic, it can be minimized by solving a (symmetric positive definite) linear system, which amounts to a single Newton step." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.726772Z", "iopub.status.busy": "2024-04-30T09:01:29.726685Z", "iopub.status.idle": "2024-04-30T09:01:29.777549Z", "shell.execute_reply": "2024-04-30T09:01:29.777248Z" } }, "outputs": [], "source": [ "solution = energy.solve_stationnary().reshape(u.shape)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.779202Z", "iopub.status.busy": "2024-04-30T09:01:29.779117Z", "iopub.status.idle": "2024-04-30T09:01:29.794398Z", "shell.execute_reply": "2024-04-30T09:01:29.794075Z" } }, "outputs": [], "source": [ "solution2 = energy.solve_stationnary().reshape(u.shape)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.795914Z", "iopub.status.busy": "2024-04-30T09:01:29.795828Z", "iopub.status.idle": "2024-04-30T09:01:29.872283Z", "shell.execute_reply": "2024-04-30T09:01:29.872000Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGxCAYAAABvIsx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKRElEQVR4nO3deXwTZf4H8E8obVqOhqP0glIqiy1axFKEtizKWSgLuLgKCAZwAWWV1Qr8VpFFDo8Krgoqhwfa5RCqyyH8gEpVLrcFAQssipV1wRZpuSxJcaEt7fP7g19i06RtkmYyRz7v1yuvFxkmk2cmk5lPvs8zU50QQoCIiIhIQ5rI3QAiIiIiT2PAISIiIs1hwCEiIiLNYcAhIiIizWHAISIiIs1hwCEiIiLNYcAhIiIizWHAISIiIs1hwCEiIiLNYcAhRTp48CBGjRqFjh07Qq/XIywsDMnJyZg5c6Zby5s0aRI6derk1mtzc3Mxf/58XLlyxe7/+vXrh379+rm13MY4d+4c5s+fj6NHj3r9vT3hzJkz0Ol0yMzMlGT5O3bswPz58yVZtisas9+5a8+ePdDpdNizZ4912vz586HT6Wzma8y+663vxKRJk6DT6awPvV6P2NhYzJs3D9evX7fOZ1k/y6NZs2bo0KEDhgwZgjfffBNlZWUNLrv2g9SvqdwNIKpt+/btGDlyJPr164fFixcjIiICxcXFOHz4MDZs2IBXX33Vq+3Jzc3FggULMGnSJLRq1crm/5YvX+7VtlicO3cOCxYsQKdOnXDnnXfK0obGiIiIQF5eHjp37izJ8nfs2IFly5bJHnLmzp2LJ598UtY21KUx+643vxNBQUH44osvAAClpaVYv349Fi5ciO+++w5ZWVk282ZnZ8NgMKCiogLnzp3D559/jr/85S945ZVXsG3bNnTv3r3OZZP2MOCQ4ixevBgxMTH49NNP0bTpr7vo2LFjsXjxYhlbZu+2226TuwmqpNfrkZSUJHczAABCCFy/fh1BQUEeX7ZUAc4TpNp3Pb3cJk2a2OwraWlpOHPmDD766CO89tpraN++vfX/EhMTERISYn0+duxYTJ8+Hffccw9GjhyJ77//Hnq9vs5lk7awi4oU5/LlywgJCbEJNxZNmtjustXV1Vi8eDHi4uKg1+sRGhqKCRMm4OzZs/W+R31dJDqdzvrLf/78+fif//kfAEBMTIy1fG0p/zsqx//888947LHH0L59ewQEBOCWW27BnDlzUF5ebvc+06dPx5o1a9C1a1c0a9YM3bt3x//+7//W2/Y9e/bgrrvuAgA8/PDD1jbVrFZs3boVycnJaNasGVq2bInBgwcjLy+v3uUCwPXr1zFz5kzceeedMBgMaNOmDZKTk/HJJ5843E7utB9wvP0vXryIRx55BFFRUdDr9WjXrh369OmDzz77zOa177//Prp3747AwEC0adMGo0aNwsmTJ63/P2nSJCxbtszaRsvjzJkzNu1euXIlunbtCr1ej7///e8AgC+//BIDBw5Ey5Yt0axZM6SkpGD79u0275+ZmQmdToecnBw8/PDDaNOmDZo3b44RI0bgP//5j828jrqoqqur8eabb+LOO+9EUFAQWrVqhaSkJGzdurXB7Xb48GGMHDkSbdq0QWBgIBISEvDRRx81+DpHau+7ls9k8eLFePHFF9GxY0cEBgaiZ8+e+Pzzz63zufOdKC8vx8KFC9G1a1cEBgaibdu26N+/P3Jzc91quyWU/Pjjjw3O2717d8yZMweFhYV2FR/SNgYcUpzk5GQcPHgQTzzxBA4ePIjKyso65/3Tn/6Ep59+GoMHD8bWrVvx/PPPIzs7GykpKbh06VKj2zJlyhT8+c9/BgBs2rQJeXl5yMvLQ48ePRzOf/36dfTv3x+rV6/GjBkzsH37djz00ENYvHgx7rvvPrv5t2/fjrfeegsLFy7Exo0brSfs2ifKmnr06IEPPvgAAPDXv/7V2qYpU6YAAD788EPce++9CA4Oxvr167Fq1SqUlpaiX79++PLLL+td3/Lycvz888+YNWsWtmzZgvXr1+O3v/0t7rvvPqxevdoj7a+L0WjEli1b8Nxzz2HXrl147733MGjQIFy+fNk6T0ZGBiZPnozbb78dmzZtwtKlS3H8+HEkJyfj1KlTAG52C91///0AYN02eXl5iIiIsC5ny5YtWLFiBZ577jl8+umn6Nu3L/bu3YsBAwbAZDJh1apVWL9+PVq2bIkRI0Y4PDFOnjwZTZo0wYcffoglS5bgq6++Qr9+/RyOS6lp0qRJePLJJ3HXXXchKysLGzZswMiRI60BrC67d+9Gnz59cOXKFaxcuRKffPIJ7rzzTowZM8ajY5neeustZGdnY8mSJVi7di2aNGmCtLQ0a0B29Ttx48YNpKWl4fnnn8fw4cOxefNmZGZmIiUlBYWFhW618d///jcAoF27dk7NP3LkSADAvn37HLav9qO6utqtdpHCCCKFuXTpkvjtb38rAAgAwt/fX6SkpIiMjAxRVlZmne/kyZMCgHjsscdsXn/w4EEBQDz77LPWaRMnThTR0dHW56dPnxYAxAcffGD3/gDEvHnzrM9feeUVAUCcPn3abt577rlH3HPPPdbnK1euFADERx99ZDPfokWLBACxa9cum/cJCwsTZrPZOq2kpEQ0adJEZGRk1LV5hBBCHDp0yGH7q6qqRGRkpOjWrZuoqqqyTi8rKxOhoaEiJSWl3uXWduPGDVFZWSkmT54sEhISbP6vMe13tP1btGgh0tPT63xNaWmpCAoKEsOGDbOZXlhYKPR6vRg3bpx12uOPPy7qOrwBEAaDQfz8888205OSkkRoaKjNPnbjxg0RHx8vOnToIKqrq4UQQnzwwQcCgBg1apTN6//5z38KAOKFF16wTqu93+3bt08AEHPmzKlzPesSFxcnEhISRGVlpc304cOHi4iICOvnvXv3bgFA7N692zrPvHnz7LZH7X3X8plERkaKa9euWaebzWbRpk0bMWjQIOs0V74Tq1evFgDEu+++6/I6T5w4UTRv3lxUVlaKyspKcfHiRbF06VKh0+nEXXfdZbd+Fy9edLica9euCQAiLS3NZtmWY0ztx8CBA11uKykPKzikOG3btsX+/ftx6NAhvPzyy7j33nvx/fffY/bs2ejWrZu1MrN7924AN38R19SrVy907drVpqzuLV988QWaN29urSBYWNpYu039+/dHy5Ytrc/DwsIQGhrqVOndkYKCApw7dw5Go9GmO69Fixb4wx/+gAMHDuC///1vvcv4+OOP0adPH7Ro0QJNmzaFv78/Vq1aZdMNJEX7e/XqhczMTLzwwgs4cOCAXeUuLy8P165ds/u8o6KiMGDAAJc+7wEDBqB169bW57/88gsOHjyI+++/Hy1atLBO9/Pzg9FoxNmzZ1FQUGCzjPHjx9s8T0lJQXR0tHW/dGTnzp0AgMcff9zptgI3Kxbfffed9T1rVhuGDRuG4uJiu/a567777kNgYKD1uaWKtW/fPlRVVbm8vJ07dyIwMBB//OMf3WrPL7/8An9/f/j7+6Ndu3ZIT09HWloaNm/e7PQyhBAOpwcFBeHQoUN2D7kuHiDPYsAhxerZsyeefvppfPzxxzh37hyeeuopnDlzxjrQ2NJ1UbPrwSIyMtKma8NbLl++jPDwcLvLTENDQ9G0aVO7NrVt29ZuGXq9HteuXXP7/YG6t0l1dTVKS0vrfP2mTZswevRotG/fHmvXrkVeXh4OHTqEP/7xjzaX5UrR/qysLEycOBHvvfcekpOT0aZNG0yYMAElJSVOrZsrn3ftZZSWlkIIUeeya76/RXh4uN284eHh9bbj4sWL8PPzc/ja+pw/fx4AMGvWLOvJ3vJ47LHHAMAjXbJA3etVUVGBq1evury8ixcvIjIy0m78nLNqhpDjx4/jypUr2L59u83g4oZYArfls7Ro0qQJevbsafe49dZb3WorKQuvoiJV8Pf3x7x58/D666/jxIkTAH49uRYXF6NDhw428587d87maoraLL9Qaw/8bWwoatu2LQ4ePAghhE3IuXDhAm7cuFFvmzyh5jap7dy5c2jSpIlN5aK2tWvXIiYmBllZWTbtr72dpBASEoIlS5ZgyZIlKCwsxNatW/HMM8/gwoULyM7ObnDdXNm2tQNo69at0aRJkzqXbWlfTZbgVXvab37zmzrft127dqiqqkJJSYnDMFUXy3vPnj3b4VguAIiNjXV6efWpa70CAgJsqlvOateuHb788ktUV1e7FXIsIaQxLAO45bhnFcmHFRxSHEcnGQDWLhLLr7ABAwYAuHlSrunQoUM4efIkBg4cWOd7hIWFITAwEMePH7eZ7uhqIctlpc5UJQYOHIirV69iy5YtNtMtA3Tra5Mr6mpTbGws2rdvjw8//NCmLP/LL79g48aN1iur6qLT6RAQEGATAEpKShxuFyl17NgR06dPx+DBg/H1118DuDn4PCgoyO7zPnv2LL744gubbevKZwYAzZs3R+/evbFp0yab11RXV2Pt2rXo0KGD3a/6devW2TzPzc3Fjz/+WO9JNC0tDQCwYsUKp9plERsbiy5duuDYsWMOKw49e/a06SpsjE2bNtlU68rKyrBt2zb07dsXfn5+AFzbvmlpabh+/bpkN3VsyLFjx/DSSy+hU6dOGD16tCxtIHmwgkOKM2TIEHTo0AEjRoxAXFwcqqurcfToUbz66qto0aKF9cZpsbGxeOSRR/Dmm29ar/Q4c+YM5s6di6ioKDz11FN1vodOp8NDDz2E999/H507d0b37t3x1Vdf4cMPP7Sbt1u3bgCApUuXYuLEifD390dsbKzDE8qECROwbNkyTJw4EWfOnEG3bt3w5Zdf4qWXXsKwYcMwaNAgj2yjzp07IygoCOvWrUPXrl3RokULREZGIjIyEosXL8b48eMxfPhwPProoygvL8crr7yCK1eu4OWXX653ucOHD8emTZvw2GOP4f7770dRURGef/55REREWK9SkoLJZEL//v0xbtw4xMXFoWXLljh06BCys7OtFYtWrVph7ty5ePbZZzFhwgQ8+OCDuHz5MhYsWIDAwEDMmzfPujzLZ7Zo0SKkpaXBz88Pd9xxBwICAupsQ0ZGBgYPHoz+/ftj1qxZCAgIwPLly3HixAmsX7/erupz+PBhTJkyBQ888ACKioowZ84ctG/f3tpl5Ejfvn1hNBrxwgsv4Pz58xg+fDj0ej3y8/PRrFkz69VJjrz99ttIS0vDkCFDMGnSJLRv3x4///wzTp48ia+//hoff/yxU9u6IX5+fhg8eDBmzJiB6upqLFq0CGazGQsWLLDO48p34sEHH8QHH3yAadOmoaCgAP3790d1dTUOHjyIrl27YuzYsR5pNwAcOXIEBoMBlZWV1hv9rVmzBqGhodi2bZvd519dXY0DBw44XFZCQoLNPXNIheQd40xkLysrS4wbN0506dJFtGjRQvj7+4uOHTsKo9Eovv32W5t5q6qqxKJFi8Stt94q/P39RUhIiHjooYdEUVGRzXy1r2YRQgiTySSmTJkiwsLCRPPmzcWIESPEmTNn7K6iEkKI2bNni8jISNGkSRObK1RqXzEihBCXL18W06ZNExEREaJp06YiOjpazJ49W1y/ft1mPgDi8ccft1v/6OhoMXHixAa30/r160VcXJzw9/e3a/OWLVtE7969RWBgoGjevLkYOHCg+Oc//9ngMoUQ4uWXXxadOnUSer1edO3aVbz77rsOr8JpTPtrX0V1/fp1MW3aNHHHHXeI4OBgERQUJGJjY8W8efPEL7/8YvPa9957T9xxxx0iICBAGAwGce+994pvvvnGZp7y8nIxZcoU0a5dO6HT6Wyu+Kmr3UIIsX//fjFgwADRvHlzERQUJJKSksS2bdts5rFcRbVr1y5hNBpFq1atrFd3nTp1ymZeR/tdVVWVeP3110V8fLx1HZKTk+3ex5Fjx46J0aNHi9DQUOHv7y/Cw8PFgAEDxMqVK63zNPYqqkWLFokFCxaIDh06iICAAJGQkCA+/fRTu7a48p24du2aeO6550SXLl1EQECAaNu2rRgwYIDIzc2td30tV1E1xLJ+loderxcREREiNTVVLF261OZKv5rLRh1XUQGw+yxJfXRC1DG8nIiI7GRmZuLhhx/GoUOHGj02REnOnDmDmJgYvPLKK5g1a5bczSFqNI7BISIiIs1hwCEiIiLNYRcVERERaQ4rOERERKQ5DDhERESkOQw4REREpDk+eaO/6upqnDt3Di1btrS7eRcREREpkxACZWVlTv19M58MOOfOnUNUVJTczSAiIiI3FBUV2f0Nwtp8MuBYbideVFSE4OBgmVtDREREzjCbzYiKinLqb6/5ZMCxdEsFBwcz4BAREamMM8NLfDLgkK1jheyuIyJSuu4di+RugqrwKioiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItKcpnI3gIjIWWtKU+RuAoytc+VuAhE5gQGHiGSnhODirPrayvBDpBwMOETkNWoKMu5wtH4MPUTyYMAhIkloPcw4i6GHSB4MOETkEQw0zqu5rRh2iKTBgENEbmGg8Yza25GBh8gzGHCIyCkMNN7B6g6RZzDgEJFDDDTyY9ghcp9XbvS3fPlyxMTEIDAwEImJidi/f3+d806aNAk6nc7ucfvtt1vnyczMdDjP9evXvbE6RJq1pjTF+iBl4edC5BrJKzhZWVlIT0/H8uXL0adPH7z99ttIS0vDt99+i44dO9rNv3TpUrz88svW5zdu3ED37t3xwAMP2MwXHByMgoICm2mBgYHSrASRhvGkqS6s6hA5R/KA89prr2Hy5MmYMmUKAGDJkiX49NNPsWLFCmRkZNjNbzAYYDAYrM+3bNmC0tJSPPzwwzbz6XQ6hIeHS9t4Io1iqNEGy+fIoENkT9KAU1FRgSNHjuCZZ56xmZ6amorcXOe+kKtWrcKgQYMQHR1tM/3q1auIjo5GVVUV7rzzTjz//PNISEhwuIzy8nKUl5dbn5vNZhfXhEj9GGq0i0GHyJ6kAefSpUuoqqpCWFiYzfSwsDCUlJQ0+Pri4mLs3LkTH374oc30uLg4ZGZmolu3bjCbzVi6dCn69OmDY8eOoUuXLnbLycjIwIIFCxq3MkQqxFDjWxh0iH7llauodDqdzXMhhN00RzIzM9GqVSv8/ve/t5melJSEpKQk6/M+ffqgR48eePPNN/HGG2/YLWf27NmYMWOG9bnZbEZUVJSLa0GkDgw1xKBDJHHACQkJgZ+fn1215sKFC3ZVndqEEHj//fdhNBoREBBQ77xNmjTBXXfdhVOnTjn8f71eD71e71rjiVSGwYZqY9AhXybpZeIBAQFITExETk6OzfScnBykpNR/MN67dy/+/e9/Y/LkyQ2+jxACR48eRURERKPaS6Q2vKybnMF9hHyR5F1UM2bMgNFoRM+ePZGcnIx33nkHhYWFmDZtGoCb3Uc//fQTVq9ebfO6VatWoXfv3oiPj7db5oIFC5CUlIQuXbrAbDbjjTfewNGjR7Fs2TKpV4dIEXiyInewokO+RPKAM2bMGFy+fBkLFy5EcXEx4uPjsWPHDutVUcXFxSgsLLR5jclkwsaNG7F06VKHy7xy5QoeeeQRlJSUwGAwICEhAfv27UOvXr2kXh0i2TDUkKcw6JAv0AkhhNyN8Daz2QyDwQCTyYTg4GC5myO7Y4UccK1kDDYkJYYc9ejesUjuJsjOlfM3/xYVkUIx2JA3sJpDWsWAQ6QwDDYkBwYd0hqv/LFNImoYr3QhJeA+SFrBCg6RzHhCcd2uwlhJlpvasaDhmXwAqzmkBQw4RDJhsPmVVIHFVc60w5dC0JrSFIYcUi0GHCIv88Vgo5QA4wmO1kXLoYchh9SKAYfIS7QcbLQUYNyh9dDDLitSIwYcIolpKdj4epBxRc1tpZWww2oOqQkDDpGE1BpuGGQ8q/b2VHPgYcghtWDAIZKAmoINw4z3qb26wy4rUgMGHCIPUnqwYZhRHstnotagw5BDSsWAQ+QhSgs3DDPqotagw5BDSsWAQ9RISgk2DDTaoMbuK4YcUiIGHKJGkDPcMNBon5qqOhyXQ0rDgEPkBrmCDUONb1Jb0GHIISVgwCFykbfDDUMNWagl6DDkkBIw4BA5yZvBhqGG6rOrMJYhh6gBDDhETvBGuGGoIVeooZrDkENyYsAhaoCU4YahhhpL6UGHIYfk0kTuBhApmVThZldhLMMNeZSS9yel3EqBfAsrOEQOSHFAVvIJiLRBydUcVnLI21jBIarF0+GG1RryNqXub6zkkDcx4BDV4MkDMIMNyUmp+x9DDnkLAw7R//PUgVepJxbyTUrcFxlyyBsYcIjgmQMugw0plRL3S4YckhoDDvm0NaUpjT7QMtiQGihxH2XIISkx4JDPYrAhX6PEfZYhh6TCgEM+yRPhhkitlLb/MuSQFBhwyOc05mCqxF/ARO5Q2n7MkEOexhv9kU9pbLhRq6unDY16fYsYk4daQkqitD/ayZsBkicx4JDPcDfcKDXYNDa0eOO9GIyUT2khh8hTGHCI6qGEcOPNIONpDbWdAUgZlBRyWMUhT2HAIZ/gTvVGjnCj5jDjjvrWl+HHuxhySGsYcEjzXA033gw2vhZoXOFo2zD0SIshh7SEV1GRpikx3Fw9bbA+yDU1tx23oTSU0C1rwSurqDG8EnCWL1+OmJgYBAYGIjExEfv3769z3j179kCn09k9vvvuO5v5Nm7ciNtuuw16vR633XYbNm/eLPVqkMooKdzwhCwdBh7PU1LIIXKX5AEnKysL6enpmDNnDvLz89G3b1+kpaWhsLCw3tcVFBSguLjY+ujSpYv1//Ly8jBmzBgYjUYcO3YMRqMRo0ePxsGDB6VeHVIJJYQbnnTlwe3uGUoJOazikLt0Qggh5Rv07t0bPXr0wIoVK6zTunbtit///vfIyMiwm3/Pnj3o378/SktL0apVK4fLHDNmDMxmM3bu3GmdNnToULRu3Rrr169vsE1msxkGgwEmkwnBwcGur5TGHCuMkrsJHuXKAVGqYEPKxDE8rlPKmByOxwG6dyySuwmyc+X8LWkFp6KiAkeOHEFqaqrN9NTUVOTm1r+zJiQkICIiAgMHDsTu3btt/i8vL89umUOGDKlzmeXl5TCbzTYPIk+GG1YN1IGfEZHvkDTgXLp0CVVVVQgLC7OZHhYWhpKSEoeviYiIwDvvvIONGzdi06ZNiI2NxcCBA7Fv3z7rPCUlJS4tMyMjAwaDwfqIitJWxYJ+5Wz1xlPhhidMdWIgdR67qkitvHKZuE6ns3kuhLCbZhEbG4vY2F+/UMnJySgqKsLf/vY33H333W4tc/bs2ZgxY4b1udlsZsjRIDnCDalfzc+RXViOKeXycV46Tq6QtIITEhICPz8/u8rKhQsX7Cow9UlKSsKpU6esz8PDw11apl6vR3BwsM2DtMWb4Ya//LWLn23dWMkhtZE04AQEBCAxMRE5OTk203NycpCS4vxOmp+fj4iICOvz5ORku2Xu2rXLpWWSdngr3PDk5zv4WTumlJBD5AzJu6hmzJgBo9GInj17Ijk5Ge+88w4KCwsxbdo0ADe7j3766SesXr0aALBkyRJ06tQJt99+OyoqKrB27Vps3LgRGzdutC7zySefxN13341Fixbh3nvvxSeffILPPvsMX375pdSrQwrjzXBDvsfyubPrSlnYVUXOkDzgjBkzBpcvX8bChQtRXFyM+Ph47NixA9HR0QCA4uJim3viVFRUYNasWfjpp58QFBSE22+/Hdu3b8ewYcOs86SkpGDDhg3461//irlz56Jz587IyspC7969pV4dUqHGhBsGGwIYdGpSyngcooZIfh8cJeJ9cGyp9T44zlRvGG7I0xhyblJCyPG1Kg7vg6Og++AQSUXKcMPxF1Qf7h/KwQHHVB8GHFIdKQ9qPHGRs3w96HDAMSmdV+6DQ+Rt7hx8lXayavmD678/yjpXS9ASqs/V0wZ2W8mIA46pLgw4pCpSdE3JGWzcCTGNWR4DkDR8NeRwwDEpGQMOqYbaw42nw4yn2sDQ4xm+eqWVEkIOqzjkCAMOaYYSw40SQk1DGHo8y1erOXJjyKHalH/0JYLnBxZLGW5a/tDE+lArLayDnJQ2nktqHHBMSsSjF2mCKwdYqU4+Wg0EDDvu8bWQowS8bJxq4hGLFK+hg5ac4cbXTv6+tr6N5Ushh1UcUhoepUjV5Ao3PMkz7DjLl0KOErCKQxY8MpGieepg5elwQ7YYdOrnKyGHVRxSEh6RSLE81TXlqZMLT+INY1Wnbr4ScpSAVRwCGHBIpbz5S5EnbPdwu9nzhZDDKg4pBY8+pEhK6ZriCbrxGHRIDqziEI86pDre6priSdmzGHRu8oUqDpES8GhDiuOJX16NOYnwRCwtbl/thxyldFOxiuPbfPsoQ6rjzIGzseGGvIPbmoikxCMMKUp9v7ik/lXIE673+XI1R+tVHCK5+eaRhTTL3ZOGr55klcJXg46WQw67qUhuvndEIcVqbPWG4Ub9+FkQkafwaEI+jSdU5fG1ao6WqzhKwSqOb/KdowgpmhzVG186iaoRPx/1U0o3FfmmpnI3gKix1BRuWhdUeGxZpbEBHluWUrX8oQnKOlfL3QzJXT1tQIsYk9zNINIUBhySnbevnPJmuPFkoHFm2VoMPZbPyxeCDklnTWkKjK1z5W4GeREDDqmaq9Ubb4QbKUONq++tpcCj9WoOqzhEnsVObpKVnPe98bTWBRWyhhtHLG1SWrvcxXE56qO27zFpB48WpFpKqd6oJUCopZ0N0XLI4RVV0uLVVL6FXVQkG29Wb6Q4Kao1LNRst1q7sDguh4gaot2fQqRprvzSZbipm9qrOlqs5rCKQ+QZ2js6kOopuc9e7YGgLmpeLy2GHJIOu6l8B48MJIvGHGTkqt6oNQC4Qq1BhyFH2ZT8o4W0i0cFIieo8aTfGGpcXy2FHHZTETWedo4IpAkN/dKTo3qjxpO9J6ixmqOlkENEjcOjAXmdN/rAGW48R21BhyGHGsJxOL6BRwJSDE9WbzxBTSd1b+D28C52UxE1DgMOaY4nfsHzZO6YWqo5rOIQkVeOAsuXL0dMTAwCAwORmJiI/fv31znvpk2bMHjwYLRr1w7BwcFITk7Gp59+ajNPZmYmdDqd3eP69etSrwo1khpKw2o4gctNDduIIYfIt0l+BMjKykJ6ejrmzJmD/Px89O3bF2lpaSgsLHQ4/759+zB48GDs2LEDR44cQf/+/TFixAjk5+fbzBccHIzi4mKbR2BgoNSrQxLxVPdUY09qajhxK4UathVDDtVFDT+2qHEk/1MNr732GiZPnowpU6YAAJYsWYJPP/0UK1asQEZGht38S5YssXn+0ksv4ZNPPsG2bduQkJBgna7T6RAeHi5p28m3qOGErTSWbabkP/mg5r9Czr8wTuQ+SX/eVFRU4MiRI0hNTbWZnpqaitzcXKeWUV1djbKyMrRp08Zm+tWrVxEdHY0OHTpg+PDhdhWemsrLy2E2m20e5H38xaRdDIdEpDSSBpxLly6hqqoKYWFhNtPDwsJQUlLi1DJeffVV/PLLLxg9erR1WlxcHDIzM7F161asX78egYGB6NOnD06dOuVwGRkZGTAYDNZHVFSU+ytFHqeE7imeoBtPyduQXVVEvscr33qdTmfzXAhhN82R9evXY/78+cjKykJoaKh1elJSEh566CF0794dffv2xUcffYRbb70Vb775psPlzJ49GyaTyfooKipq3AqRpij5xKw2St6WDDlEvkXSb3xISAj8/PzsqjUXLlywq+rUlpWVhcmTJ+Ojjz7CoEGD6p23SZMmuOuuu+qs4Oj1egQHB9s8yLuk7p7iyUs5GHI8i/fDIXKPpN/2gIAAJCYmIicnx2Z6Tk4OUlLqPuGtX78ekyZNwocffojf/e53Db6PEAJHjx5FREREo9tMyiL1wV3JJ2M143YlNeC4QG2T/CqqGTNmwGg0omfPnkhOTsY777yDwsJCTJs2DcDN7qOffvoJq1evBnAz3EyYMAFLly5FUlKStfoTFBQEg+HmyW7BggVISkpCly5dYDab8cYbb+Do0aNYtmyZ1KtDHsa/MqxdrQsqFHl1lZqvqiIi50kecMaMGYPLly9j4cKFKC4uRnx8PHbs2IHo6GgAQHFxsc09cd5++23cuHEDjz/+OB5//HHr9IkTJyIzMxMAcOXKFTzyyCMoKSmBwWBAQkIC9u3bh169ekm9OqRA7nY7sMogPYYcIpKLTggh5G6Et5nNZhgMBphMJo7HAXCsUPqryuoqBddXwZH66ikGHO9RYshRU8DRwr1wUjsWyN0Eh4ytnbtliRJ078gLZFw5f6tvxB2pDvu5SYlhUo0DjonIeZJ3URHVRc7xN0o74Qad+Mlu2rX49jK0RDpK7a5SA97RmMh1DDikamr9Fe4o0Dgzj9pDj9JCDsfiEGkXAw75HLmqN86EGleWodaww5BDRN7AgEOKpLWbm3ki3NS3TLWFHaWFHCLSHnXW90k1fH2AcdCJnyQJN3K9jycpaRyUWrs61UKpV1CRtvFbTbLwhRv8yRE41BZ0lBRyyDf5+o8wLWPAIdVy51e3t06ococMud9fjVjFIdIWfqOJPEwp4UIt1RxWcZyjtXFpRFJjwCHJ+GLpV4mBQoltqk0pIYdVHCLt4LeZyAeopZpDROQpDDikOGotxashQCi5jaziaBOvoCK58JtM5GMYcoh+paY/tkmuYcAhr5PrEnEpT55KDg2OqK29RESuYsAh8lFKDTlKqOKwm4pI/fgtJvJhDDlEpFUMOESNpNSQ4Cy1t18qrOI0HgcYk5z4DSYiRYYcVnHsqfUKQyI5MOAQEQBlhhy5sYpDpF789hKRYrGKQ0TuYsAhSfjin2nQAiVWcRhyiMgdDDhEZEOJIUdO7KZyDwcYk9z4zSWfURobIHcTVENpIYdVHCJyFQMOERH5JP6ZBm1jwCEih1jF+RW7qYjUh99akgR/GWmD0kIOqQPH35ASMOAQERGR5jDgEDXStfj2cjdBUkqq4rCbioicxW8sERERaQ4DDilOixiTU/OVda52edm8VNw9rOKQs9Qy/objBLWPAYfIA7TeTUVEpDYMOOR1avmFR8olVxVHCeNw+BfFiZwj/7eViFRBSd1UREQNYcAhnyPVOBx2U5GvU0t1luNvfAMDDhE5TUlVHA42JqL6MOCQqrlzJZWUWMXRPiWMwyGihnnlm7p8+XLExMQgMDAQiYmJ2L9/f73z7927F4mJiQgMDMQtt9yClStX2s2zceNG3HbbbdDr9bjtttuwefNmqZpPMnD2UnF38XJxIiJtkzzgZGVlIT09HXPmzEF+fj769u2LtLQ0FBYWOpz/9OnTGDZsGPr27Yv8/Hw8++yzeOKJJ7Bx40brPHl5eRgzZgyMRiOOHTsGo9GI0aNH4+DBg1KvDlGDWMXxHnZTKQfH35DS6IQQQso36N27N3r06IEVK1ZYp3Xt2hW///3vkZGRYTf/008/ja1bt+LkyZPWadOmTcOxY8eQl5cHABgzZgzMZjN27txpnWfo0KFo3bo11q9f32CbzGYzDAYDTCYTgoODG7N6mnCsMEqS5a4pTanz/3YVxjb4emcvh3W3y0DKk6OSxqpIQUkhTo5qnNxdo1JXON3BgCO97h2L5G6C7Fw5f0tawamoqMCRI0eQmppqMz01NRW5uY53sry8PLv5hwwZgsOHD6OysrLeeepaZnl5Ocxms82DtMPdk42UJ0YlBQDyPI7DIVI+Sb+lly5dQlVVFcLCwmymh4WFoaSkxOFrSkpKHM5/48YNXLp0qd556lpmRkYGDAaD9REVJU3FgoiIiJTBKz9DdDqdzXMhhN20huavPd2VZc6ePRsmk8n6KCpimU9uSilns4qjfhyHIz+lfJ8boubuKXKdpAEnJCQEfn5+dpWVCxcu2FVgLMLDwx3O37RpU7Rt27beeepapl6vR3BwsM2DlM+VcQZyj4moC0MOEZE8JA04AQEBSExMRE5Ojs30nJwcpKQ4HoCanJxsN/+uXbvQs2dP+Pv71ztPXcskkhNDDhGR90neRTVjxgy89957eP/993Hy5Ek89dRTKCwsxLRp0wDc7D6aMGGCdf5p06bhxx9/xIwZM3Dy5Em8//77WLVqFWbNmmWd58knn8SuXbuwaNEifPfdd1i0aBE+++wzpKenS706pEG8J47rtH6VmDM40Fhd2D3le5pK/QZjxozB5cuXsXDhQhQXFyM+Ph47duxAdHQ0AKC4uNjmnjgxMTHYsWMHnnrqKSxbtgyRkZF444038Ic//ME6T0pKCjZs2IC//vWvmDt3Ljp37oysrCz07t1b6tUhBSvrXK3Yk861+PYMBRJqXVDBoEpENiS/D44S8T44tuS4Dw7g3L1wAOfvhwM07le1NwarainkKK3rzZfuh6Ok++BwgLH38D44CroPDvm2hg4oSjsweuMEqbRQ4C6trAf5Bi2EG3IdAw5pilKvpqqJ4YCISHoMOKR43izHe6ubgyGHiEhaDDikOWqo4gAMOZ4mxw3/lDqonX7F7infxW8nUS3eHKyqxpCjxjaTNJQ2jo6oJgYckpWzB0hXu6nUUsUBbgYGhgYiIs9iwCFyQI5LjhlyiDyL3VO+jQGHNKuxVRyGHHtKbx8RkQUDDqmGkm5uJiV2WRERNR4DDknKmRKxlAMV1VjFsVBayFFae0heSh9gzO4pYsAhaoDcIUcJwUIJbSAicgUDDqmKO91UnriiSu4/5Chn0GG4ISI1YsAhcpLcIQfwftBhuGkYb/anPOyeIoABhxTClf58uao4SuKNoMNwQ0Rq1lTuBhCpSWlsgCx/EqAuNUNI0ImfPL5MIkeUPsCYCGAFh7xAinKxnFUcJXRVOWKp6rhT3XH3dURKw+4psmAFhxQjtWMBdhXGSvoeZZ2rPTJmQmmVHEcYVojIl7GCQ+QmpVZyiHwVqzdUEwMOqZa7dzb25IBjhhwiImViwCFFcXXwIkMOERE5woBDXqH10jFDDvkKpV5BpfVjDLmOAYcUR41VHIAhh4hISRhwyKcx5GgHtz0R1cSAQ14jZQnZ3SoOwJBDpHbsniJHGHBIkZTaz+8shhwiInkx4JBmKKmKAzDkkPao/YcH+RYGHPIqV0rJ3j6YMuQQqQ+7p6guDDikKY2p4gAMOWrFbUxEtTHgkKK5U8VRasjhSZjIs1i9ofow4JDX+fJBiSGHiMg7GHBI8bRSxbFgyPEsubenlPsKEbmPAYc0S+khR+4TM5ErlHYFlS9Xgsk5DDgkC1cPTnIdXKX+dc6Q0zjcfkRUFwYc0rTGVnEA74QcnqjJWZ7Yp4l8AQMOqYa7VRw1hByA1QhXcXv5LnZPkTMkDTilpaUwGo0wGAwwGAwwGo24cuVKnfNXVlbi6aefRrdu3dC8eXNERkZiwoQJOHfunM18/fr1g06ns3mMHTtWylUhCXjzIKWmkMMTNxFR40kacMaNG4ejR48iOzsb2dnZOHr0KIxGY53z//e//8XXX3+NuXPn4uuvv8amTZvw/fffY+TIkXbzTp06FcXFxdbH22+/LeWqkELIPdDRW1fMMOTUj9uHiBrSVKoFnzx5EtnZ2Thw4AB69+4NAHj33XeRnJyMgoICxMbG2r3GYDAgJyfHZtqbb76JXr16obCwEB07drROb9asGcLDw6VqPnmJsXUu1pSmeOW9WsSYcPW0odHLKetcjZY/SN+7azmJty6okPy9yD2+com43D8samL3FDlLsqN0Xl4eDAaDNdwAQFJSEgwGA3Jznd9BTSYTdDodWrVqZTN93bp1CAkJwe23345Zs2ahrKyszmWUl5fDbDbbPEi9GnOw9dQATW+e2NhtZYvbgoicIVnAKSkpQWhoqN300NBQlJSUOLWM69ev45lnnsG4ceMQHBxsnT5+/HisX78ee/bswdy5c7Fx40bcd999dS4nIyPDOg7IYDAgKirK9RUiybjzi8zXQg7AoAMw3BCR81wOOPPnz7cb4Fv7cfjwYQCATqeze70QwuH02iorKzF27FhUV1dj+fLlNv83depUDBo0CPHx8Rg7diz+8Y9/4LPPPsPXX3/tcFmzZ8+GyWSyPoqKilxdbdIYtYYcwHdP8r663vQrdk+RK1wegzN9+vQGr1jq1KkTjh8/jvPnz9v938WLFxEWFlbv6ysrKzF69GicPn0aX3zxhU31xpEePXrA398fp06dQo8ePez+X6/XQ6/X17sMUp/UjgXYVWg/lsvbLCHHG+NyLHxtfA7DDRG5yuWAExISgpCQkAbnS05OhslkwldffYVevXoBAA4ePAiTyYSUlLoHlVrCzalTp7B79260bdu2wff65ptvUFlZiYiICOdXhBTF3cHGjQk5nhp0bOGtwcc11TzxazXsKDXcyFG9403+iJwn2dG4a9euGDp0KKZOnYoDBw7gwIEDmDp1KoYPH25zBVVcXBw2b94MALhx4wbuv/9+HD58GOvWrUNVVRVKSkpQUlKCioqbB+8ffvgBCxcuxOHDh3HmzBns2LEDDzzwABISEtCnTx+pVoc0ytMnDDmvqtHiGB2trY8aKeUKKnZPkask/bm5bt06dOvWDampqUhNTcUdd9yBNWvW2MxTUFAAk+nmSebs2bPYunUrzp49izvvvBMRERHWh+XKq4CAAHz++ecYMmQIYmNj8cQTTyA1NRWfffYZ/Pz8pFwdkpi7B7DGHoC1FHIAbQQdLawDEclLsvvgAECbNm2wdu3aeucRQlj/3alTJ5vnjkRFRWHv3r0eaR9pR2PH42ihu6o2tXZfqSHYyB1iiahh/FtUpChylqGlqOQo5URoqYgoOTwovX0kH3ZPkTsYcEgzPDFWQIpBnEoJORZKCztKagsRaQcDDilOY36tMeS4pmbY8WbIUFrIcoVcn6UcV1ApZYAxkTskHYND5C5v/o0qRzw9JgeQ5345rnIUODwxfkeNQYaUgd1T5C4GHNIcT90AUIqQAyhjALIrGE6ISI3Uc5QlnyN3VxUgXbeAUrusqH783IjUgwGHNEsNIYcnTHKGr97BmN1T1BgMOKRojT3AKT3kAKwKqIWvfU4cYExqx4BD5CSpQ46vnUCJiKTEgEOKp5QqDiB9VwFDjjLxc/E+dk9RYzHgkCr4WsjhCVU55P4sfHX8DVFjMeCQz1BTyAEYdEg+HH9DWsCAQ6rhiZK12kIOIH8FwZdx28uD3VPkCQw4pCpKDDms5miTErY3u6eI3MeAQz7J0yV4b1ZzlHDiJSJSOgYcUh2llq+9+WubQUdavrxt5R5/o9TvN6kPAw6pktK6qiy83aXAoON5Stme7J4iahwGHPJpUoUcBh114jYk0g4GHFItT5WypSrJy/ELnEHHfdxu7J4ibWHAIVVjyHGMQcc1SttW7J4iajwGHKL/p7WQAzDoOIPbh0ibGHBI9TxZ1pYy5Cgh6PBk/iulbg9frd6we4o8jQGHNEENIQdQxslLqSd2b/L19XdE7vE3RJ7GgEOaoaaQo6Sg40sne6WvrxL2CyKtYMAhqoPUv2iVdDLzhbCj5XVTO3ZPkRQYcEhTPH2gTO1Y4BPVnJq0FnbUsi5y7gfsniItYsAhzZHi16AvVXNqUmvYUWu7fRGrNyQVBhzSJLWGHKUGHcA2NCgxOCi5bQ1h9YbI8xhwSLPUGHIA5VZzaqsdeOQIFmoONUQkraZyN4BIbVI7FmBXYayk72EJOVdPGyR9H0+rL2i0/MH931NaDjBqCbRSYPcUSYkBhzTN2DoXa0pTPL5cb4QcQL1BxxEthxR3yR1u2D1FWsYuKtI8qX4levPkIPeJkDzP1z9TVm9Iagw45BOkDDneCjpKH4RM6sLqDWkdAw75DCl/MXq7msOgo278/Iikx4BDPkUrIQdg0FErJXxmcldv2D1F3sCAQz5H6pDDoEN14edE5D2SBpzS0lIYjUYYDAYYDAYYjUZcuXKl3tdMmjQJOp3O5pGUlGQzT3l5Of785z8jJCQEzZs3x8iRI3H27FkJ14S0RupfkHL8QmbQUTalfDas3pCvkDTgjBs3DkePHkV2djays7Nx9OhRGI3GBl83dOhQFBcXWx87duyw+f/09HRs3rwZGzZswJdffomrV69i+PDhqKqqkmpVSIO0GHIABh0l4udB5H2S3Qfn5MmTyM7OxoEDB9C7d28AwLvvvovk5GQUFBQgNrbue4jo9XqEh4c7/D+TyYRVq1ZhzZo1GDRoEABg7dq1iIqKwmeffYYhQ4Z4fmVIs6S6T46FJeR44545tWnpHjpqpqRww+oN+RLJKjh5eXkwGAzWcAMASUlJMBgMyM2tfyffs2cPQkNDceutt2Lq1Km4cOGC9f+OHDmCyspKpKamWqdFRkYiPj6+zuWWl5fDbDbbPIgsvHHQlfPEwoqOfLjdieQjWcApKSlBaGio3fTQ0FCUlJTU+bq0tDSsW7cOX3zxBV599VUcOnQIAwYMQHl5uXW5AQEBaN26tc3rwsLC6lxuRkaGdRyQwWBAVFRUI9aMtEjrIQdg0PE2pW1rufc/Vm/I21wOOPPnz7cbBFz7cfjwYQCATqeze70QwuF0izFjxuB3v/sd4uPjMWLECOzcuRPff/89tm/fXm+76lvu7NmzYTKZrI+ioiIX1ph8hbdCjtwnGkvQUdoJWEuUtm3l3ueI5ODyGJzp06dj7Nix9c7TqVMnHD9+HOfPn7f7v4sXLyIsLMzp94uIiEB0dDROnToFAAgPD0dFRQVKS0ttqjgXLlxASorjsRR6vR56vd7p9yTfJfWYHAtv/S2rhnCcjmcpLdgoBas3JAeXA05ISAhCQkIanC85ORkmkwlfffUVevXqBQA4ePAgTCZTnUHEkcuXL6OoqAgREREAgMTERPj7+yMnJwejR48GABQXF+PEiRNYvHixq6tDZMebIQeQZwBybQw6jafUcMPqDfkqycbgdO3aFUOHDsXUqVNx4MABHDhwAFOnTsXw4cNtrqCKi4vD5s2bAQBXr17FrFmzkJeXhzNnzmDPnj0YMWIEQkJCMGrUKACAwWDA5MmTMXPmTHz++efIz8/HQw89hG7dulmvqiJqLG/+4lTSCYjdV65T8vZSwr7F6g3JRbLLxAFg3bp1eOKJJ6xXPI0cORJvvfWWzTwFBQUwmW4eHPz8/PCvf/0Lq1evxpUrVxAREYH+/fsjKysLLVu2tL7m9ddfR9OmTTF69Ghcu3YNAwcORGZmJvz8/KRcHfIx3qrkAMqq5ljUPGmzsmNPqaGGiG7SCSGE3I3wNrPZDIPBAJPJhODgYLmbI7tjhbyqrD7eCjk1KSno1ObrYUctwYbVG+3p3pEXyLhy/ubfoiJqgBwHaSWcnOriq91YalpnJew/DDckN0m7qIi0wnKw9mY1R4ndVrXVPuFrsbqjllBjoYRwQ6QEDDhELvDmuBwLNQQdC60EHrWFGqVh9YaUgF1URC6S6+Ctxl/mNbuzlB4a1NLO+qhxHyGSCis4RG6Qo5IDqKua40hd4cHblR41h5i6KCXcsHpDSsGAQ+QmOcblWKg96NTmTOBwJQRpMcDUh+GGyB4DDlEjyVXNAbQXdOrja6HFWUoJN0RKwzE4RB4g9y9XJfwRT/I+JX3mcn8HiGpjwCHyECUc4Bl0fIeSPmcl7PtEtTHgEHmQsXWuIg72DDrapqTPVgn7O5EjDDhEElDKQZ9BR3v4eRI5hwGHSCJKCTkAg44WKPEzVNI+TlQbAw6RhJTSZWWhxJMkNUyJn5mS9msiRxhwiLxAaScDBh31UOLnpLT9mcgR3geHyEvkvDFgXWqePH3hXjpqosRgAzDckHqwgkPkZUo9QbCqoxxK/RyUuu8SOcIKDpEMlFjNsWBVRz5KDTZEasSAQyQjOf/MgzMYdrxDDcGG1RtSG3ZREclMaVda1YVdWNJQwzZVw/5JVBsrOEQKoeRuq5pY1Wk8NYQaC4YbUisGHCKFUXq3VU21T9QMPPVTU7ABGG5I3RhwiBRILdWc2ljdcUxtwQZguCH1Y8AhUjC1Bh2A1R01hhoLhhvSAgYcIhVQc9Cx8IXAo+ZQAzDYkLYw4BCpiJrG5zTEURhQW+hRe6CpieGGtIYBh0hltFDNqUtdgUEJwUdLYaY2hhvSIgYcIpXSctCpzZlw0dgQpOUAUx+GG9IqBhwilfOloFMfXw0o7mKwIa3jnYyJNEItd0Qm+XE/IV/AgEOkMQw6VB/uG+Qr2EVFpFHsuqKaGGzI17CCQ6RxrOgQP3/yRazgEPmImic5VnV8A4MN+TIGHCIfxO4rbWOwIWLAIfJprOpoC4MN0a84BoeIAHCsjtrxsyOyJWnAKS0thdFohMFggMFggNFoxJUrV+p9jU6nc/h45ZVXrPP069fP7v/Hjh0r5aoQ+QxL0OEJUx34WRE5JmkX1bhx43D27FlkZ2cDAB555BEYjUZs27atztcUFxfbPN+5cycmT56MP/zhDzbTp06dioULF1qfBwUFebDlRARwrI6SMdQQ1U+ygHPy5ElkZ2fjwIED6N27NwDg3XffRXJyMgoKChAb6/jvxoSHh9s8/+STT9C/f3/ccsstNtObNWtmNy8RSYNjdZSBoYbIeZJ1UeXl5cFgMFjDDQAkJSXBYDAgN9e5L+n58+exfft2TJ482e7/1q1bh5CQENx+++2YNWsWysrK6lxOeXk5zGazzYOI3MMuLO/j9iZynWQVnJKSEoSGhtpNDw0NRUlJiVPL+Pvf/46WLVvivvvus5k+fvx4xMTEIDw8HCdOnMDs2bNx7Ngx5OTkOFxORkYGFixY4PpKEFG9ap90Wd3xHAYaosZxOeDMnz+/wbBw6NAhADcHDNcmhHA43ZH3338f48ePR2BgoM30qVOnWv8dHx+PLl26oGfPnvj666/Ro0cPu+XMnj0bM2bMsD43m82Iiopyqg1E5Dx2ZTUegw2RZ7gccKZPn97gFUudOnXC8ePHcf78ebv/u3jxIsLCwhp8n/3796OgoABZWVkNztujRw/4+/vj1KlTDgOOXq+HXq9vcDlE5Dms7jiHgYZIGi4HnJCQEISEhDQ4X3JyMkwmE7766iv06tULAHDw4EGYTCakpDR8oFu1ahUSExPRvXv3Buf95ptvUFlZiYiIiIZXgIhkwcDzK4YaIulJNgana9euGDp0KKZOnYq3334bwM3LxIcPH25zBVVcXBwyMjIwatQo6zSz2YyPP/4Yr776qt1yf/jhB6xbtw7Dhg1DSEgIvv32W8ycORMJCQno06ePVKtDRB7m6CSv1dDDQEPkfZLeB2fdunV44oknkJqaCgAYOXIk3nrrLZt5CgoKYDKZbKZt2LABQgg8+OCDdssMCAjA559/jqVLl+Lq1auIiorC7373O8ybNw9+fn7SrQwRSa6+IKCG8MMgQ6QcOiGEkLsR3mY2m2EwGGAymRAcHCx3c2R3rJADrkkbvBGCGGJILt07FsndBNm5cv7mH9skIs1g+CAiC/6xTSIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcBhwiIiLSHAYcIiIi0hwGHCIiItIcSQPOiy++iJSUFDRr1gytWrVy6jVCCMyfPx+RkZEICgpCv3798M0339jMU15ejj//+c8ICQlB8+bNMXLkSJw9e1aCNSAiIiI1airlwisqKvDAAw8gOTkZq1atcuo1ixcvxmuvvYbMzEzceuuteOGFFzB48GAUFBSgZcuWAID09HRs27YNGzZsQNu2bTFz5kwMHz4cR44cgZ+fn5SrpEndOxbJ3QQiIiKP0gkhhNRvkpmZifT0dFy5cqXe+YQQiIyMRHp6Op5++mkAN6s1YWFhWLRoER599FGYTCa0a9cOa9aswZgxYwAA586dQ1RUFHbs2IEhQ4Y02B6z2QyDwQCTyYTg4OBGrx8RERFJz5Xzt6QVHFedPn0aJSUlSE1NtU7T6/W45557kJubi0cffRRHjhxBZWWlzTyRkZGIj49Hbm6uw4BTXl6O8vJy63OTyQTg5oYiIiIidbCct52pzSgq4JSUlAAAwsLCbKaHhYXhxx9/tM4TEBCA1q1b281jeX1tGRkZWLBggd30qKgoTzSbiIiIvKisrAwGg6HeeVwOOPPnz3cYFmo6dOgQevbs6eqirXQ6nc1zIYTdtNrqm2f27NmYMWOG9Xl1dTV+/vlntG3btsHlapHZbEZUVBSKiorYRecl3Obex20uD2537/OlbS6EQFlZGSIjIxuc1+WAM336dIwdO7beeTp16uTqYgEA4eHhAG5WaSIiIqzTL1y4YK3qhIeHo6KiAqWlpTZVnAsXLiAlJcXhcvV6PfR6vc00Z6/q0rLg4GDNfxmUhtvc+7jN5cHt7n2+ss0bqtxYuBxwQkJCEBIS4nKDnBETE4Pw8HDk5OQgISEBwM0rsfbu3YtFixYBABITE+Hv74+cnByMHj0aAFBcXIwTJ05g8eLFkrSLiIiI1EXSMTiFhYX4+eefUVhYiKqqKhw9ehQA8Jvf/AYtWrQAAMTFxSEjIwOjRo2CTqdDeno6XnrpJXTp0gVdunTBSy+9hGbNmmHcuHEAbia3yZMnY+bMmWjbti3atGmDWbNmoVu3bhg0aJCUq0NEREQqIWnAee655/D3v//d+txSldm9ezf69esHACgoKLBe1QQAf/nLX3Dt2jU89thjKC0tRe/evbFr1y7rPXAA4PXXX0fTpk0xevRoXLt2DQMHDkRmZibvgeMkvV6PefPm2XXbkXS4zb2P21we3O7ex23umFfug0NERETkTfxbVERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4PuDFF19ESkoKmjVr5vQdnIUQmD9/PiIjIxEUFIR+/frhm2++kbahGlNaWgqj0QiDwQCDwQCj0YgrV67U+5pJkyZBp9PZPJKSkrzTYBVavnw5YmJiEBgYiMTEROzfv7/e+ffu3YvExEQEBgbilltuwcqVK73UUu1wZZvv2bPHbn/W6XT47rvvvNhiddu3bx9GjBiByMhI6HQ6bNmypcHXcD+/iQHHB1RUVOCBBx7An/70J6dfs3jxYrz22mt46623cOjQIYSHh2Pw4MEoKyuTsKXaMm7cOBw9ehTZ2dnIzs7G0aNHYTQaG3zd0KFDUVxcbH3s2LHDC61Vn6ysLKSnp2POnDnIz89H3759kZaWhsLCQofznz59GsOGDUPfvn2Rn5+PZ599Fk888QQ2btzo5Zarl6vb3KKgoMBmn+7SpYuXWqx+v/zyC7p374633nrLqfm5n9cgyGd88MEHwmAwNDhfdXW1CA8PFy+//LJ12vXr14XBYBArV66UsIXa8e233woA4sCBA9ZpeXl5AoD47rvv6nzdxIkTxb333uuFFqpfr169xLRp02ymxcXFiWeeecbh/H/5y19EXFyczbRHH31UJCUlSdZGrXF1m+/evVsAEKWlpV5onfYBEJs3b653Hu7nv2IFh+ycPn0aJSUlSE1NtU7T6/W45557kJubK2PL1CMvLw8GgwG9e/e2TktKSoLBYGhwG+7ZswehoaG49dZbMXXqVFy4cEHq5qpORUUFjhw5YrOPAkBqamqd2zcvL89u/iFDhuDw4cOorKyUrK1a4c42t0hISEBERAQGDhyI3bt3S9lMn8f9/FcMOGSnpKQEAKx/wd0iLCzM+n9Uv5KSEoSGhtpNDw0NrXcbpqWlYd26dfjiiy/w6quv4tChQxgwYADKy8ulbK7qXLp0CVVVVS7toyUlJQ7nv3HjBi5duiRZW7XCnW0eERGBd955Bxs3bsSmTZsQGxuLgQMHYt++fd5osk/ifv4rSf8WFUln/vz5WLBgQb3zHDp0CD179nT7PXQ6nc1zIYTdNF/j7HYH7Lcf0PA2HDNmjPXf8fHx6NmzJ6Kjo7F9+3bcd999brZau1zdRx3N72g61c2VbR4bG4vY2Fjr8+TkZBQVFeFvf/sb7r77bknb6cu4n9/EgKNS06dPx9ixY+udp1OnTm4tOzw8HMDNXwIRERHW6RcuXLD7ZeBrnN3ux48fx/nz5+3+7+LFiy5tw4iICERHR+PUqVMut1XLQkJC4OfnZ1c5qG8fDQ8Pdzh/06ZN0bZtW8naqhXubHNHkpKSsHbtWk83j/4f9/NfMeCoVEhICEJCQiRZdkxMDMLDw5GTk2P9C/AVFRXYu3cvFi1aJMl7qoWz2z05ORkmkwlfffUVevXqBQA4ePAgTCYTUlJSnH6/y5cvo6ioyCZoEhAQEIDExETk5ORg1KhR1uk5OTm49957Hb4mOTkZ27Zts5m2a9cu9OzZE/7+/pK2Vwvc2eaO5Ofnc3+WEPfzGuQc4Uze8eOPP4r8/HyxYMEC0aJFC5Gfny/y8/NFWVmZdZ7Y2FixadMm6/OXX35ZGAwGsWnTJvGvf/1LPPjggyIiIkKYzWY5VkGVhg4dKu644w6Rl5cn8vLyRLdu3cTw4cNt5qm53cvKysTMmTNFbm6uOH36tNi9e7dITk4W7du353Z3YMOGDcLf31+sWrVKfPvttyI9PV00b95cnDlzRgghxDPPPCOMRqN1/v/85z+iWbNm4qmnnhLffvutWLVqlfD39xf/+Mc/5FoF1XF1m7/++uti8+bN4vvvvxcnTpwQzzzzjAAgNm7cKNcqqE5ZWZn1mA1AvPbaayI/P1/8+OOPQgju5/VhwPEBEydOFADsHrt377bOA0B88MEH1ufV1dVi3rx5Ijw8XOj1enH33XeLf/3rX95vvIpdvnxZjB8/XrRs2VK0bNlSjB8/3u5y2Zrb/b///a9ITU0V7dq1E/7+/qJjx45i4sSJorCw0PuNV4lly5aJ6OhoERAQIHr06CH27t1r/b+JEyeKe+65x2b+PXv2iISEBBEQECA6deokVqxY4eUWq58r23zRokWic+fOIjAwULRu3Vr89re/Fdu3b5eh1epludS+9mPixIlCCO7n9dEJ8f+jj4iIiIg0gpeJExERkeYw4BAREZHmMOAQERGR5jDgEBERkeYw4BAREZHmMOAQERGR5jDgEBERkeYw4BAREZHmMOAQERGR5jDgEBERkeYw4BAREZHm/B9gzZRisoD0BgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an isotropic elliptic PDE\")\n", "plt.contourf(X0,X1,solution);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to check that the computed solution is correct, we consider a first order symbolic perturbation." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.873856Z", "iopub.status.busy": "2024-04-30T09:01:29.873752Z", "iopub.status.idle": "2024-04-30T09:01:29.875590Z", "shell.execute_reply": "2024-04-30T09:01:29.875315Z" } }, "outputs": [], "source": [ "v = solution + ad.Sparse.identity(X0.shape)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.876939Z", "iopub.status.busy": "2024-04-30T09:01:29.876833Z", "iopub.status.idle": "2024-04-30T09:01:29.885776Z", "shell.execute_reply": "2024-04-30T09:01:29.885477Z" } }, "outputs": [], "source": [ "energy = Scheme_Iso(v,diff,α,f,bc,gridScale)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We next evaluate the gradient of the energy w.r.t. a perturbation of the solution. As expected, this quantity vanishes over the domain." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.887294Z", "iopub.status.busy": "2024-04-30T09:01:29.887208Z", "iopub.status.idle": "2024-04-30T09:01:29.889115Z", "shell.execute_reply": "2024-04-30T09:01:29.888867Z" } }, "outputs": [], "source": [ "gradient = energy.to_dense(u.size).coef.reshape(X0.shape)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.890417Z", "iopub.status.busy": "2024-04-30T09:01:29.890341Z", "iopub.status.idle": "2024-04-30T09:01:29.892428Z", "shell.execute_reply": "2024-04-30T09:01:29.892181Z" } }, "outputs": [ { "data": { "text/plain": [ "nan" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LInfNorm(gradient)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Naive anisotropic scheme\n", "\n", "In this section, we present a naive numerical scheme for the addressed PDE. This scheme can be used for testing that a solution is correct, or for constructing synthetic solutions. However it is not recommended to use it to solve PDEs, in particular anisotropic ones, since fundamental properties such as the discrete maximum principle are lacking.\n", "\n", "The idea underlying this scheme is to estimate the PDE residue\n", "$$\n", " {-} \\mathrm{div} (D \\nabla u) + \\alpha u - f\n", "$$\n", "using centered finite differences for the gradient and divergence, and a standard matrix vector multiplication for $D \\nabla u$. A similar residue accounts for the boundary conditions." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.893771Z", "iopub.status.busy": "2024-04-30T09:01:29.893695Z", "iopub.status.idle": "2024-04-30T09:01:29.896292Z", "shell.execute_reply": "2024-04-30T09:01:29.896072Z" } }, "outputs": [], "source": [ "def Scheme_Naive(u,Diff,α,f,bc,h):\n", " \"\"\"Residue for an anisotropic elliptic equation, \n", " with Dirichlet boundary conditions. (Naive implementation)\"\"\"\n", " \n", " # Residue of the PDE in the interior\n", " offsets = np.stack( ((1,0), (0,1)), axis=-1)\n", " du = fd.DiffCentered(u, offsets, h, padding=0)\n", " v = lp.dot_AV(Diff,du)\n", " div_v = fd.DiffCentered(v[0],(1,0),h) + fd.DiffCentered(v[1],(0,1),h)\n", " residue = - div_v + α*u - f\n", " \n", " # Apply boundary conditions\n", " return np.where(np.isnan(bc),residue,u-bc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the same PDE parameters as before, except for the diffusion tensors which are now provided in matrix form." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.897645Z", "iopub.status.busy": "2024-04-30T09:01:29.897565Z", "iopub.status.idle": "2024-04-30T09:01:29.899273Z", "shell.execute_reply": "2024-04-30T09:01:29.898992Z" } }, "outputs": [], "source": [ "Diff_Iso = diff*fd.as_field(np.eye(2),X0.shape)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.900551Z", "iopub.status.busy": "2024-04-30T09:01:29.900472Z", "iopub.status.idle": "2024-04-30T09:01:29.903462Z", "shell.execute_reply": "2024-04-30T09:01:29.903236Z" } }, "outputs": [], "source": [ "residue = Scheme_Naive(solution,Diff_Iso,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:29.904823Z", "iopub.status.busy": "2024-04-30T09:01:29.904740Z", "iopub.status.idle": "2024-04-30T09:01:30.006044Z", "shell.execute_reply": "2024-04-30T09:01:30.005767Z" } }, "outputs": [ { "data": { "image/png": "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HdeuXcP777+Pzz77DAMGDEBkZCQAYMqUKbj33nutLqNx48YAgJo1a2LatGmYNm0azpw5I9d+9O3bF4cOHbL6WqkAKSwsRL169eTpV69etbighoaGAqhogCZdPADLAkTa5s8++wyJiYnOHQgTUVFROHnypN156tSpg4KCAovpp0+fVmyDpxQWFtqcJh1D0+NjypWCLzIyEnXq1MH69eut/l36lunK+2bLnXfeiRdeeAE7d+7EyZMn0b17d4SFhaFNmzbIycnB6dOnccstt6B+/fpOb7/WREZGonr16li4cKHNv3vC4sWL0aBBAyxfvlzRuNb8s2DLQw89hFdeeQWffPIJBg0ahDVr1mDcuHGKmqLIyEjceuutePHFF60uQwrdtnTq1AmdOnXCtWvXsHv3brz11lsYN24coqOjMXjwYERFReG7777D9evXnQof9tSuXRtVq1ZFZmYmHn/8cavzNGjQoFLrkERGRkKn02Hbtm2KcklibRppF4OHD7z88stYsWIFXnjhBdx7771o3LgxGjVqhB9++AEzZsxwejnR0dEYPnw4fvjhB8yZMwd//vknatSoYTFfly5dAABLlixBamqqPP2///2vRUv5pKQkAMCPP/6INm3ayNO/+OILxXw9evRAtWrVcPToUdx3331Ob7OkV69e+Pjjj3H48GE5VJm78847MXPmTOzduxetWrWSp3/00UfQ6XRIT093eb32/PLLL/jhhx8Ut1uWLl2KsLAwef2mx8d0u9esWWOxPPNvzJI+ffrgk08+wbVr19CuXTub2+PK+2ZLt27d8Oyzz+L5559HfHw8kpOT5elr1qxBYWGhU++frX2pLE/UjPTp0wczZsxAnTp1PHahs0an00Gv1ytCR2FhodVeLdY0adIE7dq1w6JFi3Dt2jWUlpZadKfv06cP1q1bh4YNG6J27dpub2vVqlXRrl07JCcnY8mSJdi7dy8GDx6MXr16YdmyZcjOznbqdos9NWrUQHp6Ovbt24dbb71VrqVQQ58+ffDSSy/h1KlTGDhwoGrrIe9g8PCB2rVrY8qUKXj66aexdOlSPPDAA3jvvffQq1cv9OjRA8OHD0e9evXw+++/4+DBg9i7dy8+/fRTAEC7du3Qp08f3HrrrahduzYOHjyIjz/+GGlpaVZDB1BR4D3wwAOYM2cOQkJC0K1bN/z888949dVXER4erpj3rrvuQkREBEaOHInp06ejWrVqyM7ORn5+vmK+pKQkTJ8+Hc899xz+97//yW1Xzpw5g507d8o1M7ZMnz4dX331Fe644w48++yzaN68OS5duoT169djwoQJSE5Oxvjx4/HRRx+hd+/emD59OhITE7F27VrMnTsXjz32GG655ZZKvhNKcXFx6NevH7KyshAbG4vFixcjJycHs2bNko9tmzZt0LhxY0yaNAlXr15F7dq1sWrVKnz33XcWy2vevDlWrlyJd999F6mpqahSpQpat26NwYMHY8mSJbjrrrvw1FNPoW3btggJCcHJkyexefNm3H333ejfv79L75stqampqF27NjZs2KC4yHXr1g3//ve/5f87YmtfKksamXT+/PkICwtDaGgoGjRo4NItwHHjxmHFihW44447MH78eNx66624fv068vLysGHDBkycONFuwHNWnz59sHLlSowZMwYDBgxAfn4+/v3vfyM2NtbpkYhHjBiB0aNH4/Tp0+jQoYNF6J4+fTpycnLQoUMHPPnkk2jcuDGuXLmC48ePY926dZg3b57NW5Tz5s3Dpk2b0Lt3byQkJODKlStyLZD0Hv/jH//AokWL8Oijj+Lw4cNIT0/H9evX8f3336NJkyYYPHiwS8fkjTfewO23345OnTrhscceQ1JSEkpKSvDbb7/hiy++sGiH5a6OHTvikUcewUMPPYTdu3fjjjvuQM2aNVFQUIDvvvsOzZs3x2OPPeaRdZEX+Lhxa0Cz1Z1WCCH++usvkZCQIBo1aiT3Bvjhhx/EwIEDRd26dUVISIiIiYkRXbt2FfPmzZNfN3nyZNG6dWtRu3ZtYTAYxM033yzGjx8vd8cTwnrPlNLSUjFx4kRRt25dERoaKtq3by9yc3MtWt8LUdEjoUOHDqJmzZqiXr16YurUqeL999+32ptj9erVIj09XYSHhwuDwSASExPFgAEDxMaNGx0en/z8fDFixAgRExMjQkJCRFxcnBg4cKA4c+aMPM+JEyfEkCFDRJ06dURISIho3LixeOWVVxS9V6SeFabdXoW40ZL+008/VUy39r4kJiaK3r17i88++0w0a9ZM6PV6kZSUJGbPnm2x3b/++qvIyMgQ4eHhIioqSjzxxBNi7dq1Fr0zfv/9dzFgwABx0003CZ1Op3hPysvLxauvvipatGghQkNDRa1atURycrIYPXq0OHLkiDyfK++bLf379xcAxJIlS+RpZWVlombNmqJKlSpyV0vz42P6XtvaF1vHXoiKnhFTp051uH1z5swRDRo0EFWrVlV0H+/cubNo1qyZxfzDhg2z6GFz+fJl8a9//Us0btxY6PV6uYvn+PHjHXa1dGU9L730kkhKShIGg0E0adJELFiwwOr5Zuv9KSoqEtWrV7fbs+TcuXPiySefFA0aNBAhISEiIiJCpKamiueee05cvnzZ5n7k5uaK/v37i8TERGEwGESdOnVE586dxZo1axTz/fXXX+KFF14QjRo1Enq9XtSpU0d07dpVbN++XZ4HgHj88cct1mFtv44dOyZGjBgh6tWrJ0JCQkRUVJTo0KGD+M9//iPP48q5KMSNMuzcuXOK6QsXLhTt2rUTNWvWFNWrVxcNGzYUDz74oNi9e7fN40LaoxNCCO9GHSLtSUpKQkpKitUBkoiIyHPYq4WIiIi8hsGDiIiIvIa3WoiIiMhrWONBREQUxLZu3Yq+ffsiLi4OOp0Oq1evtjnv6NGjodPpMGfOHLfXx+BBREQUxP744w+0aNECb7/9tt35Vq9eje+//97hQHaOcBwPIiKiINarVy/5eUC2nDp1CmPHjsXXX39t8WwdVwVl8Lh+/TpOnz6NsLAwxSiERERE5oQQKCkpcfo5N+66cuUKysrKKr0cIYTFtc1gMLg9tPz169eRmZmJf/7zn/JzgyojKIPH6dOn/frZFERE5H35+fkOH27pritXriAhoSbOnbte6WXVqlVLfrKvZOrUqcjKynJrebNmzUK1atXw5JNPVnrbgCANHtJDuPLz850eepqIiIJTcXEx6tevL1871FBWVoZz565jy/d1UauW+zXxly8LdGl31uL65m5tx549e/DGG29g7969HrtDEJTBQzp44eHhDB5EROQUb9yar1VLh1phlbmdU1Fj4qnr27Zt23D27FkkJCTI065du4aJEydizpw5OH78uMvLDMrg4Sm9Yq0/CpqIiLTjq4J3fL0JfiszM9PiQZI9evRAZmamxdOVncXgQUREFMQuX76M3377Tf792LFj2L9/PyIiIpCQkGDxtOiQkBDExMRYPF3ZWQweREREQWz37t1IT0+Xf58wYQIAYNiwYcjOzvb4+hg8iIiIgliXLl3gytNT3GnXYYojlxIREZHXMHgQERGR1zB4EBERkdcweBAR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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Residue computed with the naive scheme\")\n", "plt.contourf(X0,X1,residue); plt.colorbar();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The residue is small in the interior, where the solution is smooth. \n", "It is larger, however, on the neighborhood of the boundary, due to lack of smoothness of the solution.\n", "By construction, the residue vanishes exactly on the part of the domain where the Dirichlet boundary conditions are enforced." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.007551Z", "iopub.status.busy": "2024-04-30T09:01:30.007446Z", "iopub.status.idle": "2024-04-30T09:01:30.009599Z", "shell.execute_reply": "2024-04-30T09:01:30.009353Z" } }, "outputs": [ { "data": { "text/plain": [ "0.0026004302926599943" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LInfNorm(residue[X0**2+X1**2<0.7**2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can try to solve the naive discretization as well. However the naive scheme here implemented is unstable, and high frequency oscillations are clearly visible in the resulting numerical solution." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.011019Z", "iopub.status.busy": "2024-04-30T09:01:30.010914Z", "iopub.status.idle": "2024-04-30T09:01:30.018619Z", "shell.execute_reply": "2024-04-30T09:01:30.018327Z" } }, "outputs": [], "source": [ "u = ad.Sparse.identity(X0.shape)\n", "residue = Scheme_Naive(u,Diff_Iso,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.020138Z", "iopub.status.busy": "2024-04-30T09:01:30.020049Z", "iopub.status.idle": "2024-04-30T09:01:30.033252Z", "shell.execute_reply": "2024-04-30T09:01:30.032980Z" } }, "outputs": [], "source": [ "solution_naive = residue.solve()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.034840Z", "iopub.status.busy": "2024-04-30T09:01:30.034756Z", "iopub.status.idle": "2024-04-30T09:01:30.119200Z", "shell.execute_reply": "2024-04-30T09:01:30.118942Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGxCAYAAACOSdkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABW5klEQVR4nO3deVxU5cIH8N+IMODCuCCbIqCvguWSYrKYqZm4pJndUrNQSy1v2c3UtzKvudSNtLJsse1qlrlQ16VMJCk17YKGhnY1t9vVwAQXwgG7CgjP+4fvTAwzAzMwZ872+34+8/kwh2fOPGeZc37zPM85YxBCCBARERHpUCO5K0BEREQkFwYhIiIi0i0GISIiItItBiEiIiLSLQYhIiIi0i0GISIiItItBiEiIiLSLQYhIiIi0i0GISIiItItzQahffv2YfTo0Wjfvj2MRiNCQkKQmJiIWbNm1Wt+kyZNQlRUVL1em5WVhQULFuDSpUt2/xswYAAGDBhQr/k2xNmzZ7FgwQIcPHjQ6+/tCadPn4bBYMCqVaskmX96ejoWLFggybzd0ZD9rr527doFg8GAXbt2WactWLAABoPBplxD9l1vfSYmTZoEg8FgfRiNRsTExGD+/Pm4evWqtZxl+SyPJk2aoF27dhgyZAjefPNNlJaW1jnvmo+GGDRoEKZNm2Z9btkmBoMB2dnZDuvSrFmzer2Xo22rZWvXrsXrr7/eoHlERUVhxIgRdZaT+jhVX5Z6vfLKK3JXxWPmzZuHXr16oaqqyu3XNpagPrLbunUr7rzzTgwYMABLlixBWFgYCgoKsH//fqxfvx6vvvqqV+uTlZWFhQsXYtKkSWjRooXN/5YvX+7VulicPXsWCxcuRFRUFG666SZZ6tAQYWFhyM7ORseOHSWZf3p6Ot5++23Zw9C8efPwxBNPyFoHZxqy73rzMxEQEIAdO3YAAIqLi7Fu3TosWrQIx44dQ1pamk3ZjIwMmEwmlJeX4+zZs/jmm2/w1FNP4eWXX8aWLVvQo0cPp/P2lM8//xz//Oc/8fHHHzv8/1NPPYU9e/Z47P2mTJmCoUOHemx+Srd27VocPnwYM2bMkLsq5EGzZ8/GW2+9hY8++ggPPvigW6/VZBBasmQJoqOj8dVXX6Fx4z8Wcdy4cViyZImMNbN3ww03yF0FVTIajUhISJC7GgAAIQSuXr2KgIAAj89bqqDnCVLtu56eb6NGjWz2lWHDhuH06dP49NNPsXTpUrRt29b6v7i4OAQFBVmfjxs3DtOnT0f//v1x55134sSJEzAajU7n7QkvvvgiRo8ebVMvi6FDhyIjIwNbtmzByJEjPfJ+7dq1Q7t27TwyLyK5mEwmPPDAA3jppZesrbWu0mTXWFFREYKCgmxCkEWjRraLXFVVhSVLliA2NhZGoxHBwcGYMGECzpw5U+t71NbkaTAYrC0JCxYswP/+7/8CAKKjo63N25ZuB0fdAL/99hseffRRtG3bFn5+fujQoQPmzp2LsrIyu/eZPn06Vq9ejS5duqBJkybo0aMHvvzyy1rrvmvXLtx8880AgAcffNBap+qtH1988QUSExPRpEkTNG/eHIMHD3bYJF/T1atXMWvWLNx0000wmUxo1aoVEhMT8fnnnztcT/WpP+B4/V+4cAEPP/wwIiIiYDQa0aZNG/Tt2xdff/21zWtXrlyJHj16wN/fH61atcLo0aNx9OhR6/8nTZqEt99+21pHy+P06dM29X733XfRpUsXGI1GfPTRRwCA7777DoMGDULz5s3RpEkTJCUlYevWrTbvv2rVKhgMBmRmZuLBBx9Eq1at0LRpU4wcORL/+c9/bMo66hqrqqrCm2++iZtuugkBAQFo0aIFEhIS8MUXX9S53vbv348777wTrVq1gr+/P3r27IlPP/20ztc5UnPftWyTJUuW4G9/+xvat28Pf39/9O7dG9988421XH0+E2VlZVi0aBG6dOkCf39/tG7dGgMHDkRWVla96m4JL7/88kudZXv06IG5c+ciLy/PrgXJ03Jzc/H9998jJSXF4f8nTZqEG264AXPmzEFlZWWt80pLS0NycjLCwsIQEBCALl264JlnnsHvv/9uU65m19hdd92FyMhIh10M8fHx6NWrl/W5EALLly+37ostW7bEPffcY7cfO1sWR92+jrrqXD1W1HUMGDBgALZu3YpffvnFYTfmwoULER8fj1atWiEwMBC9evXCihUr4Oy3yTdt2oTu3bvD398fHTp0wBtvvFHncgPAyZMnMX78eAQHB8NoNKJLly7WY05dPvvsM8THx8NkMqFJkybo0KEDHnroIZsyly5dwqxZs9ChQwfreW348OE4duyY3fyWLl2K6OhoNGvWDImJidi7d69dGVeOG5bj2o4dOzB16lS0bt0a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4OBgFBYWujSPjz76CM2bN8fdd99tM/3+++9HdHQ0QkNDcfjwYcyZMweHDh1CZmamw/mkpqZi4cKF7i8EEdlgt5m8GICIPM/tILRgwYI6Q0VOTg6A6wOfaxJCOJzuyMqVK3H//ffD39/fZvrUqVOtf3ft2hWdOnVC79698cMPP6BXr15285kzZw5mzpxpfV5SUoKIiAiX6kBEjjEUeQfDD5G03A5C06dPr/MKraioKPz44484d+6c3f8uXLiAkJCQOt9nz549OH78ONLS0uos26tXL/j6+uLkyZMOg5DRaITRaKxzPkRUPzVP1gxGDcPwQ+Q9bgehoKAgBAUF1VkuMTERZrMZ33//Pfr06QMA2LdvH8xmM5KS6j5IrlixAnFxcejRo0edZY8cOYKKigqEhYXVvQBEJDlHJ3KGo9ox/BDJQ7IxQl26dMHQoUMxdepUvPfeewCuXz4/YsQImyvGYmNjkZqaitGjR1unlZSU4LPPPsOrr75qN9+ff/4Za9aswfDhwxEUFISffvoJs2bNQs+ePdG3b1+pFoeIGojhyBaDD5EySHofoTVr1uAvf/kLkpOTAQB33nkn3nrrLZsyx48fh9lstpm2fv16CCFw33332c3Tz88P33zzDZYtW4bLly8jIiICd9xxB+bPnw8fHx/pFoaIPE5P4YjBh0iZDEIIIXclvK2kpAQmkwlmsxmBgYFyV8frDuVxoDipg5pDEYMPSa1H+3y5q+B1Upy/+VtjRKRYahqEzeBDpE4MQkSkGs7ChjcDEgMPkbYwCBGR6jGcEFF9Sfrr80RERERKxiBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREusUgRERERLrFIERERES6xSBEREREuiVpEPrb3/6GpKQkNGnSBC1atHDpNUIILFiwAOHh4QgICMCAAQNw5MgRmzJlZWV4/PHHERQUhKZNm+LOO+/EmTNnJFgCIiIi0jJJg1B5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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an isotropic elliptic PDE. (Naive unstable scheme.)\")\n", "plt.contourf(X0,X1,solution_naive);" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.120681Z", "iopub.status.busy": "2024-04-30T09:01:30.120598Z", "iopub.status.idle": "2024-04-30T09:01:30.180050Z", "shell.execute_reply": "2024-04-30T09:01:30.179810Z" } }, "outputs": [ { "data": { "image/png": "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Zb1+/fqpatWqeu2110rtMycmgHz11VcmKirK/PnPfzanTp1y+t3JkydN8+bNTUxMjJk8ebJZtmyZefTRR02VKlVMnz59HOvl5eWZnj17mipVqphHH33ULFu2zEyePNnExMSYVq1aOW03JSXF1K1b1zRt2tTMnTvXLFmyxLRr186EhYWZxx57zFx66aVmwYIF5oMPPjAXXXSRSUhIMH/88UeJ+/D999+batWqmYYNG5rZs2ebjz/+2AwaNMhIMk8//bRjvZUrVxpJpn79+ubmm282H3/8sZk7d66pV6+e+dOf/mRyc3OLfY1du3aZe+65x0gyCxYsMOvWrTPr1q0z2dnZTvvVpEkTM3v2bPPJJ5+YG2+80Ugyq1evdmxn3759Jjk52aSkpJhXXnnFfPrpp+bxxx83ERERZtiwYaX+e40YMcJIMnfffbfJyMgw06dPN3FxcSY5OdkcPHjQGGPM8ePHTa1atUybNm3Me++9Z1avXm3mzZtnRo4cab777jvHttLT043NZjO33Xab+fDDD83SpUvNP/7xDzN16lTHOp07dzadO3d2aoMkM27cOJd+XblypWPZ/PnzzWOPPWY++OADs3r1avPuu++azp07m7i4OEc7Dxw4YJ588kkjybz00kuOPj1w4IAxxpihQ4ealJQUxzbLc5yV9u9xxx13mOjoaDNlyhSzcuVKs3jxYvPUU0+ZF198sdR/i6I0aNDA3HTTTS7Lhw4damJiYhw/b9++3URGRpru3bubhQsXmlWrVpk5c+aY9PR0c/jwYWOM+++/devWmaioKNOnTx9HH3777bfGGGNmzpxpJJmkpCQzYsQIs3TpUvPvf//b5ObmunUsGXPuGKhVq5ZJTEw0L7zwgvnkk0/MvffeaySZu+66y2k/Cx8bu3fvNnXq1DGxsbFmypQp5tNPPzXz5s0zw4cPN1u3bi2xL1NSUsxVV13ltOz06dMmPj7eJCYmOrXv4osvLnY706dPN5LMW2+95bTtPn36mDNnzrg88vLySmxXSe1155j7/vvvzZ133mneffdds2rVKrN48WJz6623mkqVKjm9h4xx7c9WrVqZSy+91OW1b7rpJhMfH2/OnDljjDHm22+/NXa73TRr1szMnj3bLFu2zDz44IOmUqVKZvz48SXux/bt240kM3PmTJffFW7PuHHjjCSTlpZmHnvsMbN8+XIzZcoUExERYW655RbHemvXrjU2m80MHDjQLFmyxKxYscLMnDnTpKenG2OMyc7Odhyrf//73x3H8a5du4wx7p1PjPnf8Z6cnGyGDx9uli5dal599VUTHx9vkpOTHe8tY1zPL8YYc/vtt5uwsDDz4IMPmoyMDPPOO++YRo0amYSEBJOVlVViv/Xs2dPExcWZV1991axatcosXLjQPPbYY+bdd991rPP6668bm81munTpYt555x3z6aefmmnTpplRo0Y5tSs8PNw0btzYTJ482Xz66afmscceMzabzUyYMMGx3tmzZ02vXr1MTEyMmTBhglm+fLl5/fXXTVJSkmnSpInT52ZFP3dXrFhhwsPDTadOncy8efNMRkaGGTZsWLHHSe/evc0ll1xSYn8VFjDB6ODBgyYlJcXExcWZnTt3uvy+4ITy3nvvOS1/+umnjSSzbNkyY4wxGRkZRpJ55plnnNabN2+ekWReffVVx7KUlBQTFRVldu/e7ViWmZlpJJk6deqYEydOOJYvXLjQSDKLFi0qcT8GDhxoIiIiXPahd+/eJjo62hw5csQY878P8PM/VIwx5r333jOSzLp160p8nWeffdZIMtu3b3f5XUpKiomMjDS//vqrY9nJkydNzZo1zR133OFYdscdd5iqVas6rWeMMZMnTzaSHB9oRdm6dauR5PQmMsaYzz//3EgyjzzyiDHGmI0bNxpJZuHChcVu6z//+Y+RZMaOHVviPpc3GBWWm5trjh8/bmJiYpyC1/z584t9buETV1mPM3f+PZo2bWr69+9fbLvLYv/+/UaSeeqpp4rcl/OD0b///W8jyWRmZha7PXfff8YYExMTY4YOHeqyjYIPiiFDhjgtd/dYMubcMSDJfPjhh07r3n777aZSpUpOfVz42Bg+fLgJCwtzCuTuKhxetm/fboYOHWokmb/97W9O7SspGC1dutTlj6SUlBQjqcjH448/Xua2FmzTnWOusNzcXHPmzBnTrVs3c+211zr9rnB/vvDCC0aS2bZtm2PZ77//biIiIsyDDz7oWNazZ09Tt25dxx9uBe6++24TGRlpfv/992LbU55gVPg9OWrUKBMZGekImQXnt4JzcVE2bNhQ7OsWVtz5pOB4L9yP/+///T8jyTzxxBOOZYXPL+vWrTOSzHPPPef03F27dpmoqCjzf//3fyW2qWrVqua+++4r9vfH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2Ctgq1Wr5rHXkaQxY8bouuuuK3KdtLQ0p58L/l3Kco7ya8Voy5Ytuu2229S0adMir244X7du3XT8+HGXG8cV3GCtW7duTv99++23ndZ7//33deLECcfvvaVbt25asWKFIwid387o6GiPXfLqicpS37599c0336hhw4ZF/rVaUjC64oorJLn284YNG7R169Yi+9lms6lFixb65z//qQsuuEBfffWVJDmG7gqfnD3BZrPJGONyInn99dddrmIqS596+zhLSEjQsGHDNGjQIG3bts3p6jB3pKSkKCoqSj///HOZnle5cmW1a9fOccVQwb+Ru+8/ybUqUZqyHkvHjh1zuuJJkt555x1VqlSpxMDRu3dvrVy5stSrPr1l5syZWrp0qQYNGuQ0xOVPNpvN5b2xZcuWYu8xV1iPHj2UlJSkmTNnaubMmYqMjNSgQYMcv4+OjlbXrl21adMmNW/evMjzTElhNiEhQZGRkdqyZYvT8g8//LAMe1m8iIgIde7cWU8//bSkc1fQFiyXXM8FZTmfFCi4p1WBtWvX6tdffy3xCtu+ffvKGKM9e/YU2WfNmjVzex/r1aunu+++W927d3e8nzt27Ci73a7p06cXO7xbFn379tWhQ4d09uzZIttbOKyUV1pamv70pz9p8+bNRb5OmzZtXELYL7/8olq1ahVZaS6O3ypGhw8fVv/+/ZWTk6PRo0fr66+/LnK9uLg4NWzYUEOGDNFLL72koUOHaseOHWrWrJn++9//6sknn1SfPn105ZVXSpK6d++unj17avTo0Tp69KguvfRSbdmyRePGjVOrVq2Unp7u1f0aN26cY+7OY489ppo1a2rOnDn6+OOP9cwzz7jc2K28Ct4YU6dO1dChQxUWFqa0tLQyJfOJEydq+fLl6tixo+69916lpaXp1KlT2rFjh5YsWaLp06cXW2pNS0vTiBEj9OKLL6pSpUrq3bu3duzYoUcffVTJycm6//77JZ0be542bZr69++vBg0ayBijBQsW6MiRI47LyDt16qT09HQ98cQT2r9/v/r27auIiAht2rRJ0dHRuueee8rdT9WrV9fll1+uZ599VrGxsapfv75Wr16tN954w+XGmE2bNpUkvfrqq6pWrZoiIyOVmppa5InbG8dZu3bt1LdvXzVv3lw1atTQ1q1b9dZbb6lDhw6OcffZs2dr+PDhmjFjhoYMGVLstsLDw9WhQwe35m9Mnz5dK1as0FVXXaV69erp1KlTjsu6C95X7r7/pHPH5qpVq/TRRx+pTp06qlatWoknRnePpQK1atXSnXfeqZ07d+qiiy7SkiVL9Nprr+nOO+8sMXBMnDhRS5cu1eWXX65HHnlEzZo105EjR5SRkaEHHnhAjRo1KrWv3HHy5ElHv588eVK//PKLFi5cqMWLF6tz586aPn26y3OOHDlS5L9VRESEWrVq5fjZZrOpc+fO5bqze1H69u2rxx9/XOPGjVPnzp21bds2TZw4UampqW7dsqNy5coaMmSIpkyZourVq+u6665zOcdNnTpVl112mTp16qQ777xT9evX17Fjx/TTTz/po48+cszXK0rBPJsZM2aoYcOGatGihb744gu988475d7nxx57TLt371a3bt1Ut25dHTlyRFOnTlVYWJg6d+4s6dzwclRUlObMmaPGjRuratWqSkxMVGJiotvnkwIbN27UbbfdphtvvFG7du3S2LFjlZSU5Bj6Kcqll16qESNG6JZbbtHGjRt1+eWXKyYmRvv27dN///tfNWvWzOneWefLzs5W165dNXjwYDVq1EjVqlXThg0blJGR4aiyVK1aVc8995xuu+02XXnllbr99tuVkJCgn376SZs3b9a//vWvMvXpwIEDNWfOHPXp00d//etf1bZtW4WFhWn37t1auXKlrrnmGl177bVl2mZxXnnlFfXu3Vs9e/bUsGHDlJSUpN9//11bt27VV199pfnz5zutv379enXu3Lls90pze5q2hxVcPVTa4/yrWw4dOmRGjhxp6tSpY6pUqWJSUlLMmDFjiry0f/To0SYlJcWEhYWZOnXqmDvvvNPp8khjir4E1xhT5KW/BVdHPPvss6Xu29dff2369etn7Ha7CQ8PNy1atHC5uqFg/+fPn1/k67hzNcSYMWNMYmKiqVSpktPVVMXtV1FXdR08eNDce++9JjU11YSFhZmaNWua1q1bm7Fjx5Y6i//s2bPm6aefNhdddJEJCwszsbGx5i9/+YvjslZjzl0OPGjQINOwYUMTFRVl7Ha7adu2rZk1a5bLtv75z3+apk2bmvDwcGO3202HDh3MRx99VGL75cZVabt37zbXX3+9qVGjhqlWrZrp1auX+eabb0xKSorL1VPPP/+8SU1NNZUrV3b6dyjqctqKHmeF9+fhhx82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2E/K00/Dhg1zOZbat2/vmwZbHMEoyJ0+fVo33nij7rzzTref88wzz2jKlCn617/+pQ0bNqh27drq3r274wt4rWjw4MHKzMxURkaGMjIylJmZqfT09GLXN8aof//++uWXX/Thhx9q06ZNSklJ0ZVXXqkTJ074sOW+VdZ+kqT7779fGRkZevvtt7V161bdf//9uueee/Thhx/6qNW+V55+2rdvn9NjxowZstlsuv76633Uat8rTz/9/PPPuuyyy9SoUSOtWrVKmzdv1qOPPqrIyEgftdr3ytNPktSrVy+nY2rJkiU+aG0IMLCEmTNnGrvdXup6eXl5pnbt2uapp55yLDt16pSx2+1m+vTpXmyh/3z33XdGklm/fr1j2bp164wk8/333xf5nG3bthlJ5ptvvnEsy83NNTVr1jSvvfaa19vsD+XpJ2OMufjii83EiROdll1yySXm73//u9fa6k/l7afCrrnmGnPFFVd4o4kBobz9NGDAAPOXv/zFF00MCOXtp6FDh5prrrnGBy0MPVSMQsz27duVlZWlHj16OJZFRESoc+fOWrt2rR9b5j3r1q2T3W5Xu3btHMvat28vu91e7D7n5ORIktNfqZUrV1Z4eLj++9//erfBflKefpKkyy67TIsWLdKePXtkjNHKlSv1ww8/qGfPnr5ots+Vt5/Ot3//fn388ce69dZbvdVMvytPP+Xl5enjjz/WRRddpJ49eyo+Pl7t2rXTwoULfdRq36vI8bRq1SrFx8froosu0u23364DBw54u7khgWAUYrKysiRJCQkJTssTEhIcv7OarKwsxcfHuyyPj48vdp8bNWqklJQUjRkzRocPH9bp06f11FNPKSsrS/v27fN2k/2iPP0kSS+88IKaNGmiunXrKjw8XL169dK0adN02WWXebO5flPefjrfm2++qWrVqum6667zdPMCRnn66cCBAzp+/Lieeuop9erVS8uWLdO1116r6667TqtXr/Z2k/2ivMdT7969NWfOHK1YsULPPfecNmzYoCuuuMLxRx3Kj2AUgMaPH1/sRM2Cx8aNGyv0GjabzelnY4zLskBXln4qat9K2uewsDC9//77+uGHH1SzZk1FR0dr1apV6t27typXruzV/fI0b/aTdC4YrV+/XosWLdKXX36p5557TqNGjdKnn37qtX3yBm/30/lmzJihm2++OSjnzXizn/Ly8iRJ11xzje6//361bNlSDz/8sPr27avp06d7b6e8wNvH04ABA3TVVVepadOm6tevn5YuXaoffvhBH3/8sdf2KVRU8XcD4Oruu+/WwIEDS1ynfv365dp27dq1JZ37K6VOnTqO5QcOHHCpIgU6d/tpy5Yt2r9/v8vvDh48WOI+t27dWpmZmcrOztbp06cVFxendu3aqU2bNhVuuy95s59OnjypRx55RB988IGuuuoqSVLz5s2VmZmpyZMn68orr6z4DviIt4+nAmvWrNG2bds0b968crfVn7zZT7GxsapSpYqaNGnitLxx48ZBN4Ttq+OpQJ06dZSSkmL5K2d9gWAUgGJjYxUbG+uVbaempqp27dpavny5WrVqJenclW2rV6/W008/7ZXX9BZ3+6lDhw7Kzs7WF198obZt20qSPv/8c2VnZ6tjx46lPt9ut0uSfvzxR23cuFGPP/54xRruY97spzNnzujMmTOqVMm5+Fy5cmXHX//BwlfH0xtvvKHWrVurRYsWFW6zP3izn8LDw/XnP/9Z27Ztc1r+ww8/KCUlpeKN9yFfHU8FDh06pF27djn9wYty8uPEb3jAr7/+ajZt2mQmTJhgqlatajZt2mQ2bdpkjh075lgnLS3NLFiwwPHzU089Zex2u1mwYIH5+uuvzaBBg0ydOnXM0aNH/bELPtGrVy/TvHlzs27dOrNu3TrTrFkz07dvX6d1CvfTe++9Z1auXGl+/vlns3DhQpOSkmKuu+46Xzfdp8rTT507dzYXX3yxWblypfnll1/MzJkzTWRkpJk2bZqvm+8z5eknY4zJzs420dHR5uWXX/Zlc/2mPP20YMECExYWZl599VXz448/mhdffNFUrlzZrFmzxtfN95my9tOxY8fMgw8+aNauXWu2b99uVq5caTp06GCSkpIsfR73FYJRkBs6dKiR5PJYuXKlYx1JZubMmY6f8/LyzLhx40zt2rVNRESEufzyy83XX3/t+8b70KFDh8zNN99sqlWrZqpVq2Zuvvlmc/jwYad1CvfT1KlTTd26dU1YWJipV6+e+fvf/25ycnJ823AfK08/7du3zwwbNswkJiaayMhIk5aWZp577jmTl5fn28b7UHn6yRhjXnnlFRMVFWWOHDniu8b6UXn76Y033jAXXnihiYyMNC1atDALFy70XaP9oKz99Mcff5gePXqYuLg4x/lp6NChZufOnb5vvAXZjDHGT8UqAACAgMJVaQAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPkIRgAAAPn+P1DEilP9/1qUAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Zoom on the oscillations. (Isotropic PDE, naive unstable scheme)\")\n", "plt.contourf(X0,X1,solution_naive); plt.xlim((-1.,-0.5)); plt.ylim((-0.25,0.25));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The problem only worsens if the diffusion tensors are anisotropic." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.181540Z", "iopub.status.busy": "2024-04-30T09:01:30.181451Z", "iopub.status.idle": "2024-04-30T09:01:30.183836Z", "shell.execute_reply": "2024-04-30T09:01:30.183610Z" } }, "outputs": [], "source": [ "ev = np.stack((1.+0.*X0, np.sin(2*np.pi*X0)), axis=0)\n", "evNorm = np.sqrt((ev**2).sum(axis=0))\n", "ev /= evNorm\n", " \n", "Diff = 0.4**2*lp.outer_self(ev) + lp.outer_self(lp.perp(ev))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.185149Z", "iopub.status.busy": "2024-04-30T09:01:30.185069Z", "iopub.status.idle": "2024-04-30T09:01:30.192357Z", "shell.execute_reply": "2024-04-30T09:01:30.192109Z" } }, "outputs": [], "source": [ "u = ad.Sparse.identity(X0.shape)\n", "residue = Scheme_Naive(u,Diff,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.193878Z", "iopub.status.busy": "2024-04-30T09:01:30.193801Z", "iopub.status.idle": "2024-04-30T09:01:30.215245Z", "shell.execute_reply": "2024-04-30T09:01:30.214899Z" } }, "outputs": [], "source": [ "solution_naive = residue.solve()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.217343Z", "iopub.status.busy": "2024-04-30T09:01:30.217200Z", "iopub.status.idle": "2024-04-30T09:01:30.281746Z", "shell.execute_reply": "2024-04-30T09:01:30.281464Z" } }, "outputs": [ { "data": { "image/png": "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7duHdu3aAQD27t2LvLw8xMXFOb2+y5cvIzs72yK4EuDv74+YmBhkZGRg4MCB5ukZGRl45JFHbD4nNjYWmzZtspj29ddfo23btvDz85O0vd7AnX1uy6FDh/h+lhDf5xJScsQ5yePMmTPi0KFDYt68eaJGjRri0KFD4tChQ6KgoMA8T3R0tFi3bp3579dee00YDAaxbt068d///leMGDFChIWFifz8fCU2QZN69eol7rvvPpGZmSkyMzNFy5YtRb9+/SzmKb3fCwoKxLRp08Tu3bvFqVOnxI4dO0RsbKyoX78+97sNa9asEX5+fmLZsmXi6NGjIikpSVSvXl2cPn1aCCHEjBkzRGJionn+33//XVSrVk0899xz4ujRo2LZsmXCz89PrF27VqlN0BxX9/miRYvE+vXrxa+//ip+/vlnMWPGDAFApKenK7UJmlNQUGA+ZgMQb7zxhjh06JA4c+aMEILvczkxMPmA0aNHCwBWjx07dpjnASBWrFhh/rukpETMmTNHhIaGCr1eLzp37iz++9//yt94Dbt8+bJ47LHHRM2aNUXNmjXFY489ZnV5den9/ueff4qEhARRr1494efnJxo2bChGjx4tsrKy5G+8Rrz77rsiMjJS+Pv7izZt2ohdu3aZ/2/06NGiS5cuFvPv3LlTtG7dWvj7+4uoqCjx3nvvydxi7XNlny9YsEDcddddIiAgQNSuXVs8+OCDYvPmzQq0WrtMt2Yo+xg9erQQgu9zOemE+P/RYERERERkE28rQEREROQAAxMRERGRAwxMRERERA4wMBERERE5wMBERERE5AADExEREZEDDExEREREDjAwERERETnAwERERETkAAMTERERkQMMTEREREQO/B93V2DFf3KMhQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an anisotropic elliptic PDE. (Naive unstable scheme.)\")\n", "plt.contourf(X0,X1,solution_naive);" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.283313Z", "iopub.status.busy": "2024-04-30T09:01:30.283213Z", "iopub.status.idle": "2024-04-30T09:01:30.343994Z", "shell.execute_reply": "2024-04-30T09:01:30.343736Z" } }, "outputs": [ { "data": { "image/png": "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+oqpU6eaXXZJSYmIiooS/fr1My378MMPhcFgEH379hVr164VX375pejdu7fw8vISW7durfS6GG9Pp06dMltu7ffbpUsXERoaKu655x6xePFikZWVJZ5//nkBQKxcudK0Xnp6uvDy8hLTp08X27ZtE5s2bRLz588XM2bMEEJUfb/9+uuvi3fffVds2LBB7Ny5UyxevFjExsZa/J0NHTpU+Pr6ioYNG4o333xTbNmyRcyYMUN4e3uL3r17m60bHR0thg4davr++vXronXr1iIsLEzMmzdPbN26VSxYsECEhISIBx98UJSVldncZ668L3f1Y5TxthkdHS369Okj1q9fLz766CMREREhmjRpItLS0sTTTz8tvvrqK7F48WIRFBQk+vTpY3b93nzzTWEwGMTTTz8t1q9fL9auXSuSk5NFYGCg+Omnn8zWLSkpEUFBQWLixIk295c1kgPp0qVLIjo6WtSpU0fk5ORY/Hzx4sUCgPj444/Nls+ePVsAEFu2bBFClN9ZARBvv/222XqZmZkCgFi6dKlpWXR0tAgICBBnz541LTt06JAAICIjI8X169dNy9etWycAiC+++KLS6zFw4EDh5+dncR1SU1NF9erVTXcixj/EinfUH3/8sQAg9u7dW+nlzJkzx+ofuPF6+fv7i99//9207ObNm6J27dpi1KhRpmWjRo0SQUFBZusJIcTcuXMFAIsbxd2OHTsmAIjnn3/ebPm+ffsEAPHqq68KIYT47rvvBACxbt06m+f19ddfCwAWd4oVSQ2kikpKSkRRUZEIDAw0+6P95JNPbJ62YiA5ejuz5/eRkJAg+vbta3O7HXHx4kUBQLz11ltWf/70008LAOLYsWNCiD/327Rp08zWMz6QVPw9v/322wKAyM3NNS2r+PsZO3asqFmzZqXbae/fy/79+wUA8cEHH1icx9ChQwUAsXz5crPl9t5nCFF+OwoICBAXLlwwLSspKRHx8fGicePGpmXWbl9xcXEiLi5O3Lx5s9LrWlHFiLl165Y4cOCAaNu2rQAgNmzYYLZ9lQXSpEmTBACxb98+s/O29bV7926HtvXu82zRooXZf+C+/fZbAUCsWbPG5mlt/c1Z25/9+vUT9evXF6WlpaZlGzduFADEl19+KYQof6CvXbu2xYNcaWmpaNWqlWjXrl2l18XRQLp73xrde++9onv37qbve/fuLVq3bl3p5VZ2v323srIycefOHbFr1y4BQBw+fNj0M+Pt/e79KET5AzwAsWfPHtOyioGUnp4uqlWrJvbv32922v/+978CgNi4caPNbXLlfbmrH6OMt81WrVqZ3W7mz58vAIhHHnnE7PTjx48XAExxmpOTI7y9vcW4cePM1rt27ZqoW7eu1f9odurUSbRv377S61mRpENspaWlGDhwIM6ePYvMzEw0aNDAYp3t27cjMDAQTzzxhNly4zP0jWPV7du3my03+stf/oLAwECL8Wvr1q1Rr1490/fNmjUDUD5Wvfs5DMblVY29t2/fjm7dullch2HDhuHGjRsWT0x/5JFHzL5v2bKlXZdTldatW6Nhw4am7/39/dGkSROz812/fj26du2KqKgolJSUmL5SU1MBALt27bJ5/sbRYsX93K5dOzRr1sy0nxs3boxatWph0qRJWLx4MY4ePWpxXl999RUAYMyYMdKubBWKioowadIkNG7cGN7e3vD29kZQUBCuX7+OY8eOSTpPKbezqn4f7dq1w1dffYXJkydj586duHnzpqRtA2A6/BUeHm7xs6KiInz88cfo2LEj4uPjAQBdunRBXFwcVqxYYfXVGVJup+3atcPVq1cxaNAgfP7552aHRowc/XupzOOPP25x3vbcZxh169YNERERpu+9vLwwYMAA/PbbbxaHjY2OHz+OEydOYMSIEZKf4D5p0iT4+PjA398fiYmJyMnJwZIlSxx6gYoQwuryF198Efv377f4cuaJ7r169YKXl5fpe2u3BWf+5oYPH46zZ89i69atpmUffPAB6tata7pvys7OxpUrVzB06FCz+66ysjL06NED+/fvt+uQkb3q1q1r8XzYli1bWvz9Hj58GM8//zw2b96MwsJChy7j5MmTGDx4MOrWrQsvLy/4+PigS5cuAGB1nz355JNm3xufP1jZYZ/169cjISEBrVu3Nttv3bt3r/LVhK6+L3fHY1TPnj1RrdqfGWJ83O7Vq5fZesblOTk5AIDNmzebXhx29+X4+/ujS5cuVvdLeHg4zp07V+X1vJtDT9I2+utf/4pt27Zh7ty56Nq1q9V18vPzUbduXYsnRIWHh8Pb2xv5+fmm9by9vVGnTh2z9QwGA+rWrWtaz6h27dpm3/v6+la6/NatW5Vel/z8fERGRlosj4qKMv38bqGhoWbf+/n5AYBTD47W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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Zoom on the oscillations. (Anisotropic PDE, naive unstable scheme)\")\n", "plt.contourf(X0,X1,solution_naive); plt.xlim((-0.7,-0.2)); plt.ylim((0.2,0.7));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Anisotropic scheme\n", "\n", "In this section, we solve a general anisotropic elliptic PDE, using an adequate decomposition of the field $D$ of diffusion tensors.\n", "Recall that the energy to be minimized reads\n", "$$\n", " \\frac 1 2 \\int_\\Omega (\\| \\nabla u\\|_{D}^2 + \\alpha u^2) - \\int_\\Omega f u ,\n", "$$\n", "For that purpose, we rely on Selling's decomposition of the tensors, which reads\n", "$$\n", " D(x) = \\sum_{1 \\leq i \\leq I} \\rho_i(x) e_i e_i^T,\n", "$$\n", "where the weights $\\rho_i(x) \\geq 0$ are non-negative, the offets $e_i \\in Z^d$ have integer entries, and $I = d(d+1)/2$. The offsets actually depend on the point $x$, and adapt to the anisotropy directions of $D(x)$. See the notebook [TensorSelling](../Notebooks_Algo/TensorSelling.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From this point, the discretization scheme is quite similar to the isotropic one\n", "$$\n", " \\frac {h^d} 2 \\sum_{x \\in \\Omega_h} (a_h(x) + \\alpha(x) u(x)^2) - h^d \\sum_{x \\in \\Omega_h} f(x) u(x)\n", "$$\n", "where for each point $x \\in \\Omega_h$ of the discretization domain\n", "$$\n", " a_h(x) := \\frac 1 2 \\sum_{1 \\leq i \\leq I} \\sum_{\\sigma\\in \\{-1,1\\}} \\rho_i(x) (\\frac{u(x+\\sigma h e_i)-u(x)} h)^2.\n", "$$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.345519Z", "iopub.status.busy": "2024-04-30T09:01:30.345434Z", "iopub.status.idle": "2024-04-30T09:01:30.348271Z", "shell.execute_reply": "2024-04-30T09:01:30.348040Z" } }, "outputs": [], "source": [ "def Scheme_Aniso(u,Diff,α,f,bc,h):\n", " \"\"\"Anisotropic elliptic energy, with Dirichlet boundary conditions\"\"\"\n", " hd = h**u.ndim # h^d scaling factor for integrals\n", "\n", " # Apply Dirichlet boundary conditions\n", " boundary = np.logical_not(np.isnan(bc))\n", " bc_integrand = (u-bc)**2\n", " bc_energy = bc_integrand[boundary].sum()*hd\n", " \n", " u=u.copy() # Avoid side effects.\n", " u[boundary] = bc[boundary]\n", " \n", " # Decompose tensors\n", " coefs,offsets = Selling.Decomposition(Diff)\n", " coefs,offsets = np.concatenate((coefs,coefs),axis=0),np.concatenate((offsets,-offsets),axis=1)\n", " \n", " # Construct energy\n", " du = fd.DiffUpwind(u, offsets,h)\n", " integrand = 0.25*(coefs*du**2).sum(axis=0) +0.5*α*u**2 - f*u\n", " ad.simplify_ad(integrand)\n", " energy = integrand.sum()*hd\n", " \n", " return energy+bc_energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Interestingly, the anisotropic scheme reduces to the original isotropic scheme if the tensors are isotropic. \n", "Indeed, Selling's decomposition of an isotropic or diagonal tensor only involves offsets from the canonical basis of $R^d$." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.349772Z", "iopub.status.busy": "2024-04-30T09:01:30.349669Z", "iopub.status.idle": "2024-04-30T09:01:30.379522Z", "shell.execute_reply": "2024-04-30T09:01:30.379179Z" } }, "outputs": [], "source": [ "u = ad.Sparse2.identity(X0.shape)\n", "energy = Scheme_Aniso(u,Diff_Iso,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.381151Z", "iopub.status.busy": "2024-04-30T09:01:30.381064Z", "iopub.status.idle": "2024-04-30T09:01:30.395836Z", "shell.execute_reply": "2024-04-30T09:01:30.395513Z" } }, "outputs": [], "source": [ "solution = energy.solve_stationnary().reshape(u.shape)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.397355Z", "iopub.status.busy": "2024-04-30T09:01:30.397268Z", "iopub.status.idle": "2024-04-30T09:01:30.459589Z", "shell.execute_reply": "2024-04-30T09:01:30.459300Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an isotropic elliptic PDE\")\n", "plt.contourf(X0,X1,solution);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, we can now reliably handle anisotropic tensors." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.461154Z", "iopub.status.busy": "2024-04-30T09:01:30.461046Z", "iopub.status.idle": "2024-04-30T09:01:30.494458Z", "shell.execute_reply": "2024-04-30T09:01:30.494098Z" } }, "outputs": [], "source": [ "u = ad.Sparse2.identity(X0.shape)\n", "energy = Scheme_Aniso(u,Diff,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.496201Z", "iopub.status.busy": "2024-04-30T09:01:30.496108Z", "iopub.status.idle": "2024-04-30T09:01:30.532681Z", "shell.execute_reply": "2024-04-30T09:01:30.532361Z" } }, "outputs": [], "source": [ "solution = energy.solve_stationnary().reshape(u.shape)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.534277Z", "iopub.status.busy": "2024-04-30T09:01:30.534188Z", "iopub.status.idle": "2024-04-30T09:01:30.598735Z", "shell.execute_reply": "2024-04-30T09:01:30.598462Z" } }, "outputs": [ { "data": { "image/png": "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lSgtLa132eeeew633XYbrrrqKnz00Ud4//33UV5ejj59+uCnn36qd1lfTJo0CY0aNXKOs/n222/Rr18/Z4hcuHAhevfuDavV6jy+9QXyX3/9Fddccw3WrFmD6dOnY+PGjXjllVdgsVhQVlbmc/uqqqpw+PBhnyqAN910E4QQ2LZtm8t0IQTOnz/v9hBC+NwukokgksnJkyfFtddeKwAIACI0NFSkp6eL7OxsUV5e7pxv3759AoC4//77XZbfsWOHACCeeOIJ57QJEyaI+Ph45/ODBw8KAGLp0qVu2wcgZs2a5Xz+t7/9TQAQBw8edJu3b9++om/fvs7nixcvFgDERx995DLfvHnzBADx+eefu2wnOjpaOBwO5zSbzSYaNWoksrOz6zo8Qgghdu7c6bH9Fy5cELGxsaJLly7iwoULzunl5eUiKipKpKen17ve2s6fPy+qqqrEpEmTRLdu3Vz+L5D2S7GdpUuXurxOu3btEgDE2rVr69zupk2bBAAxf/58l+m5ubkCgHjrrbec066++mqX17ra5s2bBQBx3XXXuUwvKysTTZo0EUOHDnWZXlxcLMxmsxg/frxz2oQJEwQAsWDBApd5n332WQFAfPPNN85p8fHxYsKECc7nc+fOFQBEXl5enfvpSXFxsQgJCREPPvigy/Ty8nJhtVrFmDFjnNNmzZolap8Gar/3hXD/26l+TUaOHOky3z//+U8BQDzzzDPOacOGDXP5G61vvX/5y19EaGio+Omnn7zYU1fx8fFi6NChoqqqSlRVVYmDBw86j/9jjz3msn9XX311nevZuHGjACDmzZvnsu7qz63aj7/+9a8+t5XkwQoOyaZ169bYtm0bdu7cieeffx4jRozAzz//jKysLHTp0sVZmdm8eTMAuJXre/bsiU6dOuHLL7+Uu+n46quv0KxZM4waNcplenUba7epf//+aNGihfN5dHQ0oqKi/C57FxUV4ejRo8jMzHTpzmvevDluvfVWbN++3a3Lo7aPP/4YvXv3RvPmzRESEoLQ0FAsWbLErVsl0PZLvZ0rrrgCrVq1wsyZM7F48WKPFYmvvvoKgPt7aPTo0WjWrJlP76Fbb73V5XlBQQHOnj3rtu64uDhcf/31Htd9++23uzwfP348gD/e655s3LgRV155JW644Qav2woAn332Gc6fP48777zTpdIQHh6Ovn37Orth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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an anisotropic elliptic PDE\")\n", "plt.contourf(X0,X1,solution);" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.600223Z", "iopub.status.busy": "2024-04-30T09:01:30.600141Z", "iopub.status.idle": "2024-04-30T09:01:30.603588Z", "shell.execute_reply": "2024-04-30T09:01:30.603279Z" } }, "outputs": [], "source": [ "residue = Scheme_Naive(solution,Diff,α,f,bc,gridScale)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.604940Z", "iopub.status.busy": "2024-04-30T09:01:30.604856Z", "iopub.status.idle": "2024-04-30T09:01:30.706396Z", "shell.execute_reply": "2024-04-30T09:01:30.706112Z" } }, "outputs": [ { "data": { "image/png": "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jQNKMzIycP36dXz66af4+uuvMWjQIERFRQEAJk+ejAceeMDqOpo2bQoAqFmzJqZOnYqpU6fi9OnTxtaP/v374+DBg1Y/ayhASkpKUL9+fePya9euWVSoYWFhAG4OQDNUHoBlAWLI89dff42kpCTnDoSJevXq4cSJE3bT1K1bF8XFxRbLT506JcmDt5SUlNhcZjiGpsfHlCsFX1RUFOrWrYu8vDyr7xt+Zbryvdlyzz334LXXXsP27dtx4sQJ9OzZExEREWjXrh3y8/Nx6tQpNGnSBImJiU7nX2mioqIQHh6OBQsW2HzfGxYvXoyGDRsiNzdXMrjW/Fyw5dFHH8Wbb76JpUuXYsiQIVi5ciXGjRsnaSmKiopCq1at8Prrr1tdhyHotqVLly7o0qULrl+/jp07d+L999/HuHHjEBMTg6FDh6JevXr44YcfcOPGDaeCD3tq166NkJAQZGVl4ZlnnrGapmHDhh5twyAqKgoajQZbtmyRlEsG1paRcjHw8IN//etfWLZsGV577TU88MADaNq0KRo3box9+/bhjTfecHo9MTExGDlyJPbt24fZs2fjzz//RI0aNSzSde/eHQCwZMkSpKWlGZf/+9//thgpn5ycDAD46aef0K5dO+Py//znP5J0vXr1QvXq1XHkyBE8+OCDTufZoE+fPvj8889x6NAhY1Bl7p577sH06dOxe/du3HnnncblixYtgkajQUZGhsvbtefXX3/Fvn37JN0tX3zxBSIiIozbNz0+pvleuXKlxfrMfzEb9OvXD0uXLsX169fRoUMHm/lx5XuzpUePHnj55Zfx6quvIiEhASkpKcblK1euRElJiVPfn6198ZQ3Wkb69euHN954A3Xr1vVaRWeNRqOBVquVBB0lJSVW72qxJjU1FR06dMDChQtx/fp1VFRUWNxO369fP6xevRqNGjVC7dq13c5rSEgIOnTogJSUFCxZsgS7d+/G0KFD0adPH3z55ZfIyclxqrvFnho1aiAjIwN79uxBq1atjK0UcujXrx9mzJiBkydPYvDgwbJth3yDgYcf1K5dG5MnT8aLL76IL774Ag8//DA++ugj9OnTB7169cLIkSNRv359/PHHHzhw4AB2796Nr776CgDQoUMH9OvXD61atULt2rVx4MABfP7550hPT7cadAA3C7yHH34Ys2fPRmhoKHr06IFffvkFb731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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Residue computed with the naive scheme\")\n", "plt.contourf(X0,X1,residue); plt.colorbar();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The residue is not so small, because the solution is not very smooth, and because of the treatment of the boundary conditions, but it decays as expected with the grid scale." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.707950Z", "iopub.status.busy": "2024-04-30T09:01:30.707841Z", "iopub.status.idle": "2024-04-30T09:01:30.710206Z", "shell.execute_reply": "2024-04-30T09:01:30.709968Z" } }, "outputs": [ { "data": { "text/plain": [ "0.24618908524939764" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LInfNorm(residue[X0**2+X1**2<0.7**2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Neuman boundary conditions\n", "\n", "We show how to implement Neumann boundary conditions on the left part of the domain. This property is encoded with the specific value $+\\infty$ for the boundary conditions." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.711582Z", "iopub.status.busy": "2024-04-30T09:01:30.711481Z", "iopub.status.idle": "2024-04-30T09:01:30.713173Z", "shell.execute_reply": "2024-04-30T09:01:30.712948Z" } }, "outputs": [], "source": [ "bc_Neumann = np.where(np.logical_or(X0<=0,np.isnan(bc)), bc, np.inf)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.714449Z", "iopub.status.busy": "2024-04-30T09:01:30.714369Z", "iopub.status.idle": "2024-04-30T09:01:30.717611Z", "shell.execute_reply": "2024-04-30T09:01:30.717390Z" } }, "outputs": [], "source": [ "def Scheme_Aniso2(u,Diff,α,f,bc,h):\n", " \"\"\"Anisotropic elliptic energy, with Dirichlet and Neumann boundary conditions\"\"\"\n", " hd = h**u.ndim # h^d scaling factor for integrals\n", " \n", " # Apply Dirichlet boundary conditions\n", " dir_mask = np.isfinite(bc)\n", " dir_integrand = (u-bc)**2\n", " dir_energy = dir_integrand[dir_mask].sum()*hd\n", " \n", " neu_mask = np.isinf(bc)\n", " neu_integrand = u**2\n", " neu_energy = neu_integrand[neu_mask].sum()*hd\n", " \n", " u=u.copy()\n", " u[dir_mask] = bc[dir_mask]\n", " u[neu_mask] = np.nan\n", " \n", " # Decompose tensors\n", " coefs,offsets = Selling.Decomposition(Diff)\n", " coefs,offsets = np.concatenate((coefs,coefs),axis=0),np.concatenate((offsets,-offsets),axis=1)\n", " \n", " # Construct energy\n", " du = fd.DiffUpwind(u, offsets,h)\n", " du[np.isnan(du)] = 0. \n", " integrand = 0.25*(coefs*du**2).sum(axis=0) +0.5*α*u**2 - f*u\n", " \n", " ad.simplify_ad(integrand)\n", " energy = integrand[np.logical_not(neu_mask)].sum()*hd\n", " \n", " return energy+dir_energy+neu_energy" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.718965Z", "iopub.status.busy": "2024-04-30T09:01:30.718880Z", "iopub.status.idle": "2024-04-30T09:01:30.753385Z", "shell.execute_reply": "2024-04-30T09:01:30.752962Z" } }, "outputs": [], "source": [ "u = ad.Sparse2.identity(X0.shape)\n", "energy = Scheme_Aniso2(u,Diff,α,f,bc_Neumann,gridScale)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.755044Z", "iopub.status.busy": "2024-04-30T09:01:30.754958Z", "iopub.status.idle": "2024-04-30T09:01:30.791039Z", "shell.execute_reply": "2024-04-30T09:01:30.790740Z" } }, "outputs": [], "source": [ "solution = energy.solve_stationnary().reshape(u.shape)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T09:01:30.792563Z", "iopub.status.busy": "2024-04-30T09:01:30.792480Z", "iopub.status.idle": "2024-04-30T09:01:30.856730Z", "shell.execute_reply": "2024-04-30T09:01:30.856464Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.axis('equal'); plt.title(\"Solution to an anisotropic elliptic PDE, with Neumann bc on the right\")\n", "plt.contourf(X0,X1,solution);" ] }, { "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.10.8" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }