{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PDE session 4\n",
    "## Parabolic PDE, explicit and implicit methods using python"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEWCAYAAABG030jAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABbqADAAQAAAABAAABFgAAAAC6i9fzAAAla0lEQVR4Ae2dCZQU1bnHvxFkERAImyg7grIpCIIgsgURgk8FBEEDgo8XlWfUHDVK8AkqScTlaGLcokEhJCCIEgMIqGwKIoIsEXTYF5FNAVmFGaZffYU9ds9091R1V01Xdf3uOT1dde+tu/xuzb9vfXWXrJDhBAcBCEAAAn4hMOYsv5SUckIAAhCAwBkCCDd3AgQgAAGfEUC4fdZgFBcCEIAAws09AAEIQMBnBBBunzUYxYUABCBgWbhPnz4tEydOlFGjRsny5ctjktu0aZPs3r07ZhieEIAABCDgDAHLwn3PPfdIgwYN5MYbb5SOHTvKhg0bokpw5MgRadmypYwcOTLKnxMIQAACEHCWgCXhnjZtmrRv394U7JMnT0pOTo4sXbo0qiRLliyRY8eOSatWraL8OYEABCAAAWcJWBLuqVOnysCBA82cZ86caX43a9YsqiSLFi0yz7t27RrlzwkEIAABCDhLwJJw33TTTVKiRAnRSZaTJk2Siy66SC6//PKokixYsECqVKkiLVq0iPLnBAIQgAAEnCVgSbjVrq1OzSPbt2+XwYMHR5Xi6NGjsnLlSunUqZNkZWVFhXECAQhAAALOErAk3OEsp0+fbh6GhTzsr/bt3NxcwUwSJsI3BCAAAfcI2BLu+fPnS506dUxTSWSRFi5caJ526dIl0ptjCEAAAhBwgYAt4c7OzjaH/BUshwp31apVpXnz5gWDOIcABCAAAYcJ2BLusmXLSvny5aOKsHHjRlmxYoV07twZ+3YUGU4gAAEIuEPAlnDrkMBly5bJDz/8YJZmy5YtMmDAANO+jZnEnQYiVQhAAAIFCWTZ2UhBJ9889thjsnXrVjnvvPPk3HPPlV27dslrr70m69atk6ZNmxZM39J5Xl6enHWWrd8QS+kSCQIQgEAGEhhjWbhVXHWoX+RwPx3X3ahRIylVqpSsX78+aT5jx46Vhx9+OOnruRACEIBAgAhY2wFHF4+qWbOmdO/ePYqNzqLcvHmzPPLII1H+dk50XPiYMWPM8eF2riMuBCAAgaASsGSfeO+992Tfvn1Su3btfE6HDx+We++9V4YMGZI/HT4/0MbBhAkTRFce1G8cBCAAAQgUTcCScLdt21Z02rvastXt2LFDevXqZX7Gjx9fdC5xYqipJSzY+q3nOAhAAAIQSEzAso1b1yJ5//33RW3d+hk0aFDKKwEuXrzYHEYYLqIuVKXT5nEQgAAEIBCXwJiScYMKBOh0dqentL/xxhtRueg5wh2FhBMIQAAChQhY7nEXujJFD127W4cU6gJVYaeTe/bs2SPlypULe/ENAQhAAALRBKyNKom+xpkzXbAqUrQ1VT0PL2TlTC6kAgEIQCDzCFh6OelGtcNmkvBIlfB32N+NPEkTAhCAQCYQSItw69htXZhK1z4JLxGr33qu/hqOgwAEIACB2ATSItzhoX99+/Y1p81r0XT6vJ5HDhGMXWR8IQABCASbQFqEe+LEiSb1oUOHRtEPn4fDowI5gQAEIAABk0BahHv27Nny+OOPS7du3cyetu5fqT1uPVd/DcdBAAIQgEBsAmkR7saNG5uLSumKgEeOHJHPPvvM/NZzXWxKw3EQgAAEIBCbQFqEO3ZR8IUABCAAASsEEG4rlIgDAQhAwEMEEG4PNQZFgQAEIGCFAMJthRJxIAABCHiIAMLtocagKBCAAASsEEC4rVAiDgQgAAEHCMyYMcOBVEQsL+vqSG4kAgEIQCBABHJycmTFihXy5ZdfyqRJk+TTTz8VXRk1VUePO1WCXA8BCEAgDoFTp07JunXrzLkp7du3jxPLvjfCbZ8ZV0AAAhCwRED3Fhg+fLh07NhRSpQoYekaK5EQbiuUiAMBCEDAQwQQbg81BkWBAAQKE9A9bp988kl56qmn5Nprr5Xc3Nz8SN9//725afm3336b7xeEA15OBqGVqSMEfExg/PjxpmA3aNBARo4cKWvWrJHWrVubNZozZ47oRuYVKlRIuYa6+5aum2TH6VLUbdu2tXOJI3ERbkcwkggEIOAWgezsbNNOrEPpSpYsKQ0bNszPav78+XLFFVdI6dKl8/30YNmyZeZLwTJlysgNN9xgaR/bli1bSuXKlaPSKeqkfv36RUVxJRzhdgUriUIAAk4ReOCBB8yk/v73v5tmkUqVKuUnrTtmDRo0KP9cD5544gnzReD9999v7qbVp08fefPNN4sUZf1BiPxRiErUYyfYuD3WIBQHAhCIJlC9enVz7LOu0z9w4MD8wN27d8uGDRuka9eu+X779u2TP/3pT3LfffdJVlaW1KtXz+yRP/vss/lxMuGAHncmtCJ1gECGE/joo49Ex0T37Nkzv6bhfWt1fPTBgwelVKlSoqaT888/X3Rt/7C78MIL5fnnn5fHHnss7BXz+y9/+Yt8+OGHMcNieeoPwx133CE9evSIFeyqH8LtKl4ShwAEnCCwbds2qV27tlSsWDE/ucWLF0ubNm1MwX7llVdk8ODBovEK2rt1E/IdO3bkXxfvYNiwYaJmFTtOnwbS4RDudFAnTwhAwBYBtT0fP37c3Exce7o6G3HevHny85//3ExHzSZq+9ZeuYZHOu19q39RTifL6Mctp0MWtRy661eqo2AQbrdaiXQhAAHHCFx99dUyYsQIufvuu0VNH+ecc47MnDlTRo0aJY8++qj079/fzEvFO3Kct3qqWEb21B0rlMWEtNy6Zsn+/fvNYY233367+aJUhxKGf3gsJpUfDeHOR8EBBCDgZQJjxowpVLy33347yk+H9OnLyUi3d+9eUf90uRdffNHxrH+y4DueNAlCAAIQKF4CV155pdkb37hxY37G+sJSe7mZ5NLe4966davJU2c/hUKhTGJLXSAAgTgEunTpIvpx2ulCTjpR55lnnpFWrVrJrl27pHfv3ub4b6fzSmd6aRdufQusbtGiRebHPOEPBCCQ8QTcEG6Fpi8y3TBPeKlB0i7cYRh169aVoUOHhk/5hgAEMpCAjr3WThouNQKeEW6d4RTr5UNq1eNqCEDASwT0fxzhTr1FeDmZOkNSgAAEMoWAsc6J3HSTyHvviRjLyXrVJS3cN998s+g0VBwEIACBjCFw771iLH4ixuBwkQsuEHnwQTE2jPRc9ZIS7lmzZsnkyZPNAeWeqxEFggAEIJAsAWMZWGMBEl0XVoyFvsWYhinGLBmRdu1EXnpJ5NChZFN29DrLNu6TJ0/Kb3/7W3OqKTYqR9uAxCDgLgHtPRq2ZS84LYV+zB6tlstrTocoGi9QCzljSr0sXy7G9E0xxi0XCi5uD8s9bh0f2alTJ7nzzjtlypQpjm58WdyVJj8IBIrA6NFnxEYFJ82fMUZZjD6s6He6yxIzf+1lhxmpicTorErNmj/1uI1VCL3gLPe4deeJfv365ZdZl1DEQQACEMgoAj/8IPL66yJvvCGyc6fIkCFirBUrcvHFnqqmZeH2VKkpDAQgAAE3CDz3nMjq1WdMOcbCVoZpwY1cUk4T4U4ZIQlAAAIZQ+Chh3xRFc8It05918H5OAhAIHMJ6MxJXOoEXBFuXR/Xrghv377dXFc39SqRAgQgAIHMJuCKcI823hjrx4rT9UkmTJggnTt3dmW1MCtlcDvO9OnTo17sup0f6UPA6wTcWmDK6/V2qnyuCLedwtWvX9+Mrjs1WxV7O+l7Ie7YsWPl4YcfFh2Zg4MABCCQKgHL47gLZqT7uunYblzRBHTPuzwPr3tQdA2IAQEIeIlA0l3AY8eOeakeni4Lwu3p5qFwEPAdgaR73L6raRoLrE8mp0+fTmMJyBoCEMgkAgh3MbQmPe5igEwWEAgQAYS7GBpbhRsHAQhAwCkCKIpTJBOkc+rUKUaUJOBDEAQgYI8Awm2PV1Kxc3Jy5Oyzz07qWi6CAAQgUJAAwl2QiAvn+mKSMdwugCVJCASUAMLtcsNrbxvRdhkyyUMgYAQQbpcbPDc3F+F2mTHJQyBoBBBul1tcX0yWLVvW5VxIHgIQCBIBhNvl1tYZpmV0A1IcBCAAAYcIINwOgYyXjAp3uXLl4gXjDwEIQMA2AYTbNjJ7FyDc9ngRGwIQKJoAwl00o5RiINwp4eNiCEAgBgGEOwYUJ70QbidpkhYEIKAEEG6X74Pjx49L+fLlXc6F5CEAgSARQLhdbu0DBw5IpUqVXM6F5CEAgSARQLhdbu1Dhw4h3C4zJnkIBI0Awu1yix88eFAqV67sci4kDwEIBIkAwu1yayPcLgMmeQgEkADC7XKjI9wuAyZ5CASQAMLtcqNj43YZMMlDIIAEEG6XG11HlVStWtXlXEgeAhAIEgGE2+XW3rNnj1SrVs3lXEgeAhAIEgGE2+XW3rt3r9SoUcPlXEgeAhAIEgGE28XW1unu6lgd0EXIJA2BABJAuF1s9H379kn16tVdzIGkIQCBIBJAuF1sdYTbRbgkDYEAE0C4XWz8/fv3S82aNV3MgaQhAIEgEkC4XWz1nTt3Itwu8iVpCASVAMLtYsvv2rVLLrjgAhdzIGkIQCCIBBBuF1sd4XYRLklDIMAEEG4XGx/hdhEuSUMgwAQQbhcb/+uvv5ZatWq5mANJQwACQSSAcLvY6vS4XYRL0hAIMAGE26XGP3r0qOTl5bH7jUt8SRYCQSaAcLvU+lu3bpU6deq4lDrJQgACQSaAcLvU+tu2bZN69eq5lDrJQgACQSaAcLvU+trjrl+/vkupkywEIBBkAgi3S61Pj9slsCQLAQgIwu3STYBwuwSWZCEAAYTbrXsA4XaLLOlCAAL0uF26B7Zv3y4NGzZ0KXWShQAEgkwA4Xah9XU5V3WVK1d2IXWShAAEgk4A4XbhDti4caM0atTIhZRJEgIQgIBg43bjJkC43aBKmhCAQJgAPe4wCQe/EW4HYZIUBCBQiADCXQhJ6h4Id+oMSQECEIhPAOGOzybpEIQ7aXRcCAEIWCCAcFuAZDfKpk2bpHHjxnYvIz4EIAABSwQQbkuYrEfSDYLLly8v5557rvWLiAkBCEDABgGE2wYsK1HXr18vTZs2tRKVOBCAAASSIoBwJ4Ut/kUId3w2hEAAAs4QQLid4ZifypdffilNmjTJP+cAAhCAgNMEEG6HidLjdhgoyUEAAoUIINyFkKTmgXCnxo+rIQCBogkg3EUzshxj7969UrJkSalWrZrla4gIAQhAwC4BhNsusQTxV69eLS1atEgQgyAIQAACqRNAuFNnmJ/C2rVr5ZJLLsk/5wACEICAGwQQbgepItwOwiQpCEAgLgGEOy4a+wEIt31mXAEBCNgngHDbZxbzipycHMnOzpbmzZvHDMcTAhCAgFMEEG6HSH711VdSv359KV26tEMpkgwEIACB2AQQ7thcbPuuWbNGWrVqZfs6LoAABCBglwDCbZdYnPgrVqxAuOOwwRsCEHCWAMLtEM+VK1dK69atHUqNZCAAAQjEJ4Bwx2djOSQvL09WrVqFcFsmRkQIQCAVAgh3KvR+vHbDhg1So0YNqVixogOpkQQEIACBxAQQ7sR8LIViJrGEiUgQgIBDBBBuB0Ai3A5AJAkIQMAyAYTbMqr4EXVESdu2beNHIAQCEICAgwQQ7hRh5ubmyueffy5t2rRJMSUuhwAEIGCNAMJtjVPcWLo+ic6YrFChQtw4BEAAAhBwkgDCnSLNTz/9VNq1a5diKlwOAQhAwDoBhNs6q5gxEe6YWPCEAARcJIBwpwgX4U4RIJdDAAK2CSDctpH9dMHhw4dl165dbFf2ExKOIACBYiCAcKcAecmSJeZokqysrBRS4VIIQAAC9ggg3PZ4RcX++OOPpWPHjlF+nEAAAhBwmwDCnQJhhDsFeFwKAQgkTQDhThLdqVOnRGdMdujQIckUuAwCEIBAcgQQ7uS4ia5PctFFF0n58uWTTIHLIAABCCRHAOFOjptgJkkSHJdBAAIpE0C4k0S4dOlSueqqq5K8mssgAAEIJE8A4U6Cne54s3DhQunUqVMSV3MJBCAAgdQIINxJ8Fu9erXUrFnT3PUmicu5BAIQgEBKBBDuJPAtWLBAunbtmsSVXAIBCEAgdQIIdxIM1UzSpUuXJK7kEghAAAKpE0C4bTI8ffq0LF68mB63TW5EhwAEnCOAcNtkqbvd1KlTR6pWrWrzSqJDAAIQcIYAwm2T46JFi6Rbt242ryI6BCAAAecIINw2Wc6ZM0e6d+9u8yqiQwACEHCOAMJtg+WJEyfkk08+ocdtgxlRIQAB5wkg3DaYqplEd3MvV66cjauICgEIQMBZAgi3DZ7z5s2THj162LiCqBCAAAScJ4Bw22CKcNuARVQIQMA1Agi3RbTffPON7N69W1q3bm3xCqJBAAIQcIcAwm2R69y5c+Waa66Rs84CmUVkRIMABFwigApZBPvuu+9K7969LcYmGgQgAAH3CCDcFtjqNmXz58+Xnj17WohNFAhAAALuEkC4LfDVRaVatGghVapUsRCbKBCAAATcJYBwW+A7a9YszCQWOBEFAhAoHgIItwXOM2fOlGuvvdZCTKJAAAIQcJ8Awl0E4+zsbNGlXNVUgoMABCDgBQIIdxGtMH36dLnuuuuKiEUwBCAAgeIjgHAXwfqdd96RPn36FBGLYAhAAALFRwDhTsB6586dsnXrVnZzT8CIIAhAoPgJINwJmGtvW80kJUqUSBCLIAhAAALFSwDhTsAbM0kCOARBAAJpI4Bwx0F/4MABWbVqlbk+SZwoeEMAAhBICwGEOw72t956y5ziXqpUqTgx8IYABCCQHgIIdxzuU6ZMkYEDB8YJxRsCEIBA+ggg3DHY79mzxzST9OrVK0YoXhCAAATSS6BkerP3Zu5Tp06V66+/XkqXLu3NAlIqCEAgJgF9N/XMM89ImTJlJC8vT77//nu5//775fzzz48Z36+eCHeMllMzySOPPBIjBC8IQMCrBI4cOSJXXXWVPP/889KtWzezmGvWrDHnYSxevDijxBtTSYG7cMeOHbJhwwbp3r17gRBOIQABLxMYN26cVK9ePV+0tayXXnqpdOjQQX73u995uei2y4ZwF0D2z3/+UwYMGCAlS/IwUgANpxDwLIFQKCSvv/66tG3btlAZ1U/Nn8eOHSsU5lcPhLtAy40fP15uvfXWAr6cQgACSkDNEV999ZWoUHrJbdmyRXRD72rVqhUq1nnnnScnTpyQlStXFgrzqwfCHdFyy5Ytk6ysLGnXrl2EL4cQgIASWLJkiTz33HPy5ptvyuDBg6Og6Lo++gJQBTQdLpxvhQoVCmV/zjnnmH6bN28uFOZXD+wBES03YcIEetsRPDiEQJiA7rs6bdo0U7jV7PCHP/xBJk2aFA4W3SXqu+++K/IF4A8//CAjRowQTc+Oa968uTz00ENxLzl06JAZFmtdobBfOE7cRHwUgHD/2FgnT540exJr1671UfNRVAgUDwHdBeqGG24wM/vXv/4lrVq1isp4wYIF5pOqDsNL5DRch+fp/5sdV7Vq1YTRdbMTdfrEXNCFzTrhOAXD/XiOcP/YanpjtmnTRmrVquXHdqTMEHCVQKdOnczNso8ePSozZsyQp59+Oio/3VD7V7/6VZRfvJOmTZvGC0raPzznQsduF3Rhwc6k5SsQ7h9b+a9//asMHTq0YJtzDgEIGATCPV7t4Ghv+cYbb8znsn79etm3b1/UMLz8wGI6CL+UVFNMQRf2C8cpGO7Hc4TbaDXdLOHzzz+Xd999149tSJkhUGwE5s6dK61bt44avbFo0SJzpqKOl87NzTU/8UwmKvojR460bSpp0qSJ3HXXXXHrqTZwNZMcPHiwUJy9e/eafs2aNSsU5lcPhNtoOe1t6xDA8OOWXxuTckPAbQI6FLCgfVtnJaqZUf9/dI/WBg0aFIoTLpeaK7S3btfGrUP6ErlKlSpJ+/btJdbIke3bt0vt2rUzasPvwAt3Tk6OOXBfbz4cBCCQmECVKlWiJqdt27ZN5syZI7fccot54fLly6Vv375xE9FesfbM3XD33XefOWJFTSPhHr++mJw9e7b85je/ifni0o1yFEeagRdufdGiL0saN25cHLzJAwK+JjBq1CgZPny4vPfee+ZknHXr1smTTz4pun69rvGj/0exRnYUR6X1B+M///mPDBs2TP785z+bTwA61V2fBu65557iKEKx5RF44X711Vfl9ttvLzbgZAQBPxNQc4T2qnXxposvvthcHkLro4s66exEtTWn040ePdqc2Tl58mTR0SS33XabXHbZZekskit5B1q49df5iy++kH79+rkCl0Qh4HsCTzwh8vbbIh99JEYX1qxOuXLlCpk7GjZs6Jmq6g+KfjLZBVq4dfquvqlmQalMvsWpW9IEDHOIYXMQWbEiX7STTosLHSUQWOHev3+/0ZF4WzZt2uQoUBKDQEYQ2LhRZMgQMcbIijGPPSOqlEmVCOwiUy+//LL079/fnA2WSQ1KXSCQMgFjBUC59loRNZMYNm2c9wgEssetQwBVuD/44APvtQglgkA6CehyrYMGiVx9tch//3c6S0LeCQgEssetC663bNlSdDYWDgIQiCCgW/YdPizGMoARnhx6jUDgetw6ROgJ4xEwcklKrzUK5YFAWgjo6BFjaWNjxwEx3tinpQhkao1A4FpHJwnUqVOn0HAma7iIBYEMJWAMizWW9xN5/30xFiLJ0EpmTrUCJdw6/VUXgNdhgDgIQOBHAgcOiFx3nRjbo4uxyAhYfEAgUDbuf//736KTB67WFy84CEBAjOmFYgyvOvPRl5I4XxAITI9bF1jXdQvGjRvni4ahkBAoFgIPPHDGnv3HPxZLdmTiDIHACPc//vEP0aUfe/fu7Qw5UoGA3wnonpHGNmTmy8izAvXw7feWk0AIt47bfsQY5jRx4kTfNxgVgIAjBHQau7HUqRibIBg9GkeSJJHiIxCIn1ndKEHHbF911VXFR5acIOBVArojTJ8+Iq+9Jsaaxl4tJeVKQCDje9zHjx83R5LoXnk4CASegPH0aYr2//yPyPXXBx6HXwFkfI9b1+ft2bNn3K2U/NpwlBsCSRH43/8V0W3A/u//krqci7xBIKN73Bs2bDC3JdNdqHEQCDwBY30eWbJE5NNPxdimJvA4/Awgo4VbtyvSrZaqV6/u5zai7BBIncDHH4vxhl7kk09EypdPPT1SSCuBjDWVqE1bd3f+9a9/nVbAZA6BtBP4+msxtlYXMYbEiod2qkk7Fx8XICN73EeM9YTvvPNOcyEpdrfx8d1J0VMnYOx4bk5n14k2zBhOnadHUsjIHrfOkOzVq5d07tzZI5gpBgTSREDX1NYhf/fdl6YCkK0bBDKux62bI/zLmA2mGwHjIBBoAs88I/LllyJLlwYaQyZWPqOE+7CxAPzw4cNl/PjxUrFixUxsL+oEAWsEdHenp54S+ewzkTJlrF1DLN8QyCjhHjZsmDG3oI90797dNw1AQSHgOIEtW0Ruvllk+nSR2rUdT54E008gY4T7pZdekq1bt8rkyZPTT5USQCBdBI4eFfmv/xJ57DEx1nhIVynI12UCGSHcnxhjU3URqeXLl0upUqVcRkbyEPAoAd3od/BgkY4dRe64w6OFpFhOEPC9cO/cudMYonqjufJf/fr1nWBCGhDwJ4HHHxfZt0/kzTf9WX5KbZmAr4VbX0bq+toPGGNUdfgfDgKBJfDuuyLGKpjm2to8dWb8beBb4T5q2PKuvPJKueaaa+Tee+/N+IaighCIS0CH/N12m8icOSI1asSNRkDmEPDlBBxdqrVChQryy1/+Up5++unMaQ1qAgG7BA4dOvMy8tlnRdq0sXs18X1KwFaPW1fbmzFjhixbtswUzh49esgtt9xSrFVX88iAAQNEh/49+OCDxZo3mUHAUwSMfVTlppvOTGnXl5K4wBCw3ONeuXKlXH755TJr1ixp27atlC1bVkaMGGEKaHHR2rx5s7Rr185cW/tvf/tbcWVLPhDwJoGRI0Vyc89MtPFmCSmVSwQs97hvvfVW06asq+6d9ePGojcZv/ZXGwvXDBw40LQ1u1RGM9kpU6aYtuyxY8easyPdzIu0IeB5Asb/g0ydeuZlZIkSni9ucRZQLQO/+MUvZMiQIaK6Vbdu3eLMvljystTjzs7OlnXr1pmmibBoa+m6du1q9oCnTZvmWmH3GvvjDRo0SB599FGzt69T2nEQCDSB1atF7rpLREeS/OxngUYRq/JTjR80fTrX3a90iHC3bt3M4cLHjh2LFd2XfpaE+4svvpCzzz5bOnToUKiSHY3B/m7sMLNr1y7zh6JZs2bSuHFjWbVqlbRu3bpQ/nhAIFAEvv32jE37lVdEWrQIVNWtVlZXB503b54x6/9mY5mWMrJgwQKz532esWXbbcbom8WLF0tIJyv52FkylRw4cMD4Yf+ZKd4F61q1alXR8FTd+++/L18bC77v3r1b9FFHJ9a0bNnSfNzRXv64ceNSzYLrIeBrAlmnT8utEybIdqMXucDoTIl+cIUI6IgzHcTQqFEjYwLpHfLWW2+ZeqJDiF9//XXz06BBA1PMfWtKMX55inQvvPBCqE6dOjHjGcPxQgagqLAxY8boz5nlT6VKlSzHtZMuca23Aay8z+ovxv/UTONj7BbJ/0sCBsYgCst8SpQoEXr88cdDp0+fjtIwj5+MttTjrlKlihzS8aIxnO42o73xSKe2Jf1YdQsXLpRFixZZir527Vqjo/GF+Rhk5QLiJ6YEH3/wafn559LR2Oj3HsNc2ch456RmACsuaO2rTLTHrS8n1WnPO9zjNj1+/BOIHrdhEzJ/wfbs2VPoh8hYRjWkn+Jymtcbb7xhOTviJ0YFH4/y6d8/FPrggzOF++STUKhq1VAoO9v8X+P+T9xm2ns2TK8hY45JyBi2nN/7Ll++fMiY/xEyOomhvLy8xIl4O3S0GumLdDk5OSGjVx168cUXo+J+9913ITVzvPrqq1H+bp0YNqqQ8WsaOnjwoKUsiJ8YE3w8ymf37pDxjxUKnTwZCu3aFQrVrBkKzZ4dor0St1c4VE0fRsfa/GRlZYWM0W+hCRMmmPzCcXz+PdrSqBLdcFeN/DpTUd/WGr9o5nAbnXJerlw56devX+RTiGvHOvlH1ycxfiws5UH8xJjg41E+ugGCrqmtrm9fkbvvFmMVNXM4LPf/GSyJ/urM6obGbvY6hFjX6J8/f745yEG1KlOcJRu3VlYnvqi9SEXa6IHLqVOnpHnz5qJ7PFauXLlYeKitSpdwteqIn5gUfDzKR+dF6Oa+t98uUqeOyEMPiTHkSvYb6/LcqH4WXdDaN4xFhw9v2rQpfJqZ33YfGXJzc0OrV68O7d+/3+6lKcU3FpYyzSRqnrHiiJ+YEnw8ykffI1WsGAo9+2wodMklodCRI6HQ738fyqtcOdTXsNdy/ydut4CEWhtVEvmTZQyfkUsvvTTSq1iOZ8+eLVdccUWhESzxMid+PDJn/OHjUT5qJtEtx/74R5EXXhDjn03kkktkzu9/L0feeYf7P3GzBSbUko3bCzSC9thHfRPfdRnLZ+JEEWM9IMNIK/LwwyIvvyxiCPZEY7YfZsLE90SgQv3waHHixAnj6bFiaN++fZaKS/zEmODjUT46gsQYDWF+jIltoVOnzILSXonbK4Ch9k0l6fhVmzt3rlx22WVSrVo1S9kTPzEm+HiUz5YtIv37izz/fNRONrRX4vYKYqjlUSXphKOrD/bXG9qiI35iUPDxKB/dnV0/BRztVQAIp/pc5m130piEoGaSWLM2Y5Wc+LGo/OQHn59YxDqCTywqP/l5jc9PJQvUkbUJOOn8gdMJPzqKpYbFTVCJn7i14AOfSAJ+vx8i6xKkY8+PKsnY0QNx7jLqGwfMj97wgU9iAgEJ9fIDhjE701wL5ZtvvrFUTOInxgQf+EQS8Pv9EFmXgB1721Ty4YcfStOmTaVmzZqWfkaJnxgTfOATScDv90NkXYJ27GlTCW/TE9+O8IFPJIGg3Q+RdQ/csVcfMXQpWWMDh9COHTssFZH4iTHBBz6RBPx+P0TWJYDH3jWV6AafF154odSuXdvSjynxE2OCD3wiCfj9foisSxCPPWsqYfRA4tsRPvCJJBC0+yGy7oE89uJjhi4da+weH9q2bZul4hE/MSb4wCeSgN/vh8i6BPTYm6YS3Ti4Xr16UrduXUs/psRPjAk+8Ikk4Pf7IbIuQT32pKkkaI991Dfxvx984JOYQABDvfaooTs0G9PbQ8bWQ5aKRvzEmOADn0gCfr8fIusS4GPvmUo+/vhjc8KNbvZpxRE/MSX4wCeSgN/vh8i6BPnYc6YSHosT347wgU8kgaDdD5F1D/Sxlx438vLyQsb09lB2dralYhE/MSb4wCeSgN/vh8i6BPzYW6aSpUuXijEMUBo3bmzpx5T4iTHBBz6RBPx+P0TWJejHnjKVBO2xj/om/veDD3wSEwhwqFceOfQxrlatWqH169dbKhLxE2OCD3wiCfj9foisC8ch75hKli9fLhUqVJAmTZpY+hklfmJM8IFPJAG/3w+RdeFYxDOmEh6LE9+O8IFPJIGg3Q+RdefYIOCVxw5jento7dq1lotD/MSo4AOfSAJ+vx8i68KxR0wlK1askNKlS0uLFi0s/ZgSPzEm+MAnkoDf74fIunB8hoAnTCVBe+yjvon//eADn8QECPWEqaRBgwahVatWWX4CIn5iVPCBTyQBv98PkXXh2CQwOku/+P2CAAQgAAHfEBjjCVOJb3BRUAhAAAIeIIBwe6ARKAIEIAABOwQQbju0iAsBCEDAAwQQbg80AkWAAAQgYIcAwm2HFnEhAAEIeIBASaMMYzxQDooAAQhAAALWCCz8f7uu8PwPZGkpAAAAAElFTkSuQmCC"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this exercise we are looking for the solution of a confined, unsteady couette flow. This problem is controlled by a parabolic PDE and is illustrated below. We consider the unsteady Couette flow, confined by two walls, which has the following governing equation:\n",
    "\n",
    "$$ \\frac{\\partial u}{\\partial t} = \\frac{\\partial^2 u}{\\partial y^2}$$\n",
    "\n",
    "The system we are looking at is described in the following picture, we are looking a fluid constrained between two rigid walls, one fixed and one moving with a constant velocity $u_0$. We are interested by the distribution of the velocity along the y axis within the time frame [0,0.4].\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "where we the following boundary conditions for the velocity $u$: \n",
    "1. $u = 0$ when $y=0$\n",
    "2. $u = u_0$ when $y=1$\n",
    "3. driven by the PDE when $0<y<1$\n",
    "\n",
    "In addition we have initial conditions for our problem where $u=0$ for $0<y<1$ at $t=0$"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this exercise, you have to:\n",
    "\n",
    "0. Discretize the PDE using the FTCS scheme (i.e forward in time and centered in space) and establish the explicit method.\n",
    "1. Import the necessary python modules\n",
    "2. Implement a function which solve the PDE using the FTCS scheme. As input we want the initial and boundary conditions as well as the number of points along the y axis and the number of time steps. The diffusion number $D$ (defined as $D = \\Delta t / \\Delta y^2$) will be computed inside this function, and we should then supply the timestep and the grid size in addition. This function should return the complete history of the velocity $u$ (i.e. a matrix). In this function you can use `for` loops to fill out $u$. \n",
    "3. Run the problem with 10 grid points along $y$ and 1001 timesteps $\\Delta t$ and plot the distribution of the velocity along $y$ for the timesteps 100, 500 and 1000\n",
    "4. Run the problem with 10 grid points along $y$ and 11 timesteps $\\Delta t$ and plot the distribution of the velocity along $y$ for the timesteps 1, 5 and 10. What can you observe?\n",
    "5. Define a new function where you solve the PDE problem using array slicing instead of for loops and repeat question 3.\n",
    "6. Discretize the PDE using the BTCS scheme and write it as an implicit method.\n",
    "7. Implement a function which solve the PDE using the BTCS scheme in its implicit form. The same inputs as in question 2 should be used.\n",
    "8. Apply this function to the questions 3 and 4.\n",
    "9. What can you comment on the implicit method compared to the explicit one? "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.9.10"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "072f120aa02d08ea61d001fa93115a43c81ff98089754e42d3890c56566da5f7"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
