{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b14b409f-b0b5-478e-b835-01e6be9dfd87",
   "metadata": {},
   "outputs": [],
   "source": [
    "#-- Import general libraries\n",
    "import numpy as np \n",
    "import pandas as pd\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import display, clear_output\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ec7befa-e739-4f64-9aa1-279a1d18a6f8",
   "metadata": {},
   "source": [
    "This code shows how one can create simple forward and inverse models using the Neural Physics method. \n",
    "\n",
    "For the forward model, we want to find the second order derivative of $f(x)$, which is given by:\n",
    "$$ f(x) = sin(x) , \\quad x \\in [0, 2\\pi] $$\n",
    "\n",
    "\n",
    "We use a second order discretisation in space: $$  \\frac{d^2f}{dx^2}\\Bigr|_i= \\frac{f_{i+1} - 2f_{i} + f_{i-1}}{\\Delta x^2} $$\n",
    "\n",
    "This is akin to applying a kernel of $[1, -2, 1]$ to $f(x)$, then dividing by $\\Delta x^2$. \n",
    "\n",
    "Convolution will remove the halo nodes at $x = 0$ and $x = 2\\pi$, which means we need to append the boundary conditions: $$ \\frac{d^2f}{dx^2}\\Bigr|_{x=0}= \\frac{d^2f}{dx^2}\\Bigr|_{x=2\\pi} = 0$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1f778cae-ff06-47da-960b-2f496e78b773",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Space discretisation \n",
    "Nx = 21  # no. of space intervals \n",
    "xa = 0\n",
    "xb = 2*np.pi\n",
    "x = np.linspace(xa, xb, Nx) # create x array\n",
    "dx = (xb-xa)/(Nx-1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "fa6d833b",
   "metadata": {},
   "outputs": [],
   "source": [
    "class SinxConv(nn.Module):\n",
    "    def __init__(self, Nx, filter_weight): #filter_weight\n",
    "        super(SinxConv, self).__init__()\n",
    "\n",
    "        # Specify the size of the input (batch_size, number of input channels, length of input tensor)\n",
    "        input_size = (1, 1, Nx)  \n",
    "        batch_size, in_channels, width = input_size\n",
    "\n",
    "        # Specify the size of the filter/kernel\n",
    "        kernel_size = filter_weight.shape[2]\n",
    "\n",
    "        # Create a Conv1d layer with the specified weight, input size, and padding\n",
    "        self.conv_layer = nn.Conv1d(in_channels, out_channels=1,kernel_size=kernel_size, padding='valid', bias=False)\n",
    "        self.conv_layer.weight.data = filter_weight\n",
    "\n",
    "    def forward(self, previous):\n",
    "\n",
    "        future = self.conv_layer(previous) # previous(1,1,Nx); future(1,1,Nx-2)\n",
    "        return future"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9034b000",
   "metadata": {},
   "outputs": [],
   "source": [
    "def forward(mymodel_time_march,fx,dx):\n",
    "\n",
    "    # Transform into 3D tensor\n",
    "    fx_tensor = fx.view(1, 1, Nx)\n",
    "    output = mymodel_time_march(fx_tensor)/dx**2\n",
    "\n",
    "    #Append BCs \n",
    "    output = torch.cat((torch.tensor([0.]), output[0,0,:], torch.tensor([0.])), 0)\n",
    "\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "49249086",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert NumPy arrays to PyTorch tensors with float type\n",
    "x_tensor = torch.tensor(np.array(x), dtype=torch.float64)\n",
    "\n",
    "# filter corresponding to the above kernel. r will be calculated and applied in the solver in the next section\n",
    "filter = torch.tensor([1, -2, 1], dtype=torch.float64)\n",
    "\n",
    "# resize filter for PyTorch\n",
    "# filter_weight(num_kernels/output channels, kernel_height, kernel_width)\n",
    "filter_weight = filter.view(1, 1, filter.shape[0])\n",
    "\n",
    "# Create instance of convolution and use it as a function to apply convolution\n",
    "mymodel_time_march = SinxConv(Nx,filter_weight)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "24a7719d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, '$\\\\frac{d^2f}{dx^2}$')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAHQCAYAAAB9bRT0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7jklEQVR4nO3dd3gU5cLG4d/sphOSACEhgdB7JyBVmmDoXQFREAUUFQERC0c9lqNiFyygIE1UQAUEpfciIDWA9F4TQk1oabvz/ZHPnBNpCSaZbPLc1zXXIbPvzD6TA8nj7Mw7hmmaJiIiIiKSaWxWBxARERHJbVSwRERERDKZCpaIiIhIJlPBEhEREclkKlgiIiIimUwFS0RERCSTqWCJiIiIZDIVLBEREZFMpoIlIiIikslUsEREREQymQqWiIiksWrVKurXr8+9997LkCFDrI4j4pJUsEREJI2yZcuyatUq1q5dy9mzZ9m2bZvVkURcjgqWiIgA0KZNG3744QeKFi2Kp6cnAG5ubri5uaUZt3z5cipWrIi/vz/vv/++FVFFcjwVLBERAWDz5s3UqlUr9eutW7dy/vx5qlWrlmbckCFDeOedd4iNjeWll17K7pgiLkEFS0QkD0pOTubVV18lNDSUsmXLMn36dK5du0aFChUAiI6OZvDgwUycODF1mytXruDr68uuXbt49NFH6dy5s0XpRXI+tzsPERGR3Oall15i165dbNu2jeTkZBo1akSNGjWw2WzEx8fTq1cvPvvsM4KDg1O38fX1ZcmSJTz55JPs2LHDwvQiOZ/OYIlIttuxYwePPfYYpUqVwsvLC19fX8LDw/nggw+4cOFChvY1efJkDMPg6NGjWRP2H77HunXreOONN7h06VKm7fOfOn36NOPHj+fbb78lODiYokWL0qhRo9SPBydNmsTu3bsZNmwYzZo1Y+3atanb7tix44aPDEXkRjqDJSLZavz48Tz99NNUqFCBF154gcqVK5OUlMTmzZv56quvWL9+PbNnz7Y6ZqZZt24db775Jn379iUgICB1fbt27Vi/fj0hISHZnmnZsmXUrVuXoKCg1HVnz56lefPmADz11FM89dRTN912x44dVK9ePVtyirgyFSwRyTbr16/nqaee4v777+eXX35JvVMN4P777+f5559n4cKFFibMPoULF6Zw4cKWvPe5c+coVKhQ6tcx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uCpdgyUikoecO3cuzUzxMTExrFmzJs1Hfhs3buTNN9/kwQcfZMqUKVbEFHF5KlgiInlIhQoVWLFiBceOHePcuXP06dMHh8NBlSpVADh+/DgPPPAA3333HaNHj+aHH37g2LFjFqcWcT0qWCIieUjr1q1p27Yt1apVo0mTJpQrV47KlSvj6enJ5cuXad++Pa+//jrNmjUjJCSERx55hLffftvq2CIuRxe5i4iIiGQyncESERERyWQqWCIiIiKZTNM0WMDpdHL69Gny58+fpQ9mFRERkcxjmiaXL18mNDQUm+3256hUsCxw+vRpwsLCrI4hIiIid+HEiRMUK1bstmNUsCyQP39+IOX/ID8/P4vTiIiISHrExcURFhaW+nv8dlSwLPDXx4J+fn4qWCIiIi4mPZf36CJ3ERERkUymgiUiIiKSyVSwRERERDKZrsHKwRwOB0lJSVbHkFzC3d0du91udQwRkTxBBSsHMk2T6OhoLl26ZHUUyWUCAgIoUqSI5l8TEcliKlg50F/lKigoCB8fH/0ylH/MNE2uXbtGTEwMACEhIRYnEhHJ3VSwchiHw5FargoVKmR1HMlFvL29AYiJiSEoKEgfF4qIZCFd5J7D/HXNlY+Pj8VJJDf66++Vru0TEclaKlg5lD4WlKygv1ciItlDBUtEREQkk+XqgrV69Wo6dOhAaGgohmHwyy+/3HGbVatWUbt2bby8vChdujRfffXVDWNmzpxJ5cqV8fT0pHLlysyePTsL0ouIiIirytUF6+rVq9SoUYMvvvgiXeOPHDlC27Ztady4Mdu2beNf//oXgwcPZubMmalj1q9fT48ePejduzfbt2+nd+/edO/enT/++COrDkMyUbNmzRg6dOg/2kd6y/rdKlmyJKNGjcqy/YuISNbL1QWrTZs2vP3223Tt2jVd47/66iuKFy/OqFGjqFSpEv379+fxxx/no48+Sh0zatQo7r//fkaMGEHFihUZMWIELVq0yPO/EPv27YthGLz33ntp1v/yyy8udd3P5MmTMQwjdQkJCaF79+4cOXIk2zJs2rSJJ554ItveT0T+Juk6OJKtTiEuLlcXrIxav349ERERada1atWKzZs3p951dasx69atu+V+ExISiIuLS7PkRl5eXrz//vtcvHgx2987M++K8/PzIyoqitOnT/PDDz8QGRlJx44dcTgcmfYet1O4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KwDMX56GPb9anEzSS2ewXIG7T8rZJCveNwMmTJhAcnJymgccm6aJu7t76rVMAO7u/52F+a+LzP/6qO2FF15g0aJFfPTRR5QtWxZvb28eeOABEhNvPfFenz59ePnll1m/fj3r16+nZMmSNG7cOEPZvb1vfwt4hw4dCAsLY/z48YSGhuJ0Oqlateptc4nILTid8OtgjN1zSDDdeCJpGA92fZD21S04U5+DudttfN4rnCemPIfv0es86LYa50+PY3t4BpS5z+p4cgcqWK7AMDL8UV12S05O5ttvv+Xjjz8mIiIizWvdunXj+++/T9dHaWvWrKFv37506dIFSLkm6+jRo7fdplChQnTu3JlJkyaxfv16HnvssTSve3h4pF5LdSvVq1dn2bJlvPnmmze8dv78efbs2cPXX3+dWtzWrl17x2MRkZswTVg0AiK/J9m0MTjpWe5v35PudW68NlLAy93OV33u4bEJL5LvdDxt2YhzWi9sfX6B4vWtjie3oY8IJVP89ttvXLx4kX79+lG1atU0ywMPPMCECRPStZ+yZcsya9YsIiMj2b59O7169UrXheT9+/dnypQp7Nmzh0cffTTNayVLluSPP/7g6NGjnDt37qb7GzFiBJs2beLpp59mx44d7N27l7Fjx3Lu3DkKFChAoUKFGDduHAcPHmT58uUMGzYsfd8YEUlrxTvwx1cADE8aSM2I3jzasKS1mXI4Hw83xj9Wn2+C/sVKRw1syddxfvcAnI60OprchgqWZIoJEybQsmXLm07c2a1bNyIjI9m6desd9/Ppp59SoEABGjZsSIcOHWjVqhXh4eF33K5ly5aEhITQqlUrQkPTfswwfPhw7HY7lStXpnDhwje9bqp8+fIsXryY7du3U7duXRo0aMCcOXNwc3PDZrMxffp0tmzZQtWqVXnuuef48MMP75hJRP5m7ShYnfJv59Wkxwhr1penmpWxNpOL8PNyZ8LjjfikwKv84ayILfEyjqld4Oy+O28sljDMv99DL1kuLi4Of39/YmNj8fPzS/NafHw8R44coVSpUnh55b7nbmWVa9euERoaysSJE+natavVcXIs/f0Sy2yaAPNSzvyOTHqIpPqDea19JU32m0Exl+N57KvlvHv5FWrYDuPwLYK93yIoUNLqaHnC7X5//53OYIlLczqdnD59mtdeew1/f386duxodSQR+bvt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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create fx \n",
    "fx = torch.sin(x_tensor)\n",
    "\n",
    "# Calculate second order derivative of fx using the Neural Physics approach\n",
    "output = forward(mymodel_time_march,fx,dx)\n",
    "\n",
    "# Calculate second order derivative of fx using analytical solution\n",
    "output_analytical = -torch.sin(x_tensor)\n",
    "plt.plot(x,output.detach().numpy(), label='Neural Physics')\n",
    "plt.plot(x,output_analytical.detach().numpy(), label='Analytical')\n",
    "plt.legend()\n",
    "plt.title(r'Calculating $\\frac{d^2f}{dx^2}$')\n",
    "plt.xlabel('x')\n",
    "plt.ylabel(r'$\\frac{d^2f}{dx^2}$')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4a7f24a",
   "metadata": {},
   "source": [
    "For the inverse model, we want to find the value of $C$ using assimilation: $$ \\frac{d^2f}{dx^2}\\Bigr|_i = C \\times \\frac{f_{i+1} - 2f_{i} + f_{i-1}}{\\Delta x^2}, \\quad C \\approx 1 $$\n",
    "\n",
    "We will be assimilating to $-sin(x)$, the analytical solution of $ \\frac{d^2f}{dx^2} $"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "417f7777",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Create a forward function that allows C to be optimised\n",
    "def forward(C,mymodel_time_march,fx,dx):\n",
    "\n",
    "    C.retain_grad()\n",
    "\n",
    "    # Transform into 3D tensor\n",
    "    fx_tensor = fx.view(1, 1, Nx)\n",
    "    output = mymodel_time_march(fx_tensor)/dx**2\n",
    "\n",
    "    #Append BCs \n",
    "    output = C*torch.cat((torch.tensor([0.]), output[0,0,:], torch.tensor([0.])), 0)\n",
    "\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "1ef9ba64-24c3-4cc8-9bf2-00c97c40d47d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration: 0\n",
      "C: 0.5\n",
      "Loss: 0.12100744302450635\n",
      "Iteration: 50\n",
      "C: 0.9118962287902832\n",
      "Loss: 0.00435018136326111\n",
      "Iteration: 100\n",
      "C: 1.0116392374038696\n",
      "Loss: 5.331812789115958e-06\n",
      "Iteration: 150\n",
      "C: 1.0082330703735352\n",
      "Loss: 4.901037691623742e-10\n",
      "Iteration: 200\n",
      "C: 1.0082676410675049\n",
      "Loss: 2.3170749453917368e-12\n",
      "Iteration: 250\n",
      "C: 1.008264422416687\n",
      "Loss: 4.633229424045782e-13\n"
     ]
    }
   ],
   "source": [
    "mse_loss = nn.MSELoss()\n",
    "\n",
    "target = -torch.sin(x_tensor)\n",
    "fx = torch.sin(x_tensor)\n",
    "\n",
    "iterations = 300\n",
    "# Store the history of C values and losses for plotting\n",
    "c_values = np.zeros(iterations)\n",
    "losses = np.zeros(iterations)\n",
    "\n",
    "#Initial guess for C\n",
    "C = torch.tensor([0.5],requires_grad=True)\n",
    "# Use Adam optimizer\n",
    "optimizer = torch.optim.Adam([C], lr=0.01)\n",
    "\n",
    "for n in range(iterations):   \n",
    "    optimizer.zero_grad()\n",
    "    # Forward pass through the model\n",
    "    output = forward(C,mymodel_time_march,fx,dx)\n",
    "\n",
    "    # Compute the loss\n",
    "    loss = mse_loss(output, target)\n",
    "    \n",
    "    # Backward pass to calculate gradients\n",
    "    loss.backward(retain_graph=True)\n",
    "    losses[n]=loss.item()\n",
    "    c_values[n]=C.item()\n",
    "\n",
    "    if n % 50 == 0:\n",
    "        print('Iteration:', n)\n",
    "        print('C:',C.item())\n",
    "        print('Loss:',loss.item())\n",
    "\n",
    "    # optimize C\n",
    "    optimizer.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "6dcd9b92-a0e5-4abb-bbb7-34bf57352b62",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 2,figsize=(10,4))\n",
    "axs[0].plot(range(iterations),c_values)\n",
    "axs[0].plot(range(iterations),1*np.ones(iterations),'k--',linewidth = 1,label='True value')\n",
    "axs[0].set_title('C value')\n",
    "axs[0].set_xlabel('Iterations')\n",
    "\n",
    "axs[1].plot(range(iterations),losses)\n",
    "axs[1].set_title('Losses')\n",
    "axs[1].set_xlabel('Iterations')\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8de35601",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "FYP",
   "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.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
