{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "yNiFcBU9f34Q"
      },
      "source": [
        "### Libraries"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 77,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "j91ZRxA3f34Y",
        "outputId": "4996680a-f17c-4ddc-e7d9-763becc3656e"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Mounted at /content/drive\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "import os\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import glob\n",
        "import matplotlib.tri as tri\n",
        "import pandas as pd\n",
        "from PIL import Image\n",
        "from sklearn.preprocessing import MinMaxScaler\n",
        "import imageio\n",
        "from typing import Tuple, Union\n",
        "from torchsummary import summary\n",
        "from tqdm import tqdm as tqdm\n",
        "from sklearn.model_selection import train_test_split\n",
        "import torch.optim as optim\n",
        "import torch.nn.functional as F\n",
        "from torch.utils.data import DataLoader, TensorDataset\n",
        "import math\n",
        "from scipy.interpolate import interp1d\n",
        "from torch.utils.data import Dataset, DataLoader\n",
        "import copy\n",
        "from torchvision import transforms\n",
        "import torchvision\n",
        "import torch.nn.init as init\n",
        "from scipy.linalg import norm\n",
        "from skimage.transform import resize\n",
        "import shutil\n",
        "import cv2\n",
        "from scipy.linalg import svd\n",
        "import gzip\n",
        "\n",
        "import shutil\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive', force_remount=True)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "z6k9P75cf34a"
      },
      "source": [
        "### Load CFD Data"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model = 'Sten' # or Sten\n",
        "bc_name = 'Wall' # or Wall\n",
        "state_lstm = 'load'  # train | load"
      ],
      "metadata": {
        "id": "c-D8zzrRg9fy"
      },
      "execution_count": 78,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 79,
      "metadata": {
        "id": "9QyXL92-f34c"
      },
      "outputs": [],
      "source": [
        "data = np.load(f'/content/drive/MyDrive/Paper/RoSo/{model}/{bc_name}/rylScty_patientSpec_StenosisModel_wallPre&OSI&WSS.npz')\n",
        "\n",
        "x = data['x']\n",
        "y = data['y']\n",
        "z = data['z']\n",
        "pre = data['pre']\n",
        "osi = data['osi']\n",
        "wss = data['wss']\n",
        "del data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 80,
      "metadata": {
        "id": "0dqGc54nf34d"
      },
      "outputs": [],
      "source": [
        "variable = pre.T # (loc, time)\n",
        "variable_name = 'Pressure'"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ob-RwiNyf34d"
      },
      "source": [
        "### General Model Info"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 81,
      "metadata": {
        "id": "zj4OeyScf34d"
      },
      "outputs": [],
      "source": [
        "n_snapshots = 1000"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qyURirjMf34e"
      },
      "source": [
        "### Read BCs"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 82,
      "metadata": {
        "id": "O6H0DvJZf34e"
      },
      "outputs": [],
      "source": [
        "df = pd.read_csv('/content/drive/MyDrive/Paper/RoSo/BC.csv')\n",
        "\n",
        "#Velocity Function Interpolation\n",
        "tv_values = df['t1'].tolist()\n",
        "v_values = df['v'].tolist()\n",
        "#Create interpolation function\n",
        "interp_func = interp1d(tv_values, v_values)\n",
        "# Generate 2000 uniform values\n",
        "uniform_tv_values = np.linspace(min(tv_values), max(tv_values), n_snapshots)\n",
        "interpolated_v_values = interp_func(uniform_tv_values)\n",
        "\n",
        "#Pressure Function Interpolation\n",
        "tp_values = df['t2'].tolist()\n",
        "tp_values = [x for x in tp_values if not math.isnan(x)]\n",
        "P_values = df['P'].tolist()\n",
        "P_values = [x for x in P_values if not math.isnan(x)]\n",
        "#Create interpolation function\n",
        "interp_func = interp1d(tp_values, P_values)\n",
        "#Generate 2000 uniform values\n",
        "uniform_tp_values = np.linspace(min(tp_values), max(tp_values), n_snapshots)\n",
        "interpolated_P_values = interp_func(uniform_tp_values)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "q7hVSxV9f34f"
      },
      "source": [
        "### POD"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 83,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 54
        },
        "id": "kv-AckWaf34g",
        "outputId": "e98651e4-6af9-4e46-e05c-bb7019d2bbf7"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x600 with 1 Axes>"
            ],
            "image/png": "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22/d1peXl6eZM2fq559/VlxcnNMmJ5GRkWratKlTOVdn2e3YsUM//fST23sFgzZt2rhMd3XW2axZsyq0Le4e2F3t8Opqw6Dy1O84+vP222+rS5cuuuWWWyQVjYC6O4bkXFv4v/XWW3r99df11ltvOe2yOWzYMJdl3O1mu2nTplLvFSisVqtWrFihFStWVOp054r6OflCixYt1LVrV5fXUlJSnNIWLlzo1VEq7o5osFqtio2NdXnYOwDPEfABCFrFo3u9evVSixYtPC7nbpRvz549WrRokV3a66+/7nId1quvvupyjVJOTo5eeuklSUXToq699lq763feeafLgHPu3Ln6/fffXbZr4sSJOnXqlCS5PYfvqquuckrbt2+f3nzzTVs7d+7cqSFDhricghhM+vbt63Lr+0mTJtmm5ebn5+vNN9/U7NmzK7Qtf/nLX1ymv/nmm7aAxzAMTZ8+XW+//XaZ63cVyDuOZK5cuVI//vij3Q6gY8eOdXke4uTJk92uuVu7dq3mzp0rqejcxzp16thdv+OOO5SYmOhU7osvvnCa5peTk+MyMIC9ivg5+cr48eNdpr/yyit26wZ/+ukn3X///V7dq1u3brroootcXrvjjju83hEVON8R8AEISqdPn7Y9zHs6uldsyJAhql69ustrxUFksY4dO+rjjz92mi66ePFi3XXXXXYP2Tt37tSgQYO0detWhYeH66OPPnIajTObzfriiy+c1u/k5OToyiuvtPvL/tmzZ/X666/rhRdekFT0V3B3U60eeeQRlw9Fjz76qGJiYpSQkKCWLVtqz549bkdqgkXDhg11++23O6Vv3bpVTZo0UZMmTVS7dm09+uijbtds+kqPHj1cri06dOiQkpOT1bBhQ0VHR+uuu+5yOVp8Ln379nVK27lzp+0Mt40bN+qrr76SJPXu3duWp1GjRvr000+djvvYvHmzBgwYYDeF+MyZM3rvvfd03XXXKScnR0lJSXr55Zed7lutWjXNnDnTadRx165devDBB21r+Y4fP64777zTq3WpvvDrr7/q22+/PefX6tWr/dbGivg5+Uq/fv30xBNPOKWfOXNG/fv3V1xcnOLj43XxxRfrxIkTXu9A626Uj+mcgA8YABBE1q5dayQmJhqNGjUyJBmSjISEBCMxMdFITEwstey+ffts+SwWi618yS+z2WzLs3btWlvZDRs2GB06dHDKbzKZjAYNGhhxcXG2tPr16xtLliwptS2nTp0y/vrXvxqhoaFOdcbExBhNmjQxwsLCDElGSEiI8eSTTxoFBQWl1jl9+nTDbDa7/FySjHr16hnff/+9MW7cOJfXGzZsaCQmJhq33Xabrc7i70WtWrVKLbN27VrbzyYhIcFl3ujoaCMxMdF4+umn7ep29T0IDQ21XU9JSXH6rMePHzc6derk9rNKMu68804jLy/P5bWIiAinn/Obb75pS/O0jGEYxrp164yaNWu6bUdYWJjx0ksvGcuWLXN5vVatWm777/79+42GDRu67Kf169e3vW/WrJmRmZnpVH7z5s1GcnKyy/vWqVPHrg5JxrXXXmscOXKk1H62Zs0ao0mTJk71WSwWIz4+3ggLCzMsFovxxBNPlPnzeqq0n7s3X+np6bZ7eNr3i/unN/3ZVz+nsvThnj17evS9Hj9+vO13kbs6582bZwwbNuyc39PSZGdnG3Xq1LEr261bN4/KAigdAR+AoOLuobn4qzTp6ellevhbtmyZUx3fffed8cgjjxidOnUy6tevb1gsFsNisRgNGzY0rrrqKuNf//qXkZWV5fHn2bt3rzFhwgSjf//+RkJCghEdHW2YzWajVq1aRseOHY3HH3/c2LJli8f1bdq0yRg6dKgRHx9vhIeHG7Vq1TLat29v/O1vfzMOHjxoGIbhNuAr/ir5IFiW79W5fjbFX8OGDStT3dOmTXP5Wa1Wq/HGG28YXbp0MWJiYmwBx4ABA4wvv/zS489Q/HM+1/eltL6xe/du46GHHjJatmxpREREGFFRUUarVq2MBx54wPbz8+T748qRI0eMv//970a3bt2MunXrGuHh4bY+0rlzZ+Pvf/+7cezYsVL7xeLFi40HHnjASE5ONurWrWsLyurVq2d0797deOKJJ4wff/yx1DpKys7ONt5++22jX79+Rv369Y2wsDAjJibGaNOmjfHAAw8Yu3btKvfn9URZ/j8uy1fJ4KSs/dPb/mwY3v+cytKHExISPP5+p6WlGU8++aTxl7/8xahZs6ZhsViMZs2aGXfffbexefNmwzAM47bbbnN5n+LfO54YM2aMx98rAJ4zGQYH5QAAAKD8rr/+es2fP98uLSQkRLm5uS7X3Lqyd+9eNWvWTAUFBYqJidHBgwfdbowEwHOs4QMAAICT7777rtQdiUtytelUcnKyx8GeJMXHx9s2oLrtttsI9gAfCfV3AwAAABB4+vXrp8LCQu3fv18NGjRwm+/QoUMuj4G59dZbXeb/5JNPFBkZ6XTcQl5env773/9KYrMWwJcY4QMAAIBLhmFo4sSJpeZ55ZVXnI57adWqlR588EGX+e+44w7deuutTmdKTps2TQcOHFDHjh3dHtMAoOwI+AAAAODWm2++qXvvvVdpaWl26enp6XrooYf0z3/+0y49ISFB33zzTann5+Xm5uqFF16wnRP63Xff6emnn5YkPfvssz7+BMD5jU1bAAAA4KRatWqyWq12aREREapXr55OnTql48eP210zm8266667NHHiRMXGxrqt12Qy2V5HR0fLYrEoMzNTknTnnXdq+vTpPvwUAAj4AAAA4OTUqVP6/vvvtWbNGm3atEnp6ek6cOCATp8+LcMwFBMTo7p166p9+/bq1q2bhgwZovr165+z3n/9619avny5Nm3apIMHDyo8PFwtWrTQX//6V40YMUIhIUxAA3yJgC+IXHzxxTp48KDi4uK0YsUKfzcHAAAAgJ8YhqFTp06pYcOGpf6hhIAviDRs2FAHDx70dzMAAAAABIi9e/eqcePGbq9zLEMQKZ7z3qBBA23fvt2vbcnLy9PixYvVr18/hYWF+bUtCD70H3iD/oPyou/AG/QfeKMi+k9WVpbi4+MVHR1daj4CviBSHPCFhIQoJibGr23Jy8tTZGSkYmJi+KWHMqP/wBv0H5QXfQfeoP/AGxXZf0puhOQKq2IBAAAAoIoi4AMAAACAKoqADwAAAACqKAI+AAAAAKiiCPgAAAAAoIoi4AMAAACAKoqADwAAAACqKAI+AAAAAKiigj7gKyws1Ntvv62YmBiZTCZlZGT4rO4DBw7okUceUWJioiIiIhQXF6drr71WixYt8qj8jh07NGLECDVp0kQRERFq2LChbrnlFq1bt85nbQQAAAAAd4I64Nu6dasuvfRSPfjggzp16pRP6167dq3atWunKVOm6L777tPKlSv1zjvvaO/evbrqqqs0duzYUst/+eWXSk5O1ldffaWxY8fq+++/18SJE7Vu3Tp169ZN7777rk/bCwAAAACOgjbgGzdunC666CKZzWY988wzPq37yJEjuu6663T8+HHNmjVLTz31lDp37qxBgwZp5cqVio+P14QJEzR9+nSX5bdt26Zb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n6+nnnpKL7/8si/a5JGbbrpJv/zyix555BFNmjTJln755Zdr4MCB+vLLLzVq1ChNmzatTPU++OCDSklJUf369bV69WrVqFHDdu3qq6/WgAEDNH/+fI0cOVIzZ850Wcc999yjjz/+WCkpKRo4cKAt/aKLLtI111yj/v37KzU1tWwfOMi4OpLB1WY+AAAAACqO10MujRo1kiTdfPPNXjfGUykpKVq+fLkiIiI0fvx4u2smk0kTJkyQJE2fPl0bN270uN709HTbwfGPPvqoXbBXXHfx/WbNmqX169c71bFw4UJNnz5dQ4YMsQv2Stbxyiuv6N1331VYWJjHbQs2jlM6LWzYAgAAAFQ6rwO+vn37SiqaYumpJUuW6IUXXij3PT/44ANJUu/evVWzZk2n60lJSUpKSpJhGJo6darH9S5dutS2rq5z584u8yQnJysqKkqS9NFHHzldLw4277rrLrf3ufDCC3XffffJbK66m5g4Bnzs0AkAAABUPq8DvtGjR6tmzZp64YUXlJOT41GZxYsX6/nnny/X/XJzc7V06VJJUqdOndzmK762YMECj+s+fPiw7XXDhg1d5jGZTIqNjZVUtClLSXv37tWqVaskSV26dPH4vlWR4y6d7NAJAAAAVD6vA77mzZtr0aJFOnr0qC6++GLNnj1bx48f90XbXNq2bZvy8vIkSU2bNnWbr/ja7t27dfLkSY/qjo6Otr0ubcTy6NGjkqQdO3aooOB/gc3atWslFZ07GBUVpffff1+XXXaZateurejoaCUlJenhhx/W7t27PWpPMHMM+CII+AAAAIBK5/U8u+bNm0sqGnk7cOCAhg4dKqko6ImOjna5UYc3AeGePXtsr+vWres2X8lr+/btc1qP50rHjh1tr7du3aru3bs75dm7d69th878/HydPHlStWvXliT9+uuvkoqOqujbt6+2bdum5557Tp07d9apU6c0c+ZMTZ48WdOmTdNnn32mq666qtT25OTk2I2aGoZhe10c9PpL8f3dteNstv1ob3hYiN/bjMBxrv4DlIb+g/Ki78Ab9B94oyL6j6d1eR3wZWRk2AV1xUHJsWPHdOzYMbflyrtj46lTp2yvIyIi3OYreS0rK8ujurt06aIOHTpo06ZNmjRpkkaMGOG0zu6NN96we5+dnW17Xfx5MzMz9eOPP2rTpk1q0aKF7frll1+uOnXqaOLEibr55pv1yy+/KCEhwW17JkyY4HLqq9Vq1cKFCz36TBVtyZIlLtN/cRjEPHn8aMC0GYHDXf8BPEH/QXnRd+AN+g+84cv+c/bsWY/y+WwnDcMwPA7iSo5UBRKTyaSZM2eqZ8+e2rZtmwYNGqQJEyaoVatWyszM1JQpUzR58mS1bt1a27dvlyRVr17dVr7k2XxDhw61C/aK/e1vf9PkyZN16tQp/fOf/9Sbb77ptj1jxozR448/bnuflJSkAwcOKCIiQv379/fFRy63vLw8LVmyRH379nW52+jRb7Zr4+7fbe+bxDdU//4dKrGFCGTn6j9Aaeg/KC/6DrxB/4E3KqL/eDqo5bOAr7LOWCu5zq60g9VLXouJifG4/jZt2uinn37SuHHjlJKSojZt2kiSQkJCdMkllyg1NVWpqanavn27zGazXXuqVatme92jRw+X9VevXl0dO3bUypUrtXjx4lLbYrFYZLFYbO9Lfo8D5RdNWFiYy7bk5tsH9ZERrvPh/Oau/wCeoP+gvOg78Ab9B97wZf/xtB6fBXwNGjTw+KbHjx+3m5pZFk2aNLG9PnLkiNt8Ja81bty4TPeIj4/X1KlTNWXKFB04cEBWq1VxcXG2wHHWrFmSikbcQkL+t+9N8Vo+SYqLi3Nbf/HZhSXXI1Y1jscyRHAsAwAAAFDpfPYU/t1336lly5Ye5X3qqaf0z3/+s1z3SUpKUlhYmPLy8pSRkeE2X/G1hIQEjzZsccVsNis+Pt4pPS0tTZLz0Qvt2rWzvS65e6ejQJ3S6kvs0gkAAAD4n9fHMpSHYRjlDnrCw8PVp08fSdKGDRvc5lu/fr0k6ZprrinXfdzJzs621X377bfbXbvssstsI36ljd7t379f0v92OK2KcjiHDwAAAPA7rwO+9PR0/f7772UKXl577TUVFhaW+5733HOPJGnp0qUuz9jbvn27tm3bJpPJpOHDh5ep7rfeekvdunVzO0I3e/ZsWa1Wde3aVT179rS7Vr9+fV155ZW2trly+vRpW6B67bXXlqltwYQpnQAAAID/eR3wJSQkKCEhQaGhlfdAP2jQIPXs2VNWq9Xp2ALDMDR27FhJ0rBhw3TxxRfbXZ8/f77q1q2rdu3auZwSeuDAAa1Zs0YpKSlO13bv3q2xY8cqJiZGU6ZMcblRzSuvvKKwsDClpKTop59+crr+0ksvKTs7W3FxcXriiSfK8rGDClM6AQAAAP/zeZT2448/atmyZdqyZYtOnDihr7/+WpL07bff6pJLLrHb1dIbc+fOVe/evfXGG28oOztbQ4cOVW5urt5++219/vnn6t27t959912ncu+//74yMzOVmZmpefPm2R17UNKIESO0c+dO9erVS4ZhaNWqVXrllVcUERGhRYsWqW3bti7LtWvXTrNnz9btt9+ufv366bnnnlP37t11+vRpzZw5Ux988IEaNGigr776SnXq1PHJ9yIQWXMY4QMAAAD8zWdP4Zs3b9Y999yjjRs3SnI+l++pp55SRkaGnn/+eT388MNe369OnTpav369Jk2apNmzZ2vGjBkym81KSkrSO++8o3vvvdduB81iI0eO1Jo1axQXF6cbb7zR6fott9yivLw8rVq1SpMnT9b48eMVExOjFi1a6Omnn9b9999/zqB10KBBat++vV599VW9+eabGj16tMLDw9WyZUuNHz9eDz30kN2OnlWR0wifhRE+AAAAoLL5JOBbuXKlrrrqKuXk5LjdjCUmJkYnT57UY489psOHD+ull17y+r4Wi0WjR4/W6NGjPS5z3XXXKTMz0+315ORkJScne922Fi1a6P333/e6nmCVwxo+AAAAwO+8XsN3+vRp3XTTTbaDzk0mk8u1bStWrNCSJUsUHx+vl19+WVu2bPH21ghgjiN87NIJAAAAVD6vA773339fR44ckclksh234G6Ur0+fPlqyZInMZrOmTZvm7a0RoAoKDeXl2+/CyqYtAAAAQOXzep7dwoULJUkhISHq0qWL2rZtq9q1a2vFihVau3atU/4WLVqob9++Wrlypbe3RoBynM4pMaUTAAAA8Aevn8K3bt2qOnXqaOXKlWrdurUt/amnnnIZ8ElFB47/8MMP3t4aAcpxOqfElE4AAADAH7ye0nns2DENGjTILtg7l8OHD+v06dPe3hoByvFIBkmqZmGEDwAAAKhsXgd81apV0+HDhz3Ov2/fPi1cuFDVqlXz9tYIUI4jfCEmKSzU664GAAAAoIy8fgpv2LChvvjiCz377LPKyMhwm+/48eP65JNPdNlll+n06dOKi4vz9tYIUFaHNXyW8FCXO7cCAAAAqFhez7Pr2rWrtm/frpdfflkvv/yyIiMjFRsbq6ysLElSYmKisrKydOzYMUn/O5C9c+fO3t4aAcrp0HXW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1tRtt91W7nump6fr2Wef1aWXXqq4uDiFh4crJiZGF1xwgW699Vb95z//UX5+/jnrWbFihYYMGaL4+HhZLBbVqlVLXbt21dtvv+1ReUfLli3T8OHDlZSUpBo1aig8PFz169dXnz599Prrr+vUqVOllt++fbueeuopXXLJJapTp47Cw8MVFRWlpk2bqnPnzrrjjjv0z3/+Uxs2bChz2wDgfMSmLQAAeCkhIUHXXnutvvrqK1taQUGB3n77bb388st2eb/++mulp6fr0UcfVWRkZJnvlZeXp7/97W96/fXXVVBQIElKTEzU4MGDdejQIX311VfatWuX5syZo5YtW2rWrFl2O5YWMwxDjz32mN58801bWnh4uPr166datWrpH//4hz755BOP25WZmamhQ4dq0aJFtrQBAwYoLi5OKSkp+u677/Tdd99p4sSJ+uyzz9SzZ0+nOt555x09/PDDts9VvXp1XXfddWrYsKGOHTumNWvWaP369frkk0/UqFEj7du3z+P2AcD5ioAPABB0IiMjFRsba3t/6tQp5ebmSpKio6MVHh4uqSjoOnHihCTJbDarZs2advV4cnSCpx544AG7gE+SPvjgA40bN85ux9DJkyfLZDLp/vvvL/M9DMPQ0KFD9emnn9rSOnTooB9++MF2j7lz5+qmm26SJP3222/q0aOHVqxYoY4dO9rVNWHCBLtgT5I+/fRTDRgwQJL04osvqn379h616/Tp0+rTp482b95sSxs9erQt2H300Ud14YUXqqCgQEeOHNGVV16ptWvXqkOHDrb8W7dutQv2oqOjtWXLFrs1lwUFBXr22Wc1ceJEj9oFAGBKJwAgCD399NPKzMy0fZXc6XL16tW29P/85z+29N69e9uVyczM1JAhQ3zWpr59+zrt2Hn06FHNnDnT9n7btm369ttvXeb1xNSpU+2CPUl66KGH7ALKwYMHq2nTprb3Z8+e1ZAhQ5SXl2dLO3TokJ5//nm7ehITE23BniTVrVtXf/3rXz1q17hx4+yCPUkaOXKk7XVSUpLdRjo5OTlO6x7nzp1rC/akot1LHTfYMZvNmjBhgt3nAwCUjoAPABDUTpw4oa1bt0qSatasqXbt2tmurV692va6W7duFdoOk8mkUaNGOaWXPKLhX//6lySVe7OWCRMmOKW52oimU6dOdu937dplFyjOmDHDNiJazNW0T0++Z2fOnNG7775rlxYZGanmzZvbpbVt29bu/caNG7VmzRrb+4MHD9pd37Rpk+bOnSvDMOzSTSaTJk2apOeee+6cbQMAEPABAILc6tWrbUFBt27dZDKZ7K4Vq+iAT5Luvvtup3V5mzdv1vLly5WVlaWPP/7Ytt6vrH777Tfb8RIlNW7c2CmtUaNGTmnffPON7fWqVas8KuOqbkfff/+97cD7YiWn2xarXbu2U9qyZctsrx1H8woKCnTTTTcpISFBw4cP18cff6xDhw5JKlobeO+9956zbQAA1vABAIJcyaDu0ksvtb0uKCiwHdUQEhJiN6WwotSsWVO33nqrPvzwQ7v0t956Sz169NDp06f17LPPOu3o6YnffvvNZXp0dLRTWvXq1Ustv3v3bo/q8WRTmbS0NKe0rKwsPfnkk3ZpP/zwg1O+LVu22F4PHDhQ48ePt5t6Kkl79+7VtGnTNG3aNJlMJvXs2VNPPvmkrrnmmnO2DQBAwAcACCIZGRlq1qyZ2+tjx47V2LFjndILCwtVo0YN2/uePXtq+fLlFdFEPfDAA04B31dffaV169bJYrFoxIgR5ar35MmTTmkhISEug8ewsDCntOLNayS5PBohNNT5kcCTwDQrK8sp7eTJk3r99dfPWfb48eO210lJSfrXv/6lBx980CnoK2YYhpYvX67ly5fr4Ycfdtp0BgDgjCmdAAD4UHJysrp27WqXVlBQoP379+vmm29W3bp1y1VvyYC1WGFhoQoLC53SXQVMJXcodTWa5+rMPVd1O4qJiXFKa9q0qQzDOOdXyWmmUtFGL9u2bdPjjz+uCy64oNT7vvXWW3ZTQgEArhHwAQCCRkhIiGrUqGH7ioqKsl0LDQ21u1ZyxKp69ep211xNefQld0culHezFklq1aqVy3RXo3Wu0kqWd7XLpasyZ8+ePWe7XI24uhr181RiYqJef/11paWlad++ffrkk0904403uhxtdAwYAQDOCPgAAEGjSZMmOnHihO3rxRdftF178MEH7a41bNjQdm3nzp12177++usKbedNN93kNJJ38cUXu9xR01MtWrRweZTD3r17ndJcHUjev39/2+uSax1LK+PJweaXXXaZ0xTSY8eO6ejRoy7zG4ahnj17qkOHDlq8eLEt/d///re6dOlid89GjRrp9ttvV0pKiubMmeNUlzeBJQCcLwj4AABBq+Q6vMsvv9z2eteuXdqzZ48kqU2bNoqLi6vUdlksFqdz5spz0LojV+sT161b55S2fv16u/ctWrSwHcYuSUOHDpXFYrHLs2HDBqd6XG204qhGjRq68847ndIXLFjgMv93332nlStXKj093S4A3rt3r3788UfNmzfPZbmrr77aKY3z+ADg3Aj4AABBqbCwUCtXrpRUNNWzR48etmsl13b17t270tsmSS+++KJOnTpl+7r77ru9rnPYsGG69dZb7dImT55sdyzCnDlzbMGuJEVFRWnOnDl2U1zj4uI0btw4u3rS09OVkpJie3/kyBFNmTLFo3a9/PLLSkhIsEt77rnnnEYf09LSbJvWjB8/3uW6xLFjx7pcm+c4whcREaFbbrnFo/YBwPmMXToBAEHpv//9r23nyeTkZLtNSb777jvb65Ijf75QfNxA8WHvixcv1unTpyVJr732mi2f2Wx2u1bw+PHj+sc//iHJ9cjahg0bbPcZNWqUEhMTJRUdOl58lt+rr76qgoICbdq0Se3bt1e/fv10+PBhffHFF7Z6WrVqpdmzZys5OdnpHs8884z++OMPvfXWW7a0W2+9VQMHDlTt2rX11VdfqWnTpvrjjz9cti0xMdF20HydOnW0fPly3XTTTbbPs2fPHrVp00b9+/dXvXr19Pvvv2vJkiXKz8/XM888o8cee8zl9+bMmTPq3bu3unTporZt2yo0NFS//PKL3WhjZGSkPvroo1J3bAUAFDEZxafVAgAQRF577TU99dRTkqQnnnjCLthq2LChDh48KJPJpMzMTJeHfpdXyYPdHXn6T+q5jpcoadmyZerVq5fLOqZMmaIVK1bot99+04kTJ2SxWBQXF6dOnTpp4MCBGjRokMxmc6n1r1ixQu+8845Wr16tw4cPq1q1amrdurVuu+029e/fXy1btnRZztXRFoWF/9++HdpYCABRFB2FQiLwCBwdYOgEykN+TwMIQg8kJBgEBvezBaxZPXtOAU+Mu2K+8fl8Yp7nWNc1ruuK932jLMtomib6vo9pmqLrul97x3HEsiyxbVvs+x7necZ93/E8TxRFEVVVRdu2MQxDjOMYdV3/6X4A/53gAwAASMoPHwAAQFKCDwAAICnBBwAAkJTgAwAASErwAQAAJCX4AAAAkhJ8AAAASQk+AACApAQfAABAUoIPAAAgKcEHAACQlOADAABISvABAAAkJfgAAACS+gEpDmtj21yUpgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "U, S, VT = svd(variable, full_matrices=False)\n",
        "\n",
        "energy_retained = np.cumsum(S) / np.sum(S)\n",
        "\n",
        "\n",
        "plt.rc('font', family='DeJavu Serif', size=18)\n",
        "# plt.rcParams['font.family'] = 'Times New Roman'\n",
        "colors = sns.color_palette('deep', n_colors=100)\n",
        "\n",
        "plt.figure(figsize=(10, 6))\n",
        "plt.plot(energy_retained[:50], color=colors[0], linewidth=3, marker='D', markersize=5, markevery=1)\n",
        "\n",
        "ax = plt.gca()\n",
        "ax.spines['bottom'].set_linewidth(2)  # X-axis line width\n",
        "ax.spines['left'].set_linewidth(2)    # Y-axis line width\n",
        "\n",
        "plt.xlabel('# Modes', fontsize=20, weight='bold')\n",
        "plt.ylabel('Energy', fontsize=20, weight='bold')\n",
        "\n",
        "#plt.legend(frameon=True, edgecolor='black')\n",
        "# handles, labels = plt.gca().get_legend_handles_labels()\n",
        "# plt.legend(handles=handles, labels=labels, frameon=True, edgecolor='black', loc='upper center', bbox_to_anchor=(0.5, -0.15), fancybox=True, shadow=True, ncol=2)\n",
        "\n",
        "plt.grid(True)\n",
        "plt.axhline(y=0.99, linewidth=3, color=colors[1])\n",
        "plt.title('Accumulated Energy', fontsize=24, weight='bold')\n",
        "# plt.savefig('fig.jpg', dpi=400, bbox_inches='tight')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gaDApmlSf34l"
      },
      "source": [
        "### Reduction"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 84,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ctXSPLzRf34l",
        "outputId": "62f23689-366d-466d-fd62-41a9df40c2e1"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "With 3 number of modes, the energy content is: 99.36662408552552\n"
          ]
        }
      ],
      "source": [
        "num_modes = 3  # correpsond to 99% energy\n",
        "\n",
        "# Energy content calculation\n",
        "total_energy = np.sum(S)\n",
        "retained_energy = np.sum(S[:num_modes])\n",
        "energy_content = retained_energy / total_energy * 100\n",
        "print(\"With\", num_modes, \"number of modes, the energy content is:\", energy_content)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 85,
      "metadata": {
        "id": "Z6VOqaEjf34l"
      },
      "outputs": [],
      "source": [
        "q = U[:,:num_modes].T @ variable\n",
        "\n",
        "variable_reconst = U[:,:num_modes] @ q\n",
        "\n",
        "RelErr1 = np.zeros((q.shape[1]))\n",
        "for t in range(q.shape[1]):\n",
        "        # print(t)\n",
        "        RelErr1[t] = (norm(variable[:,t] - variable_reconst[:,t])/norm(variable[:,t]) ) * 100"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 86,
      "metadata": {
        "id": "2oQSlh77f34m"
      },
      "outputs": [],
      "source": [
        "np.savez(f'/content/drive/MyDrive/Paper/RoSo/{model}/{bc_name}/POD_data_{model}_{bc_name}_{variable_name}.npz', S=S, Reconst_error=RelErr1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 87,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 54
        },
        "id": "ZwCHnXRBf34m",
        "outputId": "b1f69daa-1d66-4443-9429-3c0bc739bff4"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x600 with 1 Axes>"
            ],
            "image/png": "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7l2sWLECQUFBmDt3boV7mpqarh7rmqbr3tFnD1dzUJfv1brIVPetPtep6GdR3T9bc/n9JCL9MMEkojrPw8ND66IiAPDZZ59V2COm68Nwfn4+YmJiNB66ekQr2kj8Ubd582Z8/PHHeg+Hk8lkWLZsGebMmVPNkf1H1+I5RNVFKFnJH717967yNUx135r7/W/u8RGROiaYRFQvvPbaa2jSpIlGuUwm01gJsSxdK28+/fTTqg+A+jxmzZpV6TWLiop0JrQVcXV11Vi9tpS2xVQqKgdqvjdALBZj3rx5SEhIwDfffIPnnntOrxVPP//8c62LBJkrXT/byoZpl6XrfTHkGrWprt+rpFtFc3v5syWisphgElG9YGlpiQ8//FDrsS1btiA6OlrrsebNm2stz8nJqXIsrVq10nksOTnZ4OtJJBK0bNlS6zFdi5VUtIiJrpUdq5uDgwMmTpyI3377DWlpabh27RpWrVqF1q1ba60vk8lw/vz5Go5SP9pWv9X1YdqQoYC67p2UlJQqfTlR0+rLvUqafH194eTkpPWYoT9bS0tLnX97iajuY4JJRPXG+PHjERgYqFEul8t1DqHt06eP1nJ9Fpr58ccf8f7772PGjBkoKChQlXfq1EljFdhSt2/frvCazz77LNq1a6exf5yuxXISEhIMKi+dS1pTNm/ejN69e2tsvSESidC6dWtMmzYNV65cwfDhw7Wen52dXRNhGkzb4iW65k8aslBNv379tC5MU1hYiLi4OJ3nKRQKdOvWDe3atcPkyZM1jptq30V91NV7tbaNGjUKvXv3rrE9Og0lkUgwYMAArccM/dn26tULtra2JouNiMwLE0wiqjckEonORX22bdumNbl7/PHHtfYaJSYm6uz1BEqGQ86cOROrVq3CkSNH1BZhkUgkavtilnX48GGd10xOTsauXbtw9epV+Pn5qR2bPHmy1nlIly9f1nqtK1euaC2fOXOmzvarw927d3HixAl89913OuuIxWKMHz9e6zFPT0+NMm0r/MrlcrXnYWFh6NatG0aOHGlgxPrRtgXO3bt31b5oAICMjAyDEoaGDRti7NixWo9VdO9cuHAB58+fx9WrV7V+yaJrVeTy79ugQYPQrVs3fP/993rHXF5dvVdr27lz53DixIkqjXKoKe+//77Wcv5siagsJphEVK+MGjVKa8KoUCiwcOFCjXKR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HrkhskRERERERFQ9mGCaIa4iS0REREREdRETTDPEVWSJiIiIiKguYoJJREREREREJsEEk4iIiIiIiEyCCSYRERERERGZBBNMIiIiIiIiMgkmmERERERERGQSTDDNELcpISIiIiKiuogJphniNiVERERERFQXMcEkIiIiIiIik2CCSURERERERCbBBJOIiIiIiIhMggkmERERERERmQQTTCIiIiIiIjIJJphmiNuUEBERERFRXcQE0wxxmxIiIiIiIqqLmGASERERERGRSTDBJCIiIiIiIpNggklEREREREQmwQSTiIiIiIiITIIJJhEREREREZkEE0wiIiIiIiIyCSaYREREREREZBJMMM1QWFgYgoODkZKSUtuhEBERERER6Y0JphkKDQ1FREQEPDw8ajsUIiIiIiIivTHBJCIiIiIiIpNggklEREREREQmwQSTiIiIiIiITIIJJhEREREREZkEE0wiIiIiIiIyCSaYREREREREZBJMMImIiIiIiMgkmGASERERERGRSTDBJCIiIiIiIpNggklEREREREQmwQTTDIWFhSE4OBgpKSm1HQoREREREZHemGCaodDQUERERMDDw6O2QyEiIiIiItIbE0wiIiIiIiIyCSaYREREREREZBJMMImIiIiIiMgkmGASERERERGRSTDBJCIiIiIiIpNggklEREREREQmwQSTiIiIiIiITIIJJhEREREREZkEE0wiIiIiIiIyCSaYREREREREZBJMMImIiIiIiMgkmGASERERERGRSVRLgnns2DFMnDgRnTp1QlBQELp27Yq33noLFy5cqI7m6p2wsDAEBwcjJSWltkMhIiIiIiLSm8kTzNDQUDz55JP47rvvcPnyZURFReHixYv4+uuv0b17dyxatMjUTdY7oaGhiIiIgIeHR22HQkREREREpDeTJpjffPMN1q1bBwAQBAGCIKj+DQBKpRILFy7E3r17TdksERERERERmQELU15s7dq1AACxWIymTZvCzc0NFhYWKCwsRGJiIhISEiAIAr744gsMGjTIlE0TERERERFRLTNZgimTyXDt2jX0798f27Ztg6urq0adK1euYOjQobh48aKpmiUiIiIiIiIzodcQ2dDQUGRlZVVYJzc3F4Ig4JVXXtGaXAJAu3bt8OSTTyI7O9vwSImIiIiIiMis6ZVgrlu3DkFBQdi8ebPOOg4ODpBIJFi9ejWuX7+ucVwmk+HPP//EH3/8ARcXlyoHTEREREREROZJrwSzU6dOSE1NxauvvoonnngCV69e1agjkUjQpUsX/PPPP2jXrh1sbGzQuHFjNG3aFJ6enrC1tcWwYcPw8OFD9OjRw+QvhIiIiIiIiGqXXgnm+fPnsX79eri4uODMmTPo1KkTJk+erDFs9v3331etGFtYWIiEhATExcUhJSUFcrkcgiBALBZj+vTppn8lREREREREVKv0SjBFIhFef/11REZG4s0334QgCPjyyy/RrFkztWGzw4cPx9KlSyESibRex9LSEuvXr0f37t1NEjwRERERERGZD4P2wXR2dsa6detw/vx5dOnSBWlpaRrDZmfPno2bN2/io48+wrBhw/Dkk0/iueeew9KlSxEdHY2JEydWywshIiIiIiKi2lWlbUo6duyIs2fP4ttvv8WcOXNUw2bfeustLF68GIGBgViwYIGJQyUiIiIiIiJzZlAPZnkTJ05EZGQk3n77bQBAWFgYgoKC8N1335kkOCIiIiIiIqo7jEowAcDR0RFr167FhQsX0K1bN6SmpmLixIk6V5slIiIiIiKi+smgIbIFBQXYuXMnLl++jKysLDg6OqJ9+/YYNmwY2rVrh9OnT+O7777D7Nmz1YbNfvzxx3BwcKiu10BERERERERmQO8E88CBAxg3bhzS09M1jrm6umLr1q0YMGAAxo8fj+HDh+PDDz/El19+ibCwMPzyyy9YuXIlXn75ZZMGT0REREREROZDryGyERERGD58ONLT01X7XJb14MEDDB8+HBEREQAABwcHrFmzBv/88w969OiB1NRUTJgwAT179sS1a9dM+wqIiIiIiIjILOiVYK5cuRKFhYWq5FIQBLUHABQWFuKTTz5RO69NmzY4efIkvv/+e3h4eOD06dPo1KkT3nvvPRO/DCIiIiIiIqpteiWYx44dg1QqxezZs3Hs2DHcunULd+7cwc2bN3Hs2DHMmjULEokER48e1Xr+Sy+9hNu3b2PKlCkAgLVr15rsBRAREREREZF50GsOZkpKCkaOHImlS5dqHAsKCkJISAji4+Px66+/6ryGvb09PvvsM7z66quYPHly1SMmIiIiIiIis6RXD6a1tTWuXLmChw8faj2emZmJK1euwNrautJrtWzZUmdPJ5UICwtDcHAwUlJSajsUIiIi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vKLhshKJBOnp6cY0S0RERERERGbIqB5MuVxu0F6NSqUSx44dM6ZJIiIiIiIiMlNGJZiurq7Yvn07bt26VWnd/Px8vPXWW4iKioKLi4sxzRIREREREZEZMmqIbLt27bB37160adMGjz/+OFq1aoWGDRvi3LlzAIDFixcjOzsbkZGROHHiBHJyciASidCyZUuTBF9fhYWFISwsDCkpKbUdChERERERkd6MSjAHDhyIvXv3Qi6X49SpUzh16pTqmCAIWLBggdpzoGR+5oABA4xptt4LDQ1FaGgofHx8kJCQUNvhEBERERER6cWoIbITJkyAh4eHalGf0u1KSpPJss9L69jb2+O1114zMmwiIiIiIiIyN0YlmDY2Nti6dSskEgmAkt5JXY/SpHP9+vVwcnIyOnAiIiIiIiIyL0YlmADQr18/7N+/H40aNaqwB9PZ2Rk///wzRo4caXTQREREREREZH6MmoNZqm/fvrhz5w62bduGgwcPIioqCtnZ2XBwcEDTpk3Rt29fjBs3DnZ2dqZojoiIiIiIiMyQUQnmyZMn1Z737dsXEyZMMCogIiIiIiIiqpuMSjB79+6tWrwHAObNm4dFixYZHRQRERERERHVPUYPkRUEATY2NnjzzTcxZMgQU8REREREREREdZBRCaaNjQ0KCgqwZs0avPrqq6aKiYiIiIiIiOogo1aRbdKkCQCgc+fOpoiFiIiIiIiI6jCjEswXX3wRAHDjxg29z/nqq6/Qt29fY5olIiIiIiIiM2RUgjl9+nS0bt0as2bNQlRUlF7nxMTE4MSJE8Y0S0RERERERGbIqDmY6enp2LRpE6ZPn462bdti3LhxePrppxEYGAh7e3u1FWZLZWdnG9MkERERERERmSmjEswmTZqokkhBELBx40Zs3LjRJIERERERERFR3WLUEFmgJLEUBAEikUj178oeVLGwsDAEBwcjJSWltkMhIiIiIiLSm9EJpkgkUvVilv67ogdVLjQ0FBEREfDw8KjtUIiIiIiIiPRm1BDZUuyVJCIiIiIiIpMkmMOGDYOjo6NedS9evIiIiAhTNEtERERERERmxCQJ5vLly9GsWTO96s6YMYMJJhERERERUT1kVILp6+sLkUgEqVSq9zkBAQHo1auXMc0SERERERGRGTIqwbx7967B50yaNAmTJk0yplkiIiIiIiIyQ0avIktEREREREQEmDDBTE9Px4oVK/D000/Dx8cHdnZ2qmPLly/HiRMnTNUUERERERERmSGTJJjr16+Hn58f5s6di0OHDiExMREFBQWq4z///DP69u2LESNGIDc31xRNEhERERERkZkxOsH83//+h7fffhv5+fk698Ps3bs37Ozs8Mcff2DUqFHGNklERERERERmyKgE8969e5gxYwYAQCQSQSQSaa23evVq3Lt3D0899RT27duHAwcOGNMsERERERERmSGjEswvv/wSMpkMACAIguqhjaOjI3788Ue4uLhg27ZtxjRLREREREREZsiobUqOHDkCAPD398eoUaPQsmVLuLi44Ntvv8Wvv/6qUd/R0RF9+/bFhQsXjGmWiIiIiIiIzJBRCWZsbCyCg4Nx8eJFWFtbq8oPHTqk8xwPDw/s27fPmGaJiIiIiIjIDBk1RDYnJwd9+/ZVSy4rExkZicLCQmOaJSIiIiIiIjNkVILp4OCAv//+W+e8y/KOHDmCw4cPw8HBwZhmiYiIiIiIyAwZNUS2adOmuHDhAnr37o0JEyagVatWaNiwIXJycgAA8fHxyMrKQmRkJPbs2YOtW7dCqVSicePGJgmeiIiIiIiIzIdRCWZISAguXryIv/76C3/99ZfaMUEQ4Ofnp1EmEonwxBNPGNMsERERERERmSGjhsi+8cYbEItLLlF2m5LSIbPaygBg4sSJxjRLREREREREZsioBDMwMBDTpk1T9UyWfQDQKBOJRHj55ZfRvn17kwRfX4WFhSE4OBgpKSm1HQoREREREZHejEowAWDZsmWYMGGCRi9laZIJ/NeTOXjwYKxbt87YJuu90NBQREREwMPDo7ZDISIiIiIi0pteCaZMJkN2djays7OhUCjUjkkkEnzzzTf4448/0LNnT0gkErVhsSKRCJ07d8aWLVvwxx9/GLSlCREREREREdUdei3yM336dISFhQEAtmzZgjFjxmjUGTJkCIYMGYK8vDzExsYiOzsbDg4O8PPzg729vWmjJiIiIiIiIrOjV4J55coVCIKAbt26oWXLlhXWtbW1RatWrUwSHBEREREREdUdeg2RvXPnDjp37owzZ86gbdu2qnKJRIJZs2YZ1GBsbCxOnjxpWJRERERERERk9vRKMLOzs9G5c2eN8vIL++jjyy+/RJ8+fQw6h4iIiIiIiMyfXglmQUEBLl26VN2xEBERERERUR2m1xxMe3t7nD9/Hn369MEzzzyDhg0bqrYhCQ8Px/fff693g+Hh4VWLlIiIiIiIiMyaXgnmY489hosXL+LkyZMa8yf379+P/fv3691g6dYlREREREREVL/oNUS2X79+qn+X3eOy/HN9HkRERERERFQ/6ZVgvvPOO7C1tQUAiEQi1aP8c30eREREREREVD/plWB6e3tj+/btcHFxYQ8mERERERERaaXXHEwAGDBgAO7fv4+TJ08iJSUFCoUCEydOxMCBA/Hiiy/q3eDPP/+MAwcOVClYIiIiIiIiMl96JZgymQwFBQUASuZjSiQSAMDEiRPRsmVLjB8/Xu8Gr1+/zgSTiIiIiIioHtJriOz06dPh7OwMZ2dn/Pzzz6ry+fPno3///gY1OHr0aHz77beGRUlERERERERmT68ezCtXrkAQBHTr1g0tW7ZUlc+fP9/gBjt27IiOHTsafB4RERERERGZN716MO/cuYPOnTvjzJkzaNu2rapcIpFg1qxZBjUYGxursZcmERERERER1X16JZjZ2dno3LmzRnlVVob98ssv0adPH4POISIiIiIiIvOnV4JZUFCAS5cuVXcsREREREREVIfpNQfT3t4e58+fR58+ffDMM8+gYcOGEIlEAIDw8HB8//33ejcYHh5etUiJiIiIiIjIrOmVYD722GO4ePEiTp48qTF/cv/+/di/f7/eDQqCoEpOiYiIiIiIqP7Qa4hsv379VP8unXdZOvey7HN9HkRERERERFQ/6ZVgvvPOO7C1tQUAiEQi1aP8c30eREREREREVD/plWB6e3tj+/btcHV1ZQ+mnhITE/H888+jefPmaNasGV5//XVkZ2fXdlhERERERETVRq85mAAwYMAA3Lt3DydPnkRKSgoUCgUmTpyIgQMH4sUXX9S7wZ9//hkHDhyoUrB1RWFhIfr164cePXogIiICcrkcQ4YMwXPPPYdDhw7VdnhERERERETVQu8EEwCsra0xYMAA1fOJEyeiZcuWGD9+vN7XuH79er1PML/55htERUXh5MmTEIvFsLS0xLJly9CxY0ccOHAATz31VG2HSEREREREZHJ6DZHVZf78+WoJpz5Gjx6Nb7/91phmjXbmzBkEBQVBJBLh7t27Jr/+zp070bJlS7i5uanK2rdvDwcHB+zYscPk7REREREREZkDoxPMJ5980qBzOnbs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ShUnERERERERmTmjEkwhBEJCQow6YM+ePfHjjz/CysoKX375Jfbv31+rAImIiIiIiKhxMCrBtLOzQ3FxsdEH/cc//oGNGzdCCIHXXnuNq8oSERERERE9BIxKMD08PPDrr7+atIfliy++iJdeegkpKSmYPn16jQMkIiIiIiKixsGoBNPPzw+XLl3CwoULTTr4unXr4Ovri08//VTv/plERERERET04DAqwezVqxeEEFi4cCH69euHzz//HDk5OdX2s7GxwZdffgmFQlHbOB8qERERCAgIQEZGRkOHQkREREREZDSjEsxHH30UwP3Ffg4fPoxXXnkFhw4dMuoEwcHBmDNnDoQQJl1i+zALDw9HfHw83NzcGjoUIiIiIiIioxm1D2ZQUBBWrlypVRYYGGj0Sd577z1kZ2cjNzfXtOiIiIiIiIio0TAqwbSysqrVQj0KhQJr166tcX8iIiIiIiIyf0ZdIktERERERERUHaNmMGsjJiYGY8aM0SqTyWRISEio61MTERERERFRParzBLOoqAhJSUlaZdyyhIiIiIiI6MFT55fIhoSEQK1Wa36ee+65uj4lERERERERNYB6vweTs5dEREREREQPJi7yQ0RERERERJJggklERERERESSYIJphiIiIhAQEICMjIyGDoWIiIiIiMhoRiWYL730Enbs2FHXsdD/hIeHIz4+Hm5ubg0dChERERERkdGMSjA3bdqE2NjYuo6FiIiIiIiIGjGj98HMy8vD9evXa33CO3fu1PoYREREREREZH6MTjAjIyMRGRlZl7EQERERERFRI2Z0ggkAQghJTsq9MImIiIiIiB48JiWYUiSGUiWpREREREREZF64TQkRERERERFJwugZTM48EhERERERUVWMTjAnTJiAWbNm1fqEU6ZMwY8//ljr4xAREREREZF5MTrBdHBwgLe3d61PaGtrW+tjEBERERERkfkx6h7MkJAQtGnTRpITtm/fHn369JHkWERERERERGQ+jJrBjI6OluyE8+bNw7x58yQ7HhEREREREZkHriJLREREREREkmCCSURERERERJJggmmGIiIiEBAQgIyMjIYOhYiIiIiIyGhMMM1QeHg44uPj4ebm1tChEBERERERGY0JJhEREREREUmCCSYRERERERFJggkmERERERERSYIJJhEREREREUmCCSYRERERERFJggkmERERERERSYIJJhEREREREUmCCSYRERERERFJggkmERERERERSYIJJhEREREREUmCCSYRERERERFJggkmERERERERSYIJJhEREREREUmCCSYRERERERFJggkmERERERERSYIJJhEREREREUmCCSYRERERERFJggkmERERERERSYIJphmKiIhAQEAAMjIyGjoUIiIiIiIiozHBNEPh4eGIj4+Hm5tbQ4dCRERERERkNCaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmERERERERCQJJphEREREREQkCSaYREREREREJAkmmHXkxIkTGDNmDPz9/dGxY0cEBgZi7dq1KC0tbejQiIiIiIiI6oRFQwfwoBoxYgRGjx6NP//8ExYWFoiJiUFoaCguXbqEDRs2NHR4REREREREkuMMZh1RKBRYsmQJLCzu5/A9evTAs88+i08//RSFhYUNHB0REREREZH0HogE88SJE2jXrh1kMhmSkpIaOhwAQHJyMhwcHLTK3N3dUVJSgjt37jRQVERERERERHWnUSeYhYWFmD59Ovr06YPLly+b1Hf//v0YMGAAmjZtCltbW3Tr1g0ff/wx1Gq1JLFZWVnplF25cgX+/v5wdnaW5BxERERERETmpNEmmAkJCejSpQt27dqFffv2mdR3+fLlGDJkCKytrXHw4EH8/vvvGDBgAKZMmYKwsLA6WYgnNTUV+/btwwcffCD5sYmIiIiIiMxBo00wz58/j/79++PPP//EgAEDjO537NgxzJw5EwEBAfjmm28QFBQEPz8/LF++HK+++iq+//57LF++XKvPpk2bIJPJqv3ZuXOn3nOq1WpMmDABL7zwAp555plavW4iIiIiIiJz1WhXkR02bBhGjBhhcr/3338fADBlyhRYWlpq1U2fPh2RkZFYsWIFpk2bBpVKBQAYOXIkevbsWe2xPTw89JZPmzYNCoUCERERJsdLRERERETUWDTa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th/lXnzxRWzatMnodsD9/SXXrFmDL7/8EleuXIFMJoOnpyf69euHt956C2lpaTqXpOo7jr74QkJCsHnzZixatAhRUVFITU2FhYUFWrdujeHDh2PatGmaS2MrOnDgAE6fPo3ffvsNly5dwq1bt3D79m2UlpbCzs4OLVu2RFBQEJ5++mkMGzZMq29oaCiOHDli8LV7e3sjKSnJ6HaVJSUlITIyEkeOHMHly5eRk5MDpVIJNzc3BAcHY+TIkXj66ad1Fmqq6N69e1i3bh127dqFy5cvIzc3FwqFAu7u7ujduzfmzJkDf39/g/2JiKh+McEkIiJqAPoSTEOXAxMRETUWvAeTiIiIiIiIJMEEk4iIiIiIiCTBBJOIiIiIiIgkwVVkiYiI6kl2djYWL16st658RVYAWLVqVX2GRUREJBku8kNERFRPkpKS0Lp162rb8aOZiIgaKyaYREREREREJAneg0lERERERESSYIJJREREREREkmCCSURERERERJJggklERERERESSYIJJREREREREkmCCSURERERERJJggklERERERESSYIJJREREREREkvh/GN/JSwi2lZMAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "plt.rc('font', family='DeJavu Serif', size=18)\n",
        "# plt.rcParams['font.family'] = 'Times New Roman'\n",
        "\n",
        "plt.figure(figsize=(10, 6))\n",
        "plt.plot(RelErr1, color=colors[3], linewidth=3)\n",
        "\n",
        "ax = plt.gca()\n",
        "ax.spines['bottom'].set_linewidth(2)  # X-axis line width\n",
        "ax.spines['left'].set_linewidth(2)    # Y-axis line width\n",
        "\n",
        "plt.xlabel('Snapshot', fontsize=20, weight='bold')\n",
        "plt.ylabel('L2 Norm Difference %', fontsize=20, weight='bold')\n",
        "\n",
        "plt.yscale('log')  # Set y-axis to logarithmic scale\n",
        "plt.xlim(0, 1000)  # X-axis range from 0 to 1\n",
        "plt.ylim(0.01, 100)  # Y-axis range from 0.01 to 100\n",
        "\n",
        "plt.yticks([0.01, 0.1, 1, 10, 100], fontsize=16, weight='normal')\n",
        "\n",
        "\n",
        "#plt.legend(frameon=True, edgecolor='black')\n",
        "# handles, labels = plt.gca().get_legend_handles_labels()\n",
        "# plt.legend(handles=handles, labels=labels, frameon=True, edgecolor='black', loc='upper center', bbox_to_anchor=(0.5, -0.15), fancybox=True, shadow=True, ncol=2)\n",
        "\n",
        "plt.grid(True)\n",
        "\n",
        "\n",
        "plt.title('Reconstruction Error', fontsize=24, weight='bold')\n",
        "\n",
        "# plt.savefig('fig.jpg', dpi=400, bbox_inches='tight')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "cktgziBff34m"
      },
      "source": [
        "# LSTM"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-8HDoX2bf34n"
      },
      "source": [
        "### Generating Input/Output Matrices"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 88,
      "metadata": {
        "id": "j60BSVHGf34n"
      },
      "outputs": [],
      "source": [
        "t = np.linspace(1, n_snapshots, num=n_snapshots)\n",
        "inputt = np.concatenate((t.reshape(-1, 1), interpolated_v_values.reshape(-1, 1), interpolated_P_values.reshape(-1, 1), q.T), axis=1)\n",
        "outputt = np.copy(q).T"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mwk8XwbIf34n"
      },
      "source": [
        "### Scaling Input/Output Matrices"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 89,
      "metadata": {
        "id": "kZrcP3cif34n"
      },
      "outputs": [],
      "source": [
        "min_vals_input = np.min(inputt, axis=0)\n",
        "max_vals_input = np.max(inputt, axis=0)\n",
        "input_scaled = inputt - min_vals_input[np.newaxis, :]\n",
        "input_scaled /= (max_vals_input - min_vals_input)[np.newaxis, :]\n",
        "\n",
        "min_vals_output = np.min(outputt, axis=0)\n",
        "max_vals_output = np.max(outputt, axis=0)\n",
        "output_scaled = outputt - min_vals_output[np.newaxis, :]\n",
        "output_scaled /= (max_vals_output - min_vals_output)[np.newaxis, :]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SKPpgg0Of34o"
      },
      "source": [
        "### Time Windowing (Sequencing)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 90,
      "metadata": {
        "id": "hPKPvo_Kf34o"
      },
      "outputs": [],
      "source": [
        "time_window = 100\n",
        "\n",
        "x_train = []\n",
        "y_train = []\n",
        "\n",
        "for i in range(0,len(input_scaled) - time_window -1):\n",
        "    x_train.append( input_scaled[i : (i+time_window) , :] )\n",
        "    y_train.append( output_scaled[i+time_window,:])\n",
        "\n",
        "total_x = np.array(x_train)\n",
        "total_y = np.array(y_train)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "pJiPrTGPf34o"
      },
      "source": [
        "### Train/Test Split"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 91,
      "metadata": {
        "id": "shK2UYaof34o"
      },
      "outputs": [],
      "source": [
        "Test_split = 0.8\n",
        "\n",
        "x_train = total_x[:int(Test_split * total_x.shape[0]),:,:]\n",
        "y_train = total_y[:int(Test_split * total_y.shape[0])]\n",
        "\n",
        "x_test = total_x[int(Test_split * total_x.shape[0]):, :,:]\n",
        "y_test = total_y[int(Test_split * total_y.shape[0]):]\n",
        "\n",
        "# Convert data to PyTorch tensors\n",
        "x_train = torch.tensor(x_train, dtype=torch.float32)\n",
        "y_train = torch.tensor(y_train, dtype=torch.float32)\n",
        "x_test = torch.tensor(x_test, dtype=torch.float32)\n",
        "y_test = torch.tensor(y_test, dtype=torch.float32)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d27e7H1Af34o"
      },
      "source": [
        "### LSTM Network"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 92,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "82CyZz2mf34p",
        "outputId": "1b2b8d3c-3f3b-4a00-8c6c-07294935c758"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Using device: cpu\n"
          ]
        }
      ],
      "source": [
        "# Device setup\n",
        "device = torch.device('cpu') if state_lstm=='load' else torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
        "print(f'Using device: {device}')\n",
        "\n",
        "# Hyperparameters\n",
        "input_size = num_modes + 3  # 3 = (t & v & P)\n",
        "hidden_size = 512\n",
        "output_size = num_modes\n",
        "sequence_length = time_window\n",
        "learning_rate = 0.00001\n",
        "num_epochs = 200000\n",
        "batch_size = 20\n",
        "early_stop_patience = 100\n",
        "dropout_prob = 0.2\n",
        "\n",
        "# LSTMNet definition\n",
        "class LSTMNet(nn.Module):\n",
        "    def __init__(self, input_size, hidden_size, output_size, dropout_prob):\n",
        "        super(LSTMNet, self).__init__()\n",
        "        self.hidden_size = hidden_size\n",
        "        self.lstm1 = nn.LSTM(input_size, hidden_size, num_layers=3, batch_first=True, dropout=dropout_prob)\n",
        "        self.fc1 = nn.Linear(hidden_size, output_size)\n",
        "\n",
        "        # Initialize LSTM weights\n",
        "        for name, param in self.lstm1.named_parameters():\n",
        "            if 'weight' in name:\n",
        "                init.xavier_normal_(param)\n",
        "            elif 'bias' in name:\n",
        "                init.constant_(param, 0.0)\n",
        "\n",
        "        # Initialize linear layer weights\n",
        "        init.xavier_normal_(self.fc1.weight)\n",
        "        init.constant_(self.fc1.bias, 0.0)\n",
        "\n",
        "    def forward(self, x):\n",
        "        h01 = torch.zeros(3, x.size(0), self.hidden_size, device=device).requires_grad_()\n",
        "        c01 = torch.zeros(3, x.size(0), self.hidden_size, device=device).requires_grad_()\n",
        "        out1, (h01, c01) = self.lstm1(x, (h01.detach(), c01.detach()))\n",
        "        out = nn.functional.relu(self.fc1(out1[:, -1, :]))\n",
        "        return out\n",
        "\n",
        "model_lstm = LSTMNet(input_size, hidden_size, output_size, dropout_prob).to(device)\n",
        "\n",
        "criterion = nn.MSELoss()\n",
        "optimizer = torch.optim.Adam(model_lstm.parameters(), lr=learning_rate)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "03St5AYaf34p"
      },
      "source": [
        "### Train"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Move the Data to GPU\n",
        "x_train = x_train.to(device)\n",
        "y_train = y_train.to(device)\n",
        "x_test = x_test.to(device)\n",
        "y_test = y_test.to(device)"
      ],
      "metadata": {
        "id": "9-NpI1Xz0vMx"
      },
      "execution_count": 93,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 94,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WcuV_oGVf34p",
        "outputId": "22507628-2e3b-41b4-bc87-f40ff6cb980c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model is loaded completely!\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-94-830c61203e9b>:49: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
            "  state_dict = torch.load(f'/content/drive/MyDrive/Paper/RoSo/{model}/{bc_name}/{name}', map_location=torch.device('cpu'))\n"
          ]
        }
      ],
      "source": [
        "name = f'LSTMNet_{model}_{bc_name}_{variable_name}.pt'\n",
        "\n",
        "best_loss = float('inf')\n",
        "early_stop_count = 0\n",
        "\n",
        "\n",
        "if state_lstm == 'train':\n",
        "    for epoch in range(num_epochs):\n",
        "        model_lstm.train()\n",
        "        for i in range(0, x_train.shape[0], batch_size):\n",
        "            batch_x = x_train[i:i+batch_size]\n",
        "            batch_y = y_train[i:i+batch_size]\n",
        "\n",
        "            # Forward pass\n",
        "            outputs = model_lstm(batch_x)\n",
        "\n",
        "            # Compute loss and backpropagation\n",
        "            loss = criterion(outputs, batch_y)\n",
        "            optimizer.zero_grad()\n",
        "            loss.backward()\n",
        "            optimizer.step()\n",
        "\n",
        "        # Evaluate the model on training and test data\n",
        "        with torch.no_grad():\n",
        "            model_lstm.eval()\n",
        "            train_outputs = model_lstm(x_train)\n",
        "            train_loss = criterion(train_outputs, y_train)\n",
        "            test_outputs = model_lstm(x_test)\n",
        "            test_loss = criterion(test_outputs, y_test)\n",
        "\n",
        "        # Print training and test loss every epoch\n",
        "        print('Epoch [{}/{}], Train Loss: {:.6f}, Test Loss: {:.6f}'.format(epoch+1, num_epochs, train_loss.item(), test_loss.item()))\n",
        "\n",
        "        # Check if the current test loss is the best so far\n",
        "        if test_loss < best_loss:\n",
        "            best_loss = test_loss\n",
        "            early_stop_count = 0\n",
        "\n",
        "            torch.save(model_lstm.state_dict(), name)\n",
        "            shutil.copy(name, f'/content/drive/MyDrive/Paper/RoSo/{model}/{bc_name}/')\n",
        "\n",
        "        else:\n",
        "            early_stop_count += 1\n",
        "            if early_stop_count == early_stop_patience:\n",
        "                print('Early stopping after {} epochs'.format(epoch+1))\n",
        "                break\n",
        "\n",
        "elif state_lstm == 'load':\n",
        "    state_dict = torch.load(f'/content/drive/MyDrive/Paper/RoSo/{model}/{bc_name}/{name}', map_location=torch.device('cpu'))\n",
        "    model_lstm.load_state_dict(state_dict)\n",
        "    model_lstm = model_lstm.to(torch.device('cpu'))\n",
        "\n",
        "    # Recheck the model is loaded completely!\n",
        "    missing_keys, unexpected_keys = model_lstm.load_state_dict(state_dict, strict=False)\n",
        "    if missing_keys or unexpected_keys:\n",
        "        print(\"Missing keys:\", missing_keys)\n",
        "        print(\"Unexpected keys:\", unexpected_keys)\n",
        "    else:\n",
        "        print(\"Model is loaded completely!\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "S8MKhkfaf34p"
      },
      "source": [
        "### Inference"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 95,
      "metadata": {
        "id": "o4t4mH-2f34p"
      },
      "outputs": [],
      "source": [
        "model_lstm.eval()\n",
        "with torch.no_grad():\n",
        "    x = x_test[0:1,:,:].cpu()\n",
        "    predict = model_lstm(x)\n",
        "    pred_final = []\n",
        "\n",
        "    for i in range (1,x_test.shape[0]):\n",
        "        pred_final.append(predict)\n",
        "        x = x_test[i:i+1, :, :]\n",
        "        x = x.to(device)\n",
        "        predict = model_lstm(x)\n",
        "\n",
        "pred_final = torch.cat(pred_final, dim=0).cpu().detach().numpy()"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "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.5"
    },
    "colab": {
      "provenance": [],
      "collapsed_sections": [
        "yNiFcBU9f34Q",
        "z6k9P75cf34a",
        "ob-RwiNyf34d",
        "qyURirjMf34e",
        "q7hVSxV9f34f",
        "gaDApmlSf34l",
        "-8HDoX2bf34n",
        "mwk8XwbIf34n",
        "SKPpgg0Of34o",
        "pJiPrTGPf34o",
        "d27e7H1Af34o"
      ],
      "machine_shape": "hm",
      "gpuType": "A100"
    },
    "accelerator": "GPU"
  },
  "nbformat": 4,
  "nbformat_minor": 0
}