{ "cells": [ { "cell_type": "markdown", "id": "60c55e04", "metadata": {}, "source": [ "# Tutorial 1: resolution of a Poisson problem" ] }, { "cell_type": "markdown", "id": "11b1b539", "metadata": {}, "source": [ "### The problem definition" ] }, { "cell_type": "markdown", "id": "56edb356", "metadata": {}, "source": [ "This tutorial presents how to solve with Physics-Informed Neural Networks a 2-D Poisson problem with Dirichlet boundary conditions.\n", "\n", "The problem is written as:\n", "\\begin{equation}\n", "\\begin{cases}\n", "\\Delta u = \\sin{(\\pi x)} \\sin{(\\pi y)} \\text{ in } D, \\\\\n", "u = 0 \\text{ on } \\Gamma_1 \\cup \\Gamma_2 \\cup \\Gamma_3 \\cup \\Gamma_4,\n", "\\end{cases}\n", "\\end{equation}\n", "where $D$ is a square domain $[0,1]^2$, and $\\Gamma_i$, with $i=1,...,4$, are the boundaries of the square." ] }, { "cell_type": "markdown", "id": "bd72a9f9", "metadata": {}, "source": [ "First of all, some useful imports." ] }, { "cell_type": "code", "execution_count": 1, "id": "0f54a8bc", "metadata": {}, "outputs": [], "source": [ "import os\n", "import numpy as np\n", "import argparse\n", "import sys\n", "import torch\n", "from torch.nn import ReLU, Tanh, Softplus\n", "from pina.problem import SpatialProblem\n", "from pina.operators import nabla\n", "from pina.model import FeedForward\n", "from pina.adaptive_functions import AdaptiveSin, AdaptiveCos, AdaptiveTanh\n", "from pina import Condition, Span, PINN, LabelTensor, Plotter" ] }, { "cell_type": "markdown", "id": "f661caca", "metadata": {}, "source": [ "Now, the Poisson problem is written in PINA code as a class. The equations are written as *conditions* that should be satisfied in the corresponding domains. *truth_solution*\n", "is the exact solution which will be compared with the predicted one." ] }, { "cell_type": "code", "execution_count": 2, "id": "71fb35b3", "metadata": {}, "outputs": [], "source": [ "class Poisson(SpatialProblem):\n", " spatial_variables = ['x', 'y']\n", " bounds_x = [0, 1]\n", " bounds_y = [0, 1]\n", " output_variables = ['u']\n", " domain = Span({'x': bounds_x, 'y': bounds_y})\n", "\n", " def laplace_equation(input_, output_):\n", " force_term = (torch.sin(input_['x']*torch.pi) *\n", " torch.sin(input_['y']*torch.pi))\n", " return nabla(output_['u'], input_).flatten() - force_term\n", "\n", " def nil_dirichlet(input_, output_):\n", " value = 0.0\n", " return output_['u'] - value\n", "\n", " conditions = {\n", " 'gamma1': Condition(Span({'x': bounds_x, 'y': bounds_y[-1]}), nil_dirichlet),\n", " 'gamma2': Condition(Span({'x': bounds_x, 'y': bounds_y[0]}), nil_dirichlet),\n", " 'gamma3': Condition(Span({'x': bounds_x[-1], 'y': bounds_y}), nil_dirichlet),\n", " 'gamma4': Condition(Span({'x': bounds_x[0], 'y': bounds_y}), nil_dirichlet),\n", " 'D': Condition(Span({'x': bounds_x, 'y': bounds_y}), laplace_equation),\n", " }\n", " def poisson_sol(self, x, y):\n", " return -(np.sin(x*np.pi)*np.sin(y*np.pi))/(2*np.pi**2)\n", "\n", " truth_solution = poisson_sol" ] }, { "cell_type": "markdown", "id": "1a959d3e", "metadata": {}, "source": [ "### The problem solution " ] }, { "cell_type": "markdown", "id": "42de9096", "metadata": {}, "source": [ "Then, a feed-forward neural network is defined, through the class *FeedForward*. A 2-D grid is instantiated inside the square domain and on the boundaries. This neural network takes as input the coordinates of the points which compose the grid and gives as output the solution of the Poisson problem. The residual of the equations are evaluated at each point of the grid and the loss minimized by the neural network is the sum of the residuals.\n", "In this tutorial, the neural network is composed by two hidden layers of 10 neurons each, and it is trained for 5000 epochs with a learning rate of 0.003. These parameters can be modified as desired.\n", "The output of the cell below is the final loss of the training phase of the PINN." ] }, { "cell_type": "code", "execution_count": 3, "id": "11b3dd75", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "2.384537034558816e-05" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poisson_problem = Poisson()\n", "\n", "model = FeedForward(layers=[10, 10],\n", " output_variables=poisson_problem.output_variables,\n", " input_variables=poisson_problem.input_variables)\n", "\n", "pinn = PINN(poisson_problem, model, lr=0.003, regularizer=1e-8)\n", "pinn.span_pts(20, 'grid', ['D'])\n", "pinn.span_pts(20, 'grid', ['gamma1', 'gamma2', 'gamma3', 'gamma4'])\n", "pinn.train(5000, 100)" ] }, { "cell_type": "markdown", "id": "b320fbd5", "metadata": {}, "source": [ "The loss trend is saved in a dedicated txt file located in *tutorial1_files*." ] }, { "cell_type": "code", "execution_count": 5, "id": "c249817b", "metadata": {}, "outputs": [], "source": [ "os.mkdir('tutorial1_files')\n", "with open('tutorial1_files/poisson_history.txt', 'w') as file_:\n", " for i, losses in enumerate(pinn.history):\n", " file_.write('{} {}\\n'.format(i, sum(losses)))\n", "pinn.save_state('tutorial1_files/pina.poisson')" ] }, { "cell_type": "markdown", "id": "7803e6ed", "metadata": {}, "source": [ "Now the *Plotter* class is used to plot the results.\n", "The solution predicted by the neural network is plotted on the left, the exact one is represented at the center and on the right the error between the exact and the predicted solutions is showed. " ] }, { "cell_type": "code", "execution_count": 6, "id": "0900748a", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotter = Plotter()\n", "plotter.plot(pinn)" ] }, { "cell_type": "markdown", "id": "7e6fe021", "metadata": {}, "source": [ "### The problem solution with extra-features" ] }, { "cell_type": "markdown", "id": "f39c0033", "metadata": {}, "source": [ "Now, the same problem is solved in a different way.\n", "A new neural network is now defined, with an additional input variable, named extra-feature, which coincides with the forcing term in the Laplace equation. \n", "The set of input variables to the neural network is:\n", "\n", "\\begin{equation}\n", "[\\mathbf{x}, \\mathbf{y}, \\mathbf{k}(\\mathbf{x}, \\mathbf{y})], \\text{ with } \\mathbf{k}(\\mathbf{x}, \\mathbf{y})=\\sin{(\\pi \\mathbf{x})}\\sin{(\\pi \\mathbf{y})},\n", "\\end{equation}\n", "\n", "where $\\mathbf{x}$ and $\\mathbf{y}$ are the coordinates of the points of the grid and $\\mathbf{k}(\\mathbf{x}, \\mathbf{y})$ is the forcing term evaluated at the grid points. \n", "\n", "This forcing term is initialized in the class *myFeature*, the output of the cell below is also in this case the final loss of PINN." ] }, { "cell_type": "code", "execution_count": 7, "id": "80a4a3b8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7.93498870023341e-07" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poisson_problem = Poisson()\n", "\n", "class myFeature(torch.nn.Module):\n", " \"\"\"\n", " \"\"\"\n", " def __init__(self):\n", " super(myFeature, self).__init__()\n", "\n", " def forward(self, x):\n", " return (torch.sin(x['x']*torch.pi) *\n", " torch.sin(x['y']*torch.pi))\n", " \n", "feat = [myFeature()]\n", "model_feat = FeedForward(layers=[10, 10],\n", " output_variables=poisson_problem.output_variables,\n", " input_variables=poisson_problem.input_variables,\n", " extra_features=feat)\n", "\n", "pinn_feat = PINN(poisson_problem, model_feat, lr=0.003, regularizer=1e-8)\n", "pinn_feat.span_pts(20, 'grid', ['D'])\n", "pinn_feat.span_pts(20, 'grid', ['gamma1', 'gamma2', 'gamma3', 'gamma4'])\n", "pinn_feat.train(5000, 100)" ] }, { "cell_type": "markdown", "id": "df8b409b", "metadata": {}, "source": [ "The losses are saved in a txt file as for the basic Poisson case." ] }, { "cell_type": "code", "execution_count": 8, "id": "18888f16", "metadata": {}, "outputs": [], "source": [ "with open('tutorial1_files/poisson_history_feat.txt', 'w') as file_:\n", " for i, losses in enumerate(pinn_feat.history):\n", " file_.write('{} {}\\n'.format(i, sum(losses)))\n", "pinn_feat.save_state('tutorial1_files/pina.poisson_feat')" ] }, { "cell_type": "markdown", "id": "568b88a1", "metadata": {}, "source": [ "The predicted and exact solutions and the error between them are represented below." ] }, { "cell_type": "code", "execution_count": 9, "id": "9826e8e1", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA74AAAD8CAYAAABQBnj7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABOMUlEQVR4nO3dffRkVX3n+/fHhm4eRGgEoWkgTaRFG0JYiuh4E8MAjcBNbJLoDOpSzJhLGGWSmxlXbC+ZjFmJMx2dGRNHkSEMCpqEcE0cOrEFob2GTJQRNMhz2y0yTUOnsZHhQQMtzff+UaeguqiH86s6D/uc83mtVev3q6pzTu1TP3pTn/rus7ciAjMzMzMzM7O2elHdDTAzMzMzMzMrk4OvmZmZmZmZtZqDr5mZmZmZmbWag6+ZmZmZmZm1moOvmZmZmZmZtZqDr5mZmZmZmbXa1OAr6QpJD0u6c8zzkvRxSVsk3S7p1cU308xSJeksSZuyPmDtiOfH9hHj9pV0kqSbJd0m6VZJp1RwHu7rzGyskvq6gyXdIGlz9nNpRefi/s7MRqqjr5N0tKQnJb1/4LGvZse6Lbu9bN5zy1Px/Qxw1oTnzwZWZrcLgE/N2ygzawZJi4BP0usHVgFvk7RqaLORfcSUfT8C/G5EnAT8Tna/bJ/BfZ2ZjVBiX7cW2BgRK4GN2f0qfAb3d2Y2pMa+7mPAl0Y06R0RcVJ2e3je85safCPiJuAHEzZZA1wVPTcDB0laNm/DzKwRTgG2RMR9EbELuJpenzBoXB8xad8AXpL9fiDwUNkn4r7OzCYoq69bA1yZ/X4lcG7J5wG4vzOzsSrv6ySdC9wH3FXOKT1vrwKOsRx4YOD+tuyx7cMbSrqA3jcD7LefXnPMy4t4eeu6R3fvV3cTavPQ3Y/tjIhDF7LPz566Tzz6g2dzbXvXHT++C3hq4KHLIuKygfuj/v2/bugw4/qISfv+38D1kv4jvS/o3pCrweWaqa/b132d2dzuvuPHC+7rAP6PU/eJ/52jv7u7vr7usIjYDhAR24sYyleQXP3dYF+3SHu/Zv+9Kxmp3Wq791tcdxNeYPe+1b7es/tEqcc/YMlT0zdaoEP3fqKQ49x7x66Z+rp/8nP7xv9+dHpfd+8du5Lq6yTtD3wAWA28nxf6tKTdwF8Avx8Rc/3HUcSnMY14bGSjsjf2MoATTlwcf/HFQwp4+fR9/nFfGmPl+O0Tvvi/FrrPoz94lrz/9l559PanIuLkCZvk+fc/bptJ+/5L4Dcj4i8k/TPgvwFnTGtvyWbq644/cXH86V8fVma7zFrvpJ/YtuC+DuB//+BZ8vz7O+knttXV16UqV5sH+7oDlxwWb1j29rLb1VpPvGZ53U0Y6ZFViyp/zadeWXwwHfTGlVsKP+Z7D/tKIcd5/Yr7Z+vrHn2Wz/zVEXmOn1pf97vAxyLiSekFu78jIh6UdAC94PtO4Kopx5uoiOC7DThq4P6RVDAscRqHTbNK5Pn3P26bxRP2PR/4jez3/xe4vKD2ziPJvs7MKlFWX7dD0rKsArIMmPsatoK4v6uQQ+/zyg69NlXVfd3rgLdI+ghwEPCspKci4hMR8SBARDwh6U/pDaWuPfiuBy6SdDW9xj/WL2WXxaHWLBm3ACslHQM8CJwHDH/lP7KPkPT9Cfs+BPwc8FXgNGBz2SeSQ+V9nZklo6y+bj29L/rWZT+vLf1M8nF/V4FUAy/UE3otCZX2dRHxs/2DSvoQ8GREfELSXsBBEbFT0t7AzwM3zntyU4OvpD8DTgUOkbQN+HfA3lljLwU2AOcAW4AfAb8yb6OGOeiapSkinpF0EXA9sAi4IiLuknRh9vzYPmLcvtmh/y/gj7KO7ymya8jKlEJfZ2ZpKrGvWwdcI+k9wFbgrVWcj/u7eqUceK3bEurrltCb62Xv7Fg3An887/lNDb4R8bYpzwfwvnkbMooDr1n6ImIDvU5w8LFLB34f20eM2jd7/H8Arym2pZPV2deZWfpK6useAU4vtqXTub+rTxNCb13V3iqGOZdxfW/b1NXXRcSHBn7/ISV8DkxyqlEHXjMzMzNriyYEXvAQZ2u35IKvQ6+ZmZmZtUFTAq9ZFyQVfB16zczMzKzpmhh466z2ejZnq0JSwdfMzMzMrImaGHb7PMTZuiCZ4Otqr5mZmZk1TZMDLzj0WnckE3zNzMzMzJqg6WG3L4XQ62HOVpUkgq+rveW44R9eWXcTXmD14ffW3QQza6jPPvqGupuwYO9c+rW6m2BmBWpL4IU0Qm9bXLLjNN572FfqboZNkUTwtclSDLCzmuVcHJbN2qmJQXahFnqODspmaWlT0E2Rq71WJQffmrUp1JYlz3vkcGyWni4E26JNes8cis3K15Wg28Vq7xtXbqm7CVYzB9+KOOCWa9z760BsVg2H3PKNe48diM1m15WgO6iLodcMEgi+bby+1yE3HcN/Cwdhs/k55KZl1N/DYdiqtnu/xS8IkQd888GaWvNCXQy4o6QUej3M2apWe/BtAwfd5nAQNls4B93mGf6bOQhbHYoIm4Ph2eF1PimFXrM6OPjOyGG3HRyEzUZz2G2Xwb+nQ7A1icNuMRx6zRx8F8Rht/36f2MHYOsih91ucAg265YUQ6+HOVsdHHyncNjtpsG/u0OwtZ0Db3f1//YOwGbtlGLoNauLg+8YDrzW5yqwtZUDr/U5AJu1j0Ov2Z4cfIc48No4DsDWFg68No4DsFk7pBx6PczZ6uLgm+li4L1/26GFHGfFkd8v5DhNccM/vNLh1xqpK4H3y1uPK/01zjx6U+mvUScHYLPmSjn0mtXJwZf2hN6igmzZr9uGoOzq7/MknQX8EbAIuDwi1g09r+z5c4AfAe+OiG9N2lfSwcCfAyuA+4F/FhGPVnE+bdWG0FtFoM0rb1uaHpA/++gbHH7NGsSh12y8TgffJgbeusJtkSadQ9NCcderv5IWAZ8EVgPbgFskrY+Iuwc2OxtYmd1eB3wKeN2UfdcCGyNinaS12f0PVHVebdK0wJtSuC3CuPNpUiB29desGZoQets8zPmSHafx3sO+UnczbIJag+/nH391ba/dhNDbhpC7UKPOOfUw3PHq7ynAloi4D0DS1cAaYDD4rgGuiogAbpZ0kKRl9Kq54/ZdA5ya7X8l8FUcfBesCaG3bUE3r1HnnXoYdvXXLE1NCLxmKehkxTfV0NvFoJvH8PuSahDuaPV3OfDAwP1t9Kq607ZZPmXfwyJiO0BEbJf0siIb3QUpht6uhty8ht+fFIOww69ZWhx6zfLrVPBNLfA66M4m5SDchPD76O79FjDa4ouHSLp14IHLIuKygfsasVMM3R+3TZ59bQYphV6H3dmlGoQdfveUd06Chc5pIGlv4HLg1fQ+r10VEf+h5NOxBmla6G3zMGdrhs4E31RCr8Nu8Qbf0xRCcBPC7wLsjIiTJzy/DThq4P6RwEM5t1k8Yd8dkpZl1d5lwMOzNL6LUgi9DrvlGHxf6w7BDr97mDonwYxzGrwVWBIRPyVpP+BuSX8WEfdXdmaWpKYFXrNUvKjuBlSh7tB7/7ZDn7tZuVJ5n+v+b65CtwArJR0jaTFwHrB+aJv1wLvU83rgsWwY86R91wPnZ7+fD1xb9om0QZ2h98tbj3vuZuVL4b1O4UuWRKyhNxcB2c9zR2zz3HwIEbEL6M9pMGn/APaXtBewL7ALeLzoxluzOPSaza4zFd86pBDAuiq1KnBbRcQzki4Crqc3fO+KiLhL0oXZ85cCG+gtZbSF3nJGvzJp3+zQ64BrJL0H2Eqv8mET1BVC6g5fXVd3FbhFld9pl3VMkmdOglnmNPg8vVC8HdgP+M2I+EHONlnLND3wepizpaD1wbeOypsDb1r6f4+qA3DLhjyPFREb6IXbwccuHfg9gPfl3Td7/BHg9GJb2l51hF4H3vT0/yZ1D4NOySO7X5zz38c1Ey/rkHQjcPiIpy7O2ZRZ5jQ4BdgNHAEsBf5W0o39mfCtO5oeelPwxpVbKnkdL2mUtlYPda469KYyzNZGq+Pv06Ehz1aTqkNvCkNsbbKq/0ZdGPIcEWdExAkjbteSzUkAMGFOgknzIYzb/+3AdRHx44h4GPg7YNKcC9Yyj6xa1IrQ62pvs0g6S9ImSVuyeQeGn5ekj2fP3y7p1dP2lXSwpBskbc5+Ls0eP0XSbdnt25J+cWCf10i6IzvWxyWN+gJxQVobfKsMHA68zVL138vh19rAgbd5HH4rk2dOglnmNNgKnJZ9yNwfeD2Q7DCi3fvW3YL2aEvgTclNm4+tuwmNMDAR39nAKuBtklYNbXY2sDK7XQB8Kse+/Un8VgIbs/sAdwInR8RJwFnAf83mNSA77gUDr3XWvOfX+qHOZWp62F2ydfHcx3j66F0FtKQe92871Nf/WqNVFTaaGnif/N6BhR/zxcc8Vvgxy1Tl8OcWXe+7UCPnJJB0BL1li86ZcU6DTwKfpvfBUMCnI+L2qk5qFsNh7aV3766pJc3ksGsJeG4iPgBJ/Yn47h7YZg295dUCuFnSQdlolRUT9l0DnJrtfyXwVeADEfGjgePuQ3YJSHa8l0TE17P7V9Gb+O9L85xcK4NvFRW21ENvEaG2qNdJORxXdf1vV673tXZJPfCWEWznfc1Ug/GXtx7na39LMm5Ogoh4iN7Efv37C5rTICKepOET+zkI59PmwOthzo0zaSK+Sdssn7Lv2EkAJb0OuAL4CeCd2ReFy7P9h19jLq0LvmWH3hQDb1Uhd1aj2pdaGHb115qm7GpvaqG3jpA7i1HtTCUMV1H97XDV13JwEH5em8OuVe/7Pz6AS3aclmPLK6bNYJ9nIr5x28wyiR8R8T+B4yW9CrhS0pdmPdY0rQu+ZUol9KYedPNIMQyXHX5d9bWidCH0NiXo5jF8LnUHYVd/LRWjwl/bw7ADb/slPrPzxBnsmTwR37RtFk/Yd4ekZVm1d+QkgBFxj6QfAidkr3HklHYsWKuCb5nV3jpDbxuCbh6D51lXCK5r6SOzFNQdeNsUdicZPM+6QnCZ4ddVX5tH28Jwl4Ouhzk30nMT8QEP0puI7+1D26wHLsqu4X0d8FgWaL8/Yd/+JH7rGJjEL9v2gWx4808AxwH3R8ROSU9Iej3wP4F3Af9l3pNrVfAtSx2htythd5y6Q3BZ1V9XfS1VdYXeroTdceoMwa78WlNMCo+pheIuB11rvnET8Um6MHv+UnpzFZwDbAF+BPzKpH2zQ4+bxO9ngLWSfgw8C7w3InZmz/1L4DPAvvQmtZprYivIGXwlnQX8UXYSl0fEuqHnDwQ+BxydHfM/RsSn523cQpRV7a069HY98I7Sf0+qDsC+7rd7mtDXlTHMuerQ2/WwO07/fakyAJcVfl31TVsT+rq8pgXNMoKxw6212aiJ+LLA2/89gPfl3Td7fNwkfp8FPjvmWLfSG/ZcmKnBd2BNptX0xlvfIml9RAxOa/0+4O6I+AVJhwKbJP1JRKQ1g9ECVRl6HXinq6MKXEb4ddU3TV3t66oMvQ68+VRdBXblt1u61tc5pNaj68OcE7/Ot7NelGOb59Zzyjq8/ppMgwI4QJKAFwM/AJ4ptKUTlFHtrSL0Ltm6+LmbLUyV71sqk5pZ6ZLv64qu9lYVep/83oEOvTOq6r2r+/puq1TyfZ2ZWRnyBN9xazUN+gTwKnqzbd0B/EZEPDt8IEkXSLpV0q2P/uAFTyejqtBr8/MXB1agzvV1ZXPgLU4V72XR4bfs2cdtZqX0dc/88IdltdfMrBB5gm+edZTeBNwGHAGcBHxC0ktesFPEZRFxckScvPTgPC9dvbJDr4NaOcp+T4v+76Ls9aZtJp3q68qs8Dnwlqdp4deSVEpft9f++xfdTmuorg9ztnTl+USWZz2nXwH+Mnq2AN8DKvlkX2SAKDP0OvCWr+z32EOeWy/pvq7I6lnZodfKVfYXCw6/rZd0X2fWFpfsOK3uJtiQPMH3ufWcJC2mtybT+qFttpLN1CXpMHprMN1XZEPLVnboteo4/NqMOtHXlRVqXOWtXhPebw93TlIn+jozs2FTZ3XOuZ7T7wGfkXQHvSE0HxhYg6mzmhR4D7h/eJTTeE+sGDVKKi11LYG0EJ7dOS3u62bXhAB2wHdnG3L+xMvTvka7rCWQPNNze7mvszJ5mLOlLNc6vjnWc3oIOLPYpk1X1DDnMqp4qYXehQTbeY+VUjBesnVx4eHX6/u2V6p9XVFVszKqvSmF3lnD7azHTCkUP/m9Ax1+LbdU+zqztvGyRmnJFXzbrK2ht8igW8Rr1xmGHX7N2hl6ywi6875+nWG4jPBbhM8++gbeufRrdTfDzDrups3H8saVW+puhtWo88G3aHWF3jqDbh6D7asjBJcRfs26qs7AW3fYnWawfXWE4KLDr6u+ZpaXhzlb6tL+BDFBEcOci672Vh16D7g/nrs1SV3tLvrvU8R/P21e1kjSwZJukLQ5+7l0zHZnSdokaYuktdP2l7S3pCsl3SHpHkkfrOqc6lDEMOciq711hN4Dvvui525NUle7i/4beZZnMzNrg2Z9ikhYlaG3iWF3nKrPJYVh6B2yFtgYESuBjdn9PUhaBHwSOBtYBbxN0qop+78VWBIRPwW8Bvg1SSvKPBHrqTL0NjXsjlP1+dQ9DN3MusXV3vG8rFE62vGJYgZFVnurCFNNre7mVeX5Ffn38vJGE60Brsx+vxI4d8Q2pwBbIuK+iNgFXJ3tN2n/APaXtBewL7ALeLzoxrdFUdW6qoJUm8LuOFWdY5F/s3n/O/KyRmZmVjdf4zunskNvW4PuJP1zLvNa4C5f8/v4M/ssYIj1Fw+RdOvAA5dFxGU5dz4sIrYDRMR2SS8bsc1y4IGB+9uA103Z//P0QvF2YD/gNyPiBznbZIlqe9gdpX/OZV4LnOqEV2ZmXeLZndNQ2yeNR3fvV9dLF1alKzP0trm6m1fZ51/U32/e/54Sv853Z0ScPHDbI/RKulHSnSNua8YdcMiobzem/eFPAXYDRwDHAP9G0k/mfL1OaUK1twsV3mnKPv+i/n6+1tcmeXaf4KlXPuUhrx3kv7k1RSM/baQQFMoOvdZT9hcAvuZ3PhFxRkScMOJ2LbBD0jKA7OfDIw6xDThq4P6RwEPZ7+P2fztwXUT8OCIeBv4OOLn4s6tfCsNDyw691lP2FwC+5teq5ABsqbpp87F1N8Fq1LlPHUVUe8sKS67yjlfme1PE39PX+o60Hjg/+/184NoR29wCrJR0jKTFwHnZfpP23wqcpp79gdcD95bQ/kYrojpXVlhylXe8Nr83KXyRY9VyADZ7nie5ql87/+/aQA68+fh9apR1wGpJm4HV2X0kHSFpA0BEPANcBFwP3ANcExF3Tdqf3izQLwbupBecPx0Rt1dzSt1RZui16cp4n4r4m3q48wsVsHTbWyXdJelZSScP7XOipK9nz98haZ+yz6cMDsDt5b+rNUmnJrdKtdrrMLcwB9wfhU981eXJrsoSEY8Ap494/CHgnIH7G4ANC9j/SXpLGtkYKYYTB96FO+C7Lyp84itPdlWK/tJr67JAuxb4wOAGA0u3raZ3icctktZHxN30vsT7JeC/Du2zF/A54J0R8W1JLwV+XPrZlGgwJO1zbyMzvNlcPMlVvfxJZAGKDr0e2jy7Mt63ef++Hu5sbVF0tdehd3YpVn5T/GKlZnMt3RYR90TEphH7nAncHhHfzrZ7JCJ2F934urgKbGZVa9ynkRQmtiqCA+/82vTFQVv+u7bitOV6SIfe+bX5ut+EHCLp1oHbBQvYd4+l14C8S7ctn3LcVwAh6XpJ35L0WwtoU2M4AFvV6p7gytf61qczQ53nrcYVWe1tS1hLRZFDn+cd8nz/tkNZceT3C2mL2SzmrcYVWe11WCtWkUOfuzLk+fFd++T9N7EzIsbODi/pRuDwEU9dnLMpsyzdthfwM8BrgR8BGyV9MyI25nzNRumHXw+Bbg5/YWFN05ngO482h94D73t65n0f+8klBbZkPmVc92vWNW0OvUs3zf6F1qPHpbPsWRnX/c7iy1uP48yjR43Oneyzj76Bdy79WgktKldEnDHuOUk7JC2LiO0zLt02zjbgbyJiZ/Y6G4BXA60Mvn0OwGZWFgffCtUdeucJuXmOV3cQLir8eqIrs/nUHXrnCbl5j1dnGC4q/Hal6luB/tJr68ixdBvwIL2l294+5bjXA78laT9gF/BzwMeKanTqPBGWlemmzcfyxpVbant9T3JVj04E33mGORdV7a0r9BYddhfyWnUHYbOumWeYc1HV3rpCb9FhdyGvl1JF2GqxDrhG0nvorTP+Vugt3QZcHhHnRMQzkvpLty0Crugv3SbpF4H/AhwKfFHSbRHxpoh4VNJ/pheaA9gQEV+s/OwS4CpwejzM2ZqoE8G3blWH3irD7iT9dlQZgFOo+vo6X+uqqkNv1WF3nH47qgzAKVR9Zx3u3DYFLN32BeALY479OXpLGhkOwNYurvpWL62LsKaoeubbMtbsLdOB9z2dTOgd1G9XVW2re0i5WdMUvXxR2ZZu2pVM6B3Ub1dVbat7SLlZXTwTtLWFZ3iulv+vWbIqQliqgXeUqtpaxPte9RcfXtLI+pq4lFEVISzVwDtKVW0t4n1v2hcfZn39AOwQXK22vN91L2tk1Wt98J31+t4iQk9VobeJmhJ+ZzXv8llmCzXvMkbzKDv0NinwDmtqu82axgHYmiq1qq+ksyRtkrRF0toRz0vSx7Pnb5f06mn7SjpY0g2SNmc/l2aPv1TS/yfpSUmfGHqdr2bHui27jVojfUFaH3zbqklV3nGacA5NG+5utlCpV/vaEBzLDu51Vn3r/MLFbBQHYLPZSVoEfBI4G1gFvE3SqqHNzgZWZrcLgE/l2HctsDEiVtJbkq0fip8C/i3w/jFNekdEnJTdRi0VtyAOviUps9qYelhcqDLPx9f7mpWrzGpvG0LvoNTDb1WaOJTfmscB2PJIZbhzQlXfU4AtEXFfROwCrgbWDG2zBrgqem4GDsrWMJ+07xrgyuz3K4FzASLihxHxP+gF4NJ5VucR5q3ylRW22hZ4Bx1439Ne/sisYvNWe8sKW20LvIOWbtrl5Y/MKuSZoIvlLxPK0wu/V8y07xNP75M3xB8i6daB+5dFxGUD95cDDwzc3wa8bugYo7ZZPmXfwyJiO0BEbF/AsOVPS9oN/AXw+xExV8hqzlfEM2jTdZZtDr19ZQ19nveLCA93ttS1abhpm0NvX1lDn+f9IiL1Ye9m83AF2MZJpepbkZ0RcfLA7bKh50etCTr8QXrcNnn2XYh3RMRPAT+b3d45x7GAlgffOpRR7e1C6B2UYvidRZu+eDEbVka1twuhd1DXztcsBQ7AZhNtA44auH8k8FDObSbtuyMbDk32c+r1uhHxYPbzCeBP6Q2lnouD75DUqntdC719XT1vs6qkVt3raggs+rzruNa3TSMOrDscgG1Qx6q+k9wCrJR0jKTFwHnA+qFt1gPvymZ3fj3wWDaMedK+64Hzs9/PB66d1AhJe0k6JPt9b+DngTvnPbnGBN8mrHFadFWx6+Gv6POf5++T2hciZnUqOlx1NfT2pRR+U/tCxKxsDsD5+X1qv4h4BrgIuB64B7gmIu6SdKGkC7PNNgD3AVuAPwbeO2nfbJ91wGpJm4HV2X0AJN0P/Gfg3ZK2ZTNBLwGul3Q7cBvwYPZac/HkVonqeujt86RXZu3W9dDb50mvzOrlSbDMeiJiA71wO/jYpQO/B/C+vPtmjz8CnD5mnxVjmvKafC3OrzEV34Wa5frKeap6RVZ7HXqtDcYtVj5iu3GLnb9V0l2SnpV08tA+J0r6evb8HZJa80kl9aVeiqz2OvSaWWr6FWBXN7vHw53br7XB19qjyC8CUh/u3IQh/QswbrHy50xZ7PxO4JeAm4b22Qv4HHBhRBwPnAr8uKRzSN4s11d6OGuaivwioEnr+pqlygHYrF38f8YCuNpbvqa+Lx2f2XnkYuVDxi52HhH3RMSmEfucCdweEd/OtnskInYX3Xh7IVd7y5fC++IvRsz25PDbHa76tpuv8U1IU8Nd0xxwf/DEilFLjXXDrl17LSSQT1vofJI8i5XnWSh92CuAkHQ9cChwdUR8JGebLAEphLsuOOC7L+KJlz9byWt9eetxnHn0qO+prCsOWPIUb1y5pbXBwdcAd8dNm4/ljSu31N0MK4GDb6buWXsdeqfzRFe12BkRJ497UtKNwOEjnro45/FnWex8L+BngNcCPwI2SvpmRGzM+ZpmSfNEV9ZkbQ6/0N0A7Kq3tUGucWvjJp8Z2uZUSbdlk838TbHNTFfRSxjZZP6CIC0RcUZEnDDidi35FivPs1D6qH3+JiJ2RsSP6M0e+Or5z6Ybfd2sw1iLGubsam8+bX+fUp/Ere3K7uu6UC3z9b/t1uYvb7ps6ieZKZPP9Lc5CLgEeHM22cxbi29qfk27rtJhrnqzfmFR98iAhsmzWHmehdKHXQ+cKGm/bKKrnwPunrexTezrmqbtYS5Fs35h4et826uqvu6NK7c4AJtZUvL8H3Hs5DMD3g78ZURsBYiIUZUds0L4i4LGGLlYuaQjJG2AyYudS/pFSduAfwJ8Mbuml4h4lN5C57fQW9T8WxHxxQLa677OkuIvCqwklfZ1XQi/4ADcRq76tk+ea3zzTD7zCmBvSV8FDgD+KCKuGj6QpAuACwAOXLbvLO0txaxVvCKGOacW4hbf88DY53a96qixz5kNG7dYeUQ8BJwzcH/cYudfAL4w5tifo7ekUZFK6euWLV9UcDOfN8tSRrMoYphzSiFu3zsfnPj8P56wvKKWmNWilL5u/8P3H/uCbb/ud1BXrwFuK0901S55gm+eyWf2Al5D70PuvsDXJd0cEd/ZY6febLCXASw//iBfHJuASUF32rZ1BuEiJrrq+uzO9gKl9HXHn7jYfV0CpoXdSdvWGYSLmOiqytmdrRFK6esOedUhE/u6LoVf6AVgh1+ztOT5Gj/P5DPbgOsi4ocRsRO4CfjpYprYXnVWexff88CCQm9Zx+iCpl1z3mGt7+u6eN3mvnc+uKDQW9YxzBJSW1/XtcqZhz+3Q5e+sGm7PME3z+Qz1wI/K2kvSfvRGzJzT7FNTUtTZ3MuI6zWFYDr+uLAE1y1lvu6ktQxzLmMsFpXAE5pmPgkVQ29T42kgyXdIGlz9nPpmO1GzqQs6aOS7pV0u6QvZBNLDe53tKQnJb2/oCbX2td1LfyCA3AbOPy2w9TgO27yGUkXSrow2+Ye4DrgduAbwOURcWdRjbzhH15Z1KE6rexw6uqvNVkKfV2KilrGqEplh9OuVH+7OEJgRmuBjRGxEtiY3d/DlJmUbwBOiIgTge8AHxza/WPAl4pqbAp9XVdmfB7m8GtWrzzX+I6cfCYiLh26/1Hgo8U1rd2qrFZWGUgX3/NAoybB8nW+Nsh9XfGqrFZWGUj3vfNBT4JlfWuAU7PfrwS+CnxgaJvnZlIGkNSfSfnuiPjywHY3A2/p35F0LnAf8MMiG5xKX9e1637Bk181mSe6ar7mfZVvC1JHFbbK10xtVmwzq0cdVdgqX3PeLxCaWLlvkMMiYjtA9vNlI7YZNZPyqG9O/gVZdVfS/vQC9O8W2trEdDVIuPrbTF37oqZtclV826zN12vWOfS4aZVfM2uuOoceu/Kbtt1PL8o7ZPsQSbcO3L8sm7EYAEk3AoeP2O/inE2ZOpOypIuBZ4A/yR76XeBjEfGk1O6RSV2s/IKrv03lym9ztS74VjGD7rwTW3WlSunwa9ZtTZmUaV4Ov62wMyJOHvdkRJwx7jlJOyQti4jtkpYBD4/YbOJMypLOB34eOD0i+h8yXge8RdJHgIOAZyU9FRGfyHtSTdLV8Ate+sisKh771FKpTDSVSjvMum6WiYqaMDw2lYmmUmmH1WI9cH72+/n0ZkQeNnYmZUln0RvS/OaI+FF/h4j42YhYERErgD8E/n1bQ29fl6toHvrcLF39kqbp0v9UYwvWtbDZlQq6me2pa2GzKxX0BloHrJa0GVid3UfSEZI2wPiZlLP9PwEcANwg6TZJlw6/QJc4/FpTOPw2T+uGOlt6Uh/y7JmdzawIHvLcTRHxCHD6iMcfAs4ZuP+CmZSzx6d+eo6ID83Xymbp+rBn8HW/TeHrfZvFFd+KlV2d7Fq1ty5tnhTNrAm6Vu0twixD172Wr9Wl62Eiteqvg/h4Xf2SpokcfK0SDuRm03320Tfk3vbLW48rsSXz6+qwXAdyMytKauHXxnP4bQYH3xZxuDSzLnC4NOuGrld9weG3SRx+0+fga63gCa7MLBVlBvOuVtKtuxx+HX6bxOE3bQ6+CzTvGr5d5oq0mZmZLZTDbxrh19f55uPwmy4H35ZwqDQzM7O2cvhNI/xaPg6/aXLwNTOzxvD1vWbd5fBbf/h11Tc/h9/0OPiaWSkkHSzpBkmbs59Lx2x3lqRNkrZIWjvw+Ecl3SvpdklfkHTQ0H5HS3pS0vtLPhUzMzOzBWti+B33uWzgeUn6ePb87ZJePW3fSZ8JJX0w236TpDcNPP4aSXdkz31ckuY9NwffCnkCJuuYtcDGiFgJbMzu70HSIuCTwNnAKuBtklZlT98AnBARJwLfAT44tPvHgC+V1HazubgybVYOV31d9W2aJoXfKZ/L+s4GVma3C4BP5dh35GfC7PnzgOOBs4BLsuOQHfeCgdc6a97zc/A1s7KsAa7Mfr8SOHfENqcAWyLivojYBVyd7UdEfDkinsm2uxk4sr+TpHOB+4C7Smm5mZkly+HX4bdpGhR+x34uG7AGuCp6bgYOkrRsyr7jPhOuAa6OiKcj4nvAFuCU7HgviYivR0QAVzH6c+SCOPia2SSHSLp14HbBAvY9LCK2A2Q/XzZim+XA4Mxs27LHhv0LsuqupP2BDwC/u4C2mJmZmdXmps3HphCAp32uy/O5bNw2k/Yd95lw0rG2TWnHgu017wHMrFm0SyzZujjv5jsj4uSxx5JuBA4f8dTFeZsz4rE91gyTdDHwDPAn2UO/C3wsIp4s4HIPMzNroDeu3JJCiKjVU698qtbK6z737lN75bmJbtp8bOGjFl70lPL+tzDxcx05PpdN2CbPvnlfb5ZjTeXga2Yzi4gzxj0naYekZRGxPRuy8vCIzbYBRw3cPxJ4aOAY5wM/D5yeDXUBeB3wFkkfAQ4CnpX0VER8Yr6zMSvOP54w9xfTZjaFw2/9HH5nU0b4LcjEz2VTtlk8Yd9xnwnHHWsbA5e4jWnHgnmoc4Ue+8kldTfBrErrgfOz388Hrh2xzS3ASknHSFpMb4KD9dCbGZDekOY3R8SP+jtExM9GxIqIWAH8IfDvHXrNzKyLUgidvt53Nol+aTP2c9mA9cC7stmdXw88lg1fnrTvuM+E64HzJC2RdAy9Say+kR3vCUmvz2ZzfhejP0cuiIOvmZVlHbBa0mZgdXYfSUdI2gCQTV51EXA9cA9wTUT0J6z6BHAAcIOk2yRdWvUJWHpcSTWzQYlWzTrH4Xc2iVz3+5xxn8skXSjpwmyzDfQmGN0C/DHw3kn7ZvuM/EyYPX8NcDdwHfC+iNid7fMvgcuz1/kuBazk4aHOLbHrVUex+J4Hpm9oVpGIeAQ4fcTjDwHnDNzfQK8THd5u6v8JIuJD87XSzMyazkOe09APvylUoZsmpaHPoz6XRcSlA78H8L68+2aPj/xMmD33YeDDIx6/FThhIW2fxhVfMzMzM7OGSi1ouvo7G395Uz4H3wV6YoVnkZ3VrlcdNX2jGfn6aTNLRZnDsR89LveM7Gadkkq1zHocfi1FDr4tUmawNDNLha/zNTNL3z737uMAbElx8LVKtC2UP330rrqbYC30zqVfy73tmUdvKrEl83Nl0syq5qpvmhx+LRUOvtZ5Hr5u1jypVn1TbdesXnzMY3U3wRri0L2fqLsJljBXfy0FDr4VK/ta1BQrqym2ycysaKmH3ide/mzdTbCWe+9hX6m7Ca76Js4B2Ork4NtCXQuantjKrJtSD5rWDZIOlnSDpM3Zz6VjtjtL0iZJWyStHXj89yTdnq1X/mVJR2SPr5b0TUl3ZD9Pq+qczMrmAGx1cPC1UnUthJulapYhq02oEKYSfqtoh6+bTtZaYGNErAQ2Zvf3IGkR8EngbGAV8DZJq7KnPxoRJ0bEScBfA7+TPb4T+IWI+CngfOCzpZ5FQVKo+lpzOABblRx8WyqFwJlCG8ysPl0JaqmEb6vNGuDK7PcrgXNHbHMKsCUi7ouIXcDV2X5ExOMD2+0PRPb430fEQ9njdwH7SPIQpxw83Ll5HICtCg6+M5h3MqSqhubWGTwdes2sKnUGT4deAw6LiO0A2c+XjdhmOfDAwP1t2WMASPqwpAeAd/B8xXfQLwN/HxFPF9bqErnqa7PqB2CHYCtD64LviiO/v6Dt274sTR0BtMrXnPdLBM/obNYOdQTQKl+zK9Xzoi16Gg747oum3oBDJN06cLtg8DiSbpR054jbmpxNGfU/m3jul4iLI+Io4E+Ai4Ze+3jgD4BfW8i5d52rvs3nAGxFa13wtReqMoi60mtmg6oMbFUG0aZVeptwvXbNdkbEyQO3ywafjIgzIuKEEbdrgR2SlgFkPx8ecfxtwOD/II8EHhqx3Z/Sq+6SHe9I4AvAuyLiu/OdYrVc9bWiOABbURx8a1L1TMS7XnVU6aG0K6G37aMEzAY1LTD94wnLSw+lTQu9Vrr19CafIvt57YhtbgFWSjpG0mLgvGw/JK0c2O7NwL3Z4wcBXwQ+GBF/V07TzZrDw6BtXrmC77gp+Eds91pJuyW9pbgmpqmpQ2TLCKdVhOpRmrKM0UKH31t93Ne1RxnhtIpQPUpdw5wXOhP4mUdvKqklyVsHrJa0GVid3UfSEZI2AETEM/SGMF8P3ANcExF39ffPhk3fDpwJ/Eb2+EXAscC/zZY6uk3SqOuHF6yqvq7uqq+HO7eXA7DNYq9pGwxMwb+a3lCdWyStj4i7R2z3B/Q6dcvhsZ9cwoH3VT9PRT+kLr7ngSlb5jtOUzX1ywsrh/u68jx63GKWbqp+pMRgSN33zgcLOY7ZsIh4BDh9xOMPAecM3N8AbBix3S8PP5Y9/vvA7xfX0h73de3T5QA4eO5PvfKpGltiTTA1+DIwBT+ApP4U/HcPbfevgL8AXltoC600w8E1TxBOJew2pdprjdL6vu7FxzzGk987sO5m1GKhITiVsFtEtbdpw9WtdJX2de897CtcsuO0eQ5hlotDsE2TJ/iOmoL/dYMbSFoO/CJwGhM6yGyWxAsADly2b+5Grj78Xm74h1fm3r5J6qr6jpJKqDWrSSl93bLliwpvaN+ZR2/iy1uPK+34fU+8/Nn+zLczq6vqO0oqodasJqX0dYeX2NeZLVQ/BDsA26A8n2QmTsGf+UPgAxGxe9KBIuKy/oyJ+y9NZ2mGWScr8lDZerjaayUppa9berDnELTZeAkjK0kpfd1BB6cZfH2db7d5QiwblOcTWZ4p+E8GrpZ0P/AW4BJJ5xbRwC5wkKverF9aeEbn/CQdLOkGSZuzn0vHbDdykhVJvyfp9mxCly9LOiJ7fLWkb0q6I/tZ1Bg693Ulc5Cr3qzDnBc6sZU1SuV9Xd2TXLWZA11+DsCWJ/iOnYK/LyKOiYgVEbEC+Dzw3oj470U31qztXxKsPvzeuptQpLXAxohYCWzM7u9hYJKVs4FVwNskrcqe/mhEnBgRJwF/DfxO9vhO4Bci4qfoLR3y2YLa675uAl8nWq22f0nwzqVfq7sJXea+zjrNVeDumhp8x03BL+lCSReW3cBZVLl8TFHDndse6Irg96hx1gBXZr9fCZw7YpvnJlmJiF1Af5IVIuLxge32JxuKFxF/n82WCnAXsI+kuf/jaGJfN4u6K3ltD3RmqetKX2eWhwNwt+SZ3GrkFPwRcemYbd89f7Oq9/TRu1iytd4PZClNdNVmVV6b3YI1fA+RdOvA/csi4rKc+x4WEdsBImL7mPUnJ06yIunDwLuAx4B/OmL/Xwb+PiIK+YfThb4uBSlNdJWior4cqLJK3+E1fBupjr6uztmd37hyCzdtPraW1y6TA1txPBlWN+QKvmZ1S6Ha25brexc9DQfcPzyPyVg7I+LkcU9KuhE4fMRTF+c8/sRJViLiYuBiSR+kV6H4dwOvfTy9NSbPzPlaNqciZne2yVKoiNc9KsDMrC5eEqnd/AmmAEVWEFMIeKkp8j3xTNzFiogzIuKEEbdrgR2SlgFkPx8ecYg8k6wA/Cm96i7Z8Y4EvgC8KyK+W9T5NFFTK20pBLzUFPme+Jpss3Zztbd8HgbdPg6+CXL4fZ7fi0ZbT2/yKbKf147YZuwkK5JWDmz3ZuDe7PGDgC8CH4yIvyun6fWpYtKfeSp6RQYqh1+zbvHsztZEngyrPRx8B8wzlLXoSqIDX/Fc7a3cOmC1pM3A6uw+ko6QtAHGT7LS31/SnZJupzec+Teyxy8CjgX+bbbU0W1jrh+2BnD47fH7YGaWPgfgZmvtNb4rjvw+9287tO5mzKXrk12lFP7bcn1vlSLiEeD0EY8/BJwzcP8Fk6xkj//y8GPZ478P/H5xLbWFKvpa365PdlV06J2nKu/re83S5+BVP0+G1Uyu+BaojIpiSuGvSkWfdx3V3hbM6GwtllrA6WrFsw3n3dTrzK0eHu5sbdK1YdCSDpZ0g6TN2c+lY7Y7S9ImSVskrc2zv6QPZttvkvSmgcc/LOkBSU8Ovca7JX1/YPTfr05rv4PvkBQre10Lv107X7MmKmPypDaEwIUo43w9qZXZaG9cuaXuJhSiKwGriToSgNcCGyNiJbAxu78HSYuATwJnA6uAt0laNWn/7PnzgOOBs4BLsuMA/BVwypj2/HlEnJTdLp/WeAffgpVVWexCGHzsJ5eUcp7z/k1S/DLEbFCbKm5dCb8pht7URgGYmTVRy6vAa4Ars9+vBM4dsc0pwJaIuC8idgFXZ/tN2n8NcHVEPB0R3wO2ZMchIm6OiO1FNL4xwXf14ffW3YTatTn8tvnc8vJ/41a1eYNOWdXFNoffR49b3OrzM7PytDRItVqCAfgQSbcO3C5Y4P6H9UNo9nPU5KLLgQcG7m/LHpu0/6R9JvllSbdL+ryko6Zt3NrJrWD2Ca6ePnoXS7bO/sHkiRXigPtj5v0naeOEV2WG3rqqvb6+12w+/XDYpkmvygy8TRriXMWSXZa29x72FS7ZcVrdzTCrzGD4LWNCrEX/CC+9e3eeTXdGxMmTNpB0I3D4iKcuztmcUR++pwWjWfb5K+DPIuJpSRfSqyBP7FhaHXzrVHb4BRofgMuu8nr5IrPyFT3D87C2zPicepV31up/m4bZm6UssaqhzaHsEDyviDhj3HOSdkhaFhHbJS0DHh6x2TZgsPp6JPBQ9vu4/SftM66djwzc/WPgDyZtDw0a6ly1JlzXWdY1sWVrarvNUjZrACnius6yq41NHh5cRdubVO01M7PnNfB64PXA+dnv5wPXjtjmFmClpGMkLaY3adX6KfuvB86TtETSMcBK4BuTGpIF5743A/dMa7yDb4mqqjg2KUhW1c4i3vsmfPlh7dTEoaBVhK8mBeCq2lrE++5JrczS1qBQZHNoyN95HbBa0mZgdXYfSUdI2gAQEc8AFwHX0wuj10TEXZP2z56/BrgbuA54X0Tszo79EUnbgP0kbZP0oexYvy7pLknfBn4dePe0xrd+qPOs1/kWpcwhz8NSHQJddSive4izr++1pnnxMY/x5PcOrLsZuaV8/W+VwdyVXrP2a0gYso7IhhefPuLxh4BzBu5vADbk3T977sPAh0c8/lvAb414/IPABxfQfFd8Jymq4ld1EEulAlxHO4p6r13tNVu4qoNYKhXgfjtSaMtCzVPt9fW9No/3HvaVuptgZh3T+opvKqqs/PYNhs6qqsB1Bu66K71mdTvz6E18eetxM+1bVNW37MmuRhkMnFVVgesOua72mrWfq71mxWpUxXfWdU7nGXpaZOWvzmDWr74O3lI85qyKfG/n+ZvP+t+a1/C1NqkzlA1WX4uswpZxzFkV9f762t5iSDpY0g2SNmc/l47Z7ixJmyRtkbR2xPPvlxSSDhl47IPZ9pskvanM8zAzaztXfCtWR+V3nBSGQxfBlV6zYhR5rW8dld9x6g6qRUql0jvrMOcmTtyWw1pgY0SsywLtWuADgxtIWgR8kt5kLtuAWyStj4i7s+ePyp7bOrDPKnqzoR4PHAHcKOkV/QlfrN1c7TUrXhqfShJX9PWeDmrFKfq99LW91nQpXXeZSkhriyLfT1d7C7UGuDL7/Urg3BHbnAJsiYj7ImIXcHW2X9/H6E3eMvjN+Brg6oh4OiK+B2zJjmMt59BrVo7OBN95Z9p1+E1PaqHXszlbkeqqjBUdiBx+i+H3cTaLngqWbto19QYcIunWgdsFC3iZwyJiO0D282UjtlkOPDBwf1v2GJLeDDwYEd/Ou4+ZmS2chzrXKKVhz03jLw7MylP08kYpDXtumjIC77xfbqQ0qqBAOyPi5HFPSroROHzEUxfnPP6o/2mFpP2yY5yZd5+cr9cI7z3sK1yy47S6m5EUV3vNyuPguwBPH72LJVuLvVbM4Xfhygi9HuJsbTLP7M5l6Qc4B+D8Ugy9XRURZ4x7TtIOScsiYrukZcDDIzbbBhw1cP9I4CHg5cAxwLcl9R//lqRTJuxjZmYz6NQnkCKGopYRkJ5YIVcwcyjrfSribzrPf1ue0dlSVFZA8pDdfPw+Ncp64Pzs9/OBa0dscwuwUtIxkhbTm7RqfUTcEREvi4gVEbGCXth9dUT8Q3bc8yQtkXQMsBL4RtknY/VxtdesXI0Lvm0OCQ6/45X13rjSWx4v8VGvIoajOvxW74mXP1va+1PE33Oe/65aOqMzwDpgtaTN9GZmXgcg6QhJGwAi4hngIuB64B7gmoi4a9JBs+evAe4GrgPe5xmd28uh16x8jQu+80q16tvn6u+emvB+eFKrsfpLfKwENmb39zCwxMfZwCrgbdkSHv3npy3xcRZwSXac1kkhKJQZfh2A91Tm++EhzuWJiEci4vSIWJn9/EH2+EMRcc7Adhsi4hUR8fKI+PCYY62IiJ0D9z+cbX9cRHyp/LMxM2uvzgXfopRdKWxC4CtTFefvam/pvMSHTeUAXP57UFTobemkVtYRN20+tu4mjOVqr1k1HHznUEVw6loArup8i/rbzVvtbcDQfS/x0WBFBZUqqoVdDMBVnLMrvWZmZj2NnNV59eH3csM/vHLm/Vcc+X3u33ZoIW0pY6bnUfphsK0zQFcZ7rte6V30dHDgfU/n3dxLfBhQ/BJH43Rh9ueqAn6RodfVXrNyuNprVp1GBt/UVBV+oX0BuOpqdpGh19f2eomPJihyaaOqwi+0LwBXXc1OrdKbwvXqZqlx6DWrVjs+Ucyg6NBSdRWxPyS4icOg62p71yu9NfASHwUoIjAUWa2rOlD1hwM3dRh0HW0v+m/kaq+ZmbVBpyu+RQ55hmorv4MGA2SKleAUwnnRobeIL04acH3vvNYB10h6D71Zmd8KvSU+gMsj4pyIeEZSf4mPRcAVeZb4kNRf4uMZvMRH5aqs/A4aDJCpVoLrDuipVXrNbDRXe82q19jgO+91vmWpK/z2jQqZVYfhFILuIFd66xERjwCnj3j8IWCPJT6ADVOOtWLo/oeBkcuB2GhFDnmG5wNWHQEYRgfMOsJw3UF3UBmht4hqr4c5m5lZChobfItSdNUX6g+/wyYF0VlDcWrhdpSyAq+v7bWqvXPp1/jso2+ouxkj1VX9HWVcCC0iEKcUcEdJNfSa2Qu52mtWj84HXygv/AJJBeBRmhBgZ5F66O3AMGdLUNFV376Uwu8oqYfWeXl4szXZew/7CpfsOK3uZphZB+T6GlzSWZI2Sdoiae2I598h6fbs9jVJP118U5vJw2yrl3rotXR1oa8rq4r34mMecwCrWJnvuau97daFvm7QTZuPrbsJz3G116w+U4OvpEXAJ4GzgVXA2yStGtrse8DPRcSJwO8BlxXd0FGKrJqVGWqePnqXA3AF/D7bPFLu64pWZqhx+K1Gme9zkf99+Pre9HSpr0uNQ69ZvfIMdT4F2BIR9wFIuhpYQ29GVQAiYvD/bDfTW1ezccoY8jyoKcOfm6aKsFvkFyMe5pyspPu6lK/zHVb3xFdtVvYXC670dkLSfZ1ZXi+9e/KCDo+sWlRRS6wp8gTf5cADA/e3Aa+bsP17gC+NekLSBcAFAAcu2zdnE6tVdviF9Ca/aqqqqrupDnF+y0u+xW/X3Yh2KaWvW7Y8zf/xlnW97yAH4OJUUUkvOvS62pusUvq6wxPt61Lham9+0wJtWcdxUG6/PMF31OxHI6cClvRP6XWQPzPq+Yi4jGy4zPLjDypkjZ0yljWqKvyCq7+zqHI4c6qh10pRSl93/ImLC1tPrOiqbxXhFxyA5+Gh41aCUvq6V524pNq1E63xigq4RZnUHofidsgTfLcBRw3cPxJ4aHgjSScClwNnZ+t3NloV4Rf2DHEOwZNVff1uGaHXw5yT1sm+rqrwCw7AC1F14PUQ507pZF9XJ1d7e1ILugsxru0OxM2SJ/jeAqyUdAzwIHAe8PbBDSQdDfwl8M6I+E7hrZyijKovVBd++1wFfqG6JqtypbeTku/rylJl+AUH4HHqqu6WEXo9zDlpne3rrFpNDrp5jTpHh+F0TQ2+EfGMpIuA64FFwBURcZekC7PnLwV+B3gpcIkkgGci4uTyml2dqsMvuApc98zMZYVeV3vT1pS+rqxJrqoOv7Bn0OtqCK5zKLOrvN3UlL6uLbpW7e1C2J2mzWFY0sHAnwMrgPuBfxYRj47Y7izgj+j1MZdHxLpp+0v6IL1LK3YDvx4R12ePXwcso5db/xZ4X0TslrQEuAp4DfAI8M8j4v5J7c9T8SUiNgAbhh67dOD3XwV+Nc+xylJW1RfqCb99wyGwrUG47rDb50pvtzWhrytTHeG3r0shOIXrdssMva72pq9LfV1Ka/i2mQPvZMPvT4OD8FpgY0Ssy9YAXwt8YHCDgSXTVtO7tOIWSesj4u5x+2dLqp0HHA8cAdwo6RURsZteOH5cvW/hPg+8FbiaXkh+NCKOlXQe8AfAP5/U+FzB1+oNv4PaEoRTCbp9ZQdeV3utSGUubdQPRHUFYHhhMGx6EE4h6A5ypdesGm2v9jrszq7BQXgNcGr2+5XAVxkKvkxeMm3c/muAqyPiaeB7krZkx/l6RDyebb8XsJjnJ+NbA3wo+/3zwCckKSLGTrTXquBbZtUXng9HKQTgvlEBMrUwnFrIHeYqr9kL1Vn9HTYqOKYahlMLucPKDr2u9pq1nwNv8Rr0nh4WEdsBImK7pJeN2GbSkmnj9l9Ob83wwX2W9+9Iup5eEP4SvZC7x+tkl3A8Ru8SjZ3jGt+q4FuVVKq/40wLmkUH49SD7ThVBV5Xe60MZVZ9+1IKv8MmBcyyQ3Hq4XYUV3nNqtXGam+DwlnnLPrRLg745oN5Nj1E0q0D9y/LliV7jqQbgcNH7HtxzubkXjIt7z4R8SZJ+wB/ApwG3DDL67Qu+JZd9e1LsfqbV1ODapEceq0Nqgq/UO/Q54VqYjAtU1Wh19Ves3Zy4G2VndMmqouIM8Y9J2mHpGVZtXYZ8PCIzSYtmTZu/6nLrEXEU5LW0xvifMPAPtsk7QUcCPxg0rm9aNKTTVVl2PAw2WZZceT3/Tczm8GZR29y1bBhqvybdTn0SjpY0g2SNmc/l47Z7ixJmyRtySZ1GX7+/ZJC0iHZ/b0lXSnpDkn3ZDOeWgO0pdr70rt3O/TasPXA+dnv5wPXjtjmuSXTJC2mN2nV+in7rwfOk7QkW2ptJfANSS/OAjJZuD0HuHfEsd4CfGXS9b3Q0uBbNYep9NXxN3K116pQdeBwAE6f/0aV689SuhLYmN3fw8Asp2cDq4C3ZbOY9p8/it4MqFsHdnsrsCQiforech2/JmlFWSdRl0t2nFbasT2j82wceG2CdcBqSZvp9Vn9ZYqOkLQBetfbAv0l0+4BromIuybtnz1/Db0JsK4jW7II2B9YL+l24Nv0KsT9Gej/G/DSbCKsf82IvndY64Y691U15HlQk4c/t1VdX0g49FqVqhjyPKyJQ6Dbrq6w2+Vqb2beWU4BPgb8FntWTwLYP6ty7AvsAh7Hktbkaq/Drk0TEY8Ap494/CF61dj+/RcsmTZp/+y5DwMfHnpsB/DaMds/Re8LwtxaG3yhnvALe4Yth+Dq1V19d+jtmXeR84Hn3w98FDg0InZK2hu4HHg1vT7sqoj4DyWeSiPUEX7BATgFdVZ3Uw+9L/rHH7PvncVM+DLBXLOcSnoz8GBEfLu3TOVzPk8vHG8H9gN+MyImXr9mNiuHXuuCVgdfqC/89rkKXJ26Ay849A6Zd5HzqcP/JO0H3C3pzyLi/tLPKHF1hV/YM3w5BJcvhaHMqYfeBZo44UtZs5xmfdjFwJkjnj8F2A0cASwF/lbSjf2qsaWnidVeB17rktYHX6g//IKrwGVJIez2OfS+gIf/1aDO8NvnEFyOFMJuX8tC71QlznL6cuAYoF/tPRL4lqRTgLcD10XEj4GHJf0dcDLg4GuFcOi1rulE8IU0wm/fcFhzEM4vpaA7yKF3JA//q0kK4bfPIXg+KYXdvq6F3hz6M4uuI8csp8CD9GY5fXs2octzfaOk+4GTs8s6tgKnSfocvb7u9cAflngeNocmVXsdeK2rOhN8Ia3wO8hBeLxUg+6gpoVePbWLxfc8MH3DnonXvXn4X7pSCr99wyHOQfiFUgy6gxx6R1oHXCPpPfQuy3gr9GY5pTdvwTkR8Yyk/iyni4ArBmY5HeeTwKeBO+n1lZ+OiNvLOom28YzOozn0Wpd1KvhCuuF30Kiw14Uw3ISQO6xpoXcGE6978/C/tKUYfgeNCnldCsOph9xhDr2jzTvL6dA+KwZ+f5IFzlhqNolDr3Vd54IvNCP8DpsUCpsUipsYbkfpQOAtgof/JSD18DtsXBhsciBuWsAd5sBrNlnqw5wdeM16Ohl84fng0rQAPEreMFlWQG5LmM3LoTc3D/9LRD+4NCkAD8sTHusIx00PtdM49Jo1m0Ov2fM6G3z72hSAp+laQC2aA+/CePhfeppW/V2otofQKjnwmuWTcrXXoddsT50Pvn1dCsC2MA681iZtqP5aeRx4rQ08sZVDr9koDr5DHICtz4HX2swB2AY58JotXKrVXodes9EcfMdwAO4mh13rmsHA4xDcPQ68Zu3i0Gs2noPvFINByCG4nRx2zXpcBe4Gh12zdnLoNZvMwXcBHILbo+lh9y0v+VbdTbAWGw5GDsLN57BrVqyUhjk78Jrl4+A7o+Hg5CCctqYHXbM6eTh08zjoWhNcsuO0wo/pia3MbBwH34KMClYOw/VwyDUrz6hA5TBcPwdds+q42mvWTA6+JXIYLpcDrlkaHIar44BrZn0OvWYL4+BbsWlhzcH4eQ62Zs01LaA5GI/ncGtm0zj0mi2cg29iZgl7TQjLDrFmNihvuGtLQHaYNWuHFIY5O/SazcbBtwUcKrvFMzpblzgwmlleXZjYyqF3ugO++eDcx3jiNcsLaImlxsHXzMzMzGyKuqu9Dr3FhNqiXsfhuHkcfM3MzMzMEtbF0FtVyJ3VqPY5DKfNwdesQTzM2czMrHp1Vnu7EHpTD7l5OQynzcHXzMzMzCxBbQ29bQm6eQyeq0NwvRx8zRrC1V4zM7PRujCxVdN1KeyOM/weOAhXy8HXrAEces3MrE0u2XFa3U3Ira5hzm2o9jrsTtZ/fxyAq+Hga5YwB14zM7PuaXLoddhdOL9n1XDwNUuMw66ZmVl3NTX0OrxZ6l6UZyNJZ0naJGmLpLUjnpekj2fP3y7p1cU31axd3vKSb428tYWkgyXdIGlz9nPpmO1G9i+SPiTpQUm3ZbdzBp47UdLXJd0l6Q5JhYxDc19nZgvlvq7dqh7m3MTQe8A3H3To7YgC+rux+0v6YLb9JklvGnHM9ZLuHLj/bknfH+g7f3Va+6dWfCUtAj4JrAa2AbdIWh8Rdw9sdjawMru9DvhU9tOsUdoUPBOwFtgYEeuyTm8t8IHBDXL0Lx+LiP84tM9ewOeAd0bEtyW9FPjxvI11X2dmM3JfVzNPbFU9B93Omre/G7m/pFXAecDxwBHAjZJeERG7s2P+EvDkiPb8eURclLfxeYY6nwJsiYj7she+GlgDDHaQa4CrIiKAmyUdJGlZRGzP25A2cGgy28Ma4NTs9yuBrzLUOZKvfxl2JnB7RHwbICIeKai97uvMbBbu61rK1d4XcuDtvHn7u3H7rwGujoinge9J2pId5+uSXgz8a+AC4Jp5Gp8n+C4HHhi4v40Xfus3apvlwB4dpKQL6DUa4OnfPuGLd5K+Q4CdeTb87ZIbMkXudtbM7SzWcQvd4fFnvn/9dTs+dUjOzfeRdOvA/csi4rKc+x7W/5AUEdslvWzENtP6l4skvQu4Ffg3EfEo8AogJF0PHEqvo/xIzjZNUlpfd9JPbGtVX1czt7NYTWnngvs6gMd//PD11z34X/L0d+7rpm8zta97/Yr7F9DXXZF/02I15b95t7NYTWnnbH3droevv+5//WHZfR3M39+N2385cPPQPv2prn8P+E/Aj0a81i9LeiPwHeA3I+KBEds8J0/w1YjHYoZtyN7YywAk3RoRJ+d4/Vq5ncVyO4s11HnlEhFnFfj6NwKHj3jq4ryHGPFYv+/4FL3OLni+0/sX9PqtnwFeS68T3CjpmxGxcQFNX2hbFrKN+7oSuZ3FalI7Z9mvqP7Ofd3IbdzXlcjtLFaT2jnLfg36bLegfSSdBBwbEb8pacXQ838F/FlEPC3pQnoV5InrpOUJvtuAowbuHwk8NMM2ZtYyEXHGuOck7egPjZO0DHh4xGZj+46I2DFwrD8G/npgn7+JiJ3ZcxuAVwPzfhh0X2dmI7mvc19n1hVl9nfAuP3H7fNPgNdIup9ebn2ZpK9GxKlDl3/8MfAH084tz6zOtwArJR0jaTG9C4/XD22zHniXel4PPNa160DM7AXWA+dnv58PXDtim7H9S9Yh9v0i0B9Cdz1woqT9sslffo7J18nl5b7OzGbhvs7MumKu/m7C/uuB8yQtkXQMvYn1vhERn4qIIyJiBb0RMN+JiFPhBX3nm4F7pjV+asU3Ip6RdBG9DngRcEVE3JWVlImIS4ENwDnAFnrDcX5l2nHJhsY0gNtZLLezWCm3cx1wjaT3AFuBtwJIOgK4PCLOGde/ZPt/JBviEsD9wK8BRMSjkv4zvY41gA0R8cV5G+u+zu0smNtZrJTb6b6uJ+W/0SC3s1huZ7FSb+e8/d3I/bM+6Bp6X+49A7yvP6PzBL8u6c3Z9j8A3j2t8epN2GdmZmZmZmbWTnmGOpuZmZmZmZk1loOvmZmZmZmZtVrpwVfSWZI2Sdoiae2I5yXp49nzt0t6ddltmrGd78jad7ukr0n66RTbObDdayXtlvSWKts38PpT2ynpVEm3SbpL0t9U3casDdP+7gdK+itJ387amec6p6LbeIWkhyWNXB8xlX9DXee+rtp2Dmznvi6HJvR1WTvc3yXOfV217RzYzn1dDu7rbKKIKO1G74Lm7wI/CSwGvg2sGtrmHOBL9NZvej3wP8ts0xztfAOwNPv97FTbObDdV+hNTvGWFNsJHETvAvajs/svS7Sd/w/wB9nvh9K7eH5xxe18I70lLO4c83zt/4a6fnNfV307B7ZzX1dMO2vv67LXdn+X8M19XfXtHNjOfV0x7XRf1+Fb2RXfU4AtEXFfROwCrgbWDG2zBrgqem4GDtKe01NXYWo7I+JrEfFodvdmeutLVS3P+wnwr4C/YPTaWlXI0863A38ZEVsBIqKOtuZpZwAHSBLwYnod5DNVNjIibsped5wU/g11nfu6YrmvK1Yj+jpwf9cA7uuK5b6uWO7rbKKyg+9y4IGB+9uyxxa6TdkW2ob30PsWpmpT2ylpOb11AC+tsF3D8ryfrwCWSvqqpG9KeldlrXtennZ+AngVvUW07wB+IyKeraZ5uaXwb6jr3NcVy31dsdrS10Ea/466zH1dsdzXFct9nU00dR3fOWnEY8PrJ+XZpmy52yDpn9LrIH+m1BaNlqedfwh8ICJ2977MqkWedu4FvAY4HdgX+LqkmyPiO2U3bkCedr4JuA04DXg5cIOkv42Ix0tu20Kk8G+o69zXFct9XbHa0tdBGv+Ousx9XbHc1xXLfZ1NVHbw3QYcNXD/SHrfsCx0m7LlaoOkE4HLgbMj4pGK2jYoTztPBq7OOsdDgHMkPRMR/72SFvbk/bvvjIgfAj+UdBPw00CVHWSedv4KsC4iAtgi6XvAK4FvVNPEXFL4N9R17uuK5b6uWG3p6yCNf0dd5r6uWO7riuW+ziYr8wJiesH6PuAYnr/I/Pihbf5P9rx4+xtltmmOdh4NbAHeUHX7FtLOoe0/Qz2TIOR5P18FbMy23Q+4EzghwXZ+CvhQ9vthwIPAITW8pysYPwFC7f+Gun5zX1d9O4e2d183fzuT6Ouy13d/l+jNfV317Rza3n3d/O10X9fhW6kV34h4RtJFwPX0Zlq7IiLuknRh9vyl9GaoO4de5/Mjet/EVCpnO38HeClwSfat2zMRcXKC7axdnnZGxD2SrgNuB54FLo+IkVO619lO4PeAz0i6g17n84GI2FllOyX9GXAqcIikbcC/A/YeaGPt/4a6zn1dLe2snfu64rm/S5v7ulraWTv3dcVzX1cPRXi4uJmZmZmZmbVX2bM6m5mZmZmZmdXKwdfMzMzMzMxazcHXzMzMzMzMWs3B18zMzMzMzFrNwdfMzMzMzMxazcHXzMzMzMzMWs3B18zMzMzMzFrt/we1weJY93GZHwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotter_feat = Plotter()\n", "plotter_feat.plot(pinn_feat)" ] }, { "cell_type": "markdown", "id": "c5f03a63", "metadata": {}, "source": [ "### The problem solution with learnable extra-features" ] }, { "cell_type": "markdown", "id": "2d2f1bf1", "metadata": {}, "source": [ "Another way to predict the solution is to add a parametric forcing term of the Laplace equation as an extra-feature. The parameters added in the expression of the extra-feature are learned during the training phase of the neural network. For example, considering two parameters, the parameteric extra-feature is written as:\n", "\n", "\\begin{equation}\n", "\\mathbf{k}(\\mathbf{x}, \\mathbf{y}) = \\beta \\sin{(\\alpha \\mathbf{x})} \\sin{(\\alpha \\mathbf{y})}\n", "\\end{equation}\n", "\n", "The new Poisson problem is defined in the dedicated class *ParametricPoisson*, where the domain is no more only spatial, but includes the parameters' space. In our case, the parameters' bounds are 0 and 30. " ] }, { "cell_type": "code", "execution_count": 10, "id": "9ca67fc4", "metadata": {}, "outputs": [], "source": [ "from pina.problem import ParametricProblem\n", "\n", "class ParametricPoisson(SpatialProblem, ParametricProblem):\n", " bounds_x = [0, 1]\n", " bounds_y = [0, 1]\n", " bounds_alpha = [0, 30]\n", " bounds_beta = [0, 30]\n", " spatial_variables = ['x', 'y']\n", " parameters = ['alpha', 'beta']\n", " output_variables = ['u']\n", " domain = Span({'x': bounds_x, 'y': bounds_y})\n", "\n", " def laplace_equation(input_, output_):\n", " force_term = (torch.sin(input_['x']*torch.pi) *\n", " torch.sin(input_['y']*torch.pi))\n", " return nabla(output_['u'], input_).flatten() - force_term\n", "\n", " def nil_dirichlet(input_, output_):\n", " value = 0.0\n", " return output_['u'] - value\n", "\n", " conditions = {\n", " 'gamma1': Condition(\n", " Span({'x': bounds_x, 'y': bounds_y[1], 'alpha': bounds_alpha, 'beta': bounds_beta}),\n", " nil_dirichlet),\n", " 'gamma2': Condition(\n", " Span({'x': bounds_x, 'y': bounds_y[0], 'alpha': bounds_alpha, 'beta': bounds_beta}),\n", " nil_dirichlet),\n", " 'gamma3': Condition(\n", " Span({'x': bounds_x[1], 'y': bounds_y, 'alpha': bounds_alpha, 'beta': bounds_beta}),\n", " nil_dirichlet),\n", " 'gamma4': Condition(\n", " Span({'x': bounds_x[0], 'y': bounds_y, 'alpha': bounds_alpha, 'beta': bounds_beta}),\n", " nil_dirichlet),\n", " 'D': Condition(\n", " Span({'x': bounds_x, 'y': bounds_y, 'alpha': bounds_alpha, 'beta': bounds_beta}),\n", " laplace_equation),\n", " }\n", " \n", " def poisson_sol(self, x, y):\n", " return -(np.sin(x*np.pi)*np.sin(y*np.pi))/(2*np.pi**2)\n" ] }, { "cell_type": "markdown", "id": "63a847d5", "metadata": {}, "source": [ "Here, as done for the other cases, the new parametric feature is defined and the neural network is re-initialized and trained, considering as two additional parameters $\\alpha$ and $\\beta$. " ] }, { "cell_type": "code", "execution_count": 11, "id": "afa18873", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.265163986679126e-06" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "param_poisson_problem = ParametricPoisson()\n", "\n", "class myFeature(torch.nn.Module):\n", " \"\"\"\n", " \"\"\"\n", " def __init__(self):\n", " super(myFeature, self).__init__()\n", "\n", " def forward(self, x):\n", " return (x['beta']*torch.sin(x['alpha']*x['x']*torch.pi)*\n", " torch.sin(x['alpha']*x['y']*torch.pi))\n", "\n", "feat = [myFeature()]\n", "model_learn = FeedForward(layers=[10, 10],\n", " output_variables=param_poisson_problem.output_variables,\n", " input_variables=param_poisson_problem.input_variables,\n", " extra_features=feat)\n", "\n", "pinn_learn = PINN(poisson_problem, model_feat, lr=0.003, regularizer=1e-8)\n", "pinn_learn.span_pts(20, 'grid', ['D'])\n", "pinn_learn.span_pts(20, 'grid', ['gamma1', 'gamma2', 'gamma3', 'gamma4'])\n", "pinn_learn.train(5000, 100)" ] }, { "cell_type": "markdown", "id": "e91e8be7", "metadata": {}, "source": [ "The losses are saved as for the other two cases trained above." ] }, { "cell_type": "code", "execution_count": 12, "id": "26581f50", "metadata": {}, "outputs": [], "source": [ "with open('tutorial1_files/poisson_history_learn_feat.txt', 'w') as file_:\n", " for i, losses in enumerate(pinn_learn.history):\n", " file_.write('{} {}\\n'.format(i, sum(losses)))\n", "pinn_learn.save_state('tutorial1_files/pina.poisson_learn_feat')" ] }, { "cell_type": "markdown", "id": "5e018d4d", "metadata": {}, "source": [ "Here the plots for the prediction error (below on the right) shows that the prediction coming from the **parametric PINN** is more accurate than the one of the basic version of PINN." ] }, { "cell_type": "code", "execution_count": 13, "id": "81c94c8f", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotter_learn = Plotter()\n", "plotter_learn.plot(pinn_learn)" ] }, { "cell_type": "markdown", "id": "ed030a0f", "metadata": {}, "source": [ "Now the files containing the loss trends for the three cases are read. The loss histories are compared; we can see that the loss decreases faster in the cases of PINN with extra-feature." ] }, { "cell_type": "code", "execution_count": 14, "id": "55497e4e", "metadata": {}, "outputs": [ { "data": { "image/png": "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zju1TqCRrkit0P2YlRlpuXa/NvmqN7DyATi1I+zHMT4v6Nv5U+43Gi55LKJdvV4vK1euZMGCBSE/f+CBB7jkkku45ZZbWnw2YMAAzj//fF5++WUWLlwY8vgLLriAv/zlL9x7771s2bIFt9uNx+Phk08+YebMmU32feyxx9i5cyfbtm3D4XCwdetWvvzyS3bt2kX//v2ZMWMGn376Keeff36T4+644w7+8Y9/MGTIED7//HPuvvtuPvroIxYtWsTVV1/NU089xapVq/j8888xmUw8/vjjrF27lpSUFEDJ9Z+fn89vfvMbAEaOHMnDDz8MwE033cTy5ctbtO8f//gHq1atCpTz4IMPMmfOHF566SWqqqqYMmUKF110USDFhMViYf/+/Vx//fVs2bKFxx57jD//+c8sX74cIOAqC0Vw/fbs2cMf/vAHPv30U4xGI3fffTevvPIK3/72t8Me31fopYIfB0C21adNvtLoMMG5dGbOnMmtt94acr+8vDymTJkS1v3w4IMPcvnll3PppZeG/HzixIls3boVh8OB2WxmwoQJbNmyhfXr1wcs/9aYMmUKWVlZAIwbN46ioqImgu90Ovnss8+45pprAtvUcYVRo0Zx0003sXDhQjZs2IDJZAp5Dr1e32TZxLVr1/LHP/6Ruro6KioqGDVqVNgOTWX16tW8++67gZW6XC4XR48epX///txzzz1s27YNvV7Pvn372mxza/Vbs2YNW7duZfLkyYDyPaalpbW7zN5IjxT8ziZPUy38LKuX9dWa4J/ztGGJ13dRfhXVhx8JDz74IFdffTUXXHBBi88GDx7MuHHjeP3110MeazQayc3N5V//+hfnnXceY8aMYe3atRw8eDCifEJmsznwv16vb+E+8vv9JCQkhG3Ljh07SEhI4PTp02HPYbFYAimoXS4Xd999N1u2bCE7O5tf/epXuFwujh07FhD9u+66i7vuuqtJGVJK3nzzTYYNG9Zk+69+9SvS09PZvn07fr8fiyX0okUGgwG//8yypS7XGXdtcP2klHznO9/R1gIIQe/04Tda+P0tHs2lo3FWGD58OCNHjgy4H5rz0EMPtboG7QUXXMCf//xnLrjgAmbOnMk//vEPxo0b12KWuN1ub3c++Li4OPLy8gI59qWUbN++HYC33nqL8vJy1q1bx7333ktVVVWb51GFNiUlBafTydKl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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", " \n", "df = pd.read_csv(\"tutorial1_files/poisson_history.txt\", sep=\" \", header=None)\n", "epochs = df[0]\n", "poisson_data = epochs.to_numpy()*100\n", "basic = df[1].to_numpy()\n", "\n", "df_feat = pd.read_csv(\"tutorial1_files/poisson_history_feat.txt\", sep=\" \", header=None)\n", "feat = df_feat[1].to_numpy()\n", "\n", "df_learn = pd.read_csv(\"tutorial1_files/poisson_history_learn_feat.txt\", sep=\" \", header=None)\n", "learn_feat = df_learn[1].to_numpy()\n", "\n", "import matplotlib.pyplot as plt\n", "plt.semilogy(epochs, basic, label='Basic PINN')\n", "plt.semilogy(epochs, feat, label='PINN with extra-feature')\n", "plt.semilogy(epochs, learn_feat, label='PINN with learnable extra-feature')\n", "plt.legend()\n", "plt.grid()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }