{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PDE session 2\n",
    "## Elliptic PDE and direct solution using python"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this session we will use python to solve an elliptic PDE using a direct resolution method.\n",
    "\n",
    "We will determine the distribution of the temperature in a 1D bar where the  governing PDE is given as:\n",
    "\n",
    "$$ \\frac{\\partial^2 T}{\\partial x^2} = 0$$\n",
    "\n",
    "The dependent variable of this problem is the temperature $T$ while the independent variable is the position along the bar $x$. The figure below shows the problem we are interested in, e.g. a bar of length 2.5 m.\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "In addition to the PDE itself, we define the following boundary conditions which are defined Dirichlet conditions:\n",
    "\n",
    "$$ T(x=0) = 20 \\text{ deg}$$\n",
    "$$ T(x=2.5) = 100 \\text{ deg}$$\n",
    "\n",
    "We will approximate the second derivative of the temperature $T$ with respect to $x$ using a centered finite difference. The independent variable $x$ will be discretized in 8 points.\n",
    "\n",
    "On paper, you should:\n",
    "1. Express the numerical scheme for the chosen finite difference scheme applied to the PDE\n",
    "2. Evaluate the numerical scheme for the unknown temperatures in the bar\n",
    "3. Formulate the system of equations in a matrix format (e.g. $A.T = B$)\n",
    "\n",
    "You should carry the following tasks in this notebook:\n",
    "\n",
    "0. Import the necessary python modules\n",
    "1. Discretize the independent variable $x$ with the `linspace` function from `numpy` using 8 points\n",
    "2. Define the matrix $A$ of the system of equations\n",
    "3. Define the right-hand side $B$ of the system of equations\n",
    "4. Invert the matrix $A$ and determine the values of the temperature $T$ along the bar\n",
    "5. Plot the temperature distribution along the bar\n",
    "6. Redefine the matrix $A$ of the system of equations using a sparse matrix definition from scipy\n",
    "7. Solve the temperature distribution again and plot the obtained results."
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
