{ "cells": [ { "cell_type": "markdown", "id": "f389f465-1007-443d-873b-d27bfa74cbc7", "metadata": {}, "source": [ "# Dictionary vector space tutorial\n", "In this tutorial you will learn:\n", "- How to construct a vector space using a snapshot data tensor" ] }, { "cell_type": "code", "execution_count": 24, "id": "358fb709-9c81-45a3-a871-2549de121580", "metadata": {}, "outputs": [], "source": [ "#First, let's import the relavant modules:\n", "import romtools\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from romtools import vector_space" ] }, { "cell_type": "code", "execution_count": 25, "id": "b1ffa4be-246c-44a9-b486-f517b9f7acb9", "metadata": {}, "outputs": [ { "data": { "image/png": "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uMOKjo62/9aF0jgTcILopZdesvr27WtFRkZaQ4YMsbfdouXeeecdS1KTx6RJkyzLOr0Ncd68eVZ8fLzl8/msn//851ZxcXHAa3z33XfWtGnTrC5dulgdOnSw7rjjDqukpMSBTxOamhtfSdarr75qt2Gcg+O+++6zfyd0797duuWWW+xwY1mMc2v6fsBhrIPDf1+biIgIKyEhwRo/fry1e/du+/uhNM4ey7Ks4NaEAAAAnMUaHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAMbxeDzauHGj090A4CACDoCQMnnyZI0bN87pbgBo5wg4AADAOAQcACFrxIgRmjFjhn7/+9+rS5cuio+P1xNPPBHQZt++ffr5z3+uqKgoXXPNNcrNzW3yOocPH1ZGRoYuvfRSde3aVXfeeae++OILSdK///1vdezYUa+//rrdfv369YqKilJxcXFrfjwArYiAAyCkvfbaa+rUqZM++OADPfPMM5o/f74dYhoaGjR+/HiFh4fr/fff19KlS/WHP/wh4PnffvutRo4cqc6dO2vLli3aunWrOnfurF/84heqra3V1VdfrWeffVYPPPCADh48qCNHjui3v/2tFixYoOuuu86JjwwgCDhNHEBImTx5sr755htt3LhRI0aMUH19vfLz8+3vDxs2TKNGjdKCBQu0efNmjR49Wl988YV69+4tSdq0aZPS09O1YcMGjRs3TitWrNAzzzyjvXv3yuPxSJJqa2t1ySWXaOPGjUpLS5Mk3XHHHaqqqlJkZKTCwsL09ttv2+0BtD9epzsAAOczaNCggK979uypiooKSdLevXvVp08fO9xIUkpKSkD7goIC/ec//1F0dHTA9ZMnT+rzzz+3v16xYoX69eunsLAw7dq1i3ADtHMEHAAhLSIiIuBrj8ejhoYGSVJzBejvB5OGhgYlJydr9erVTdp2797d/u+PP/5YJ06cUFhYmMrLy5WQkBCM7gNwCAEHQLt1zTXXqKSkREeOHLEDyfbt2wPaDBkyRGvXrlWPHj0UExPT7Ot89dVXmjx5subOnavy8nLdfffd2rlzpzp06NDqnwFA62CRMYB269Zbb1X//v01ceJEffzxx8rPz9fcuXMD2tx9993q1q2b7rzzTuXn5+vAgQPKy8vTzJkzdejQIUlSZmamEhMT9V//9V9auHChLMvSww8/7MRHAhAkBBwA7VZYWJg2bNigmpoaDRs2TFOnTtXTTz8d0KZjx47asmWL+vTpo/Hjx2vAgAG677779N133ykmJkarVq1STk6O/vKXv8jr9apjx45avXq1li1bppycHIc+GYAfi11UAADAOFRwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGCc/w/e2WI5cmW0jAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now, we will load in snapshots from a FOM. Here, we use pre-computed snapshots of the 1D Euler equations obtained using pressio-demo-apps\n", "snapshots = np.load('snapshots.npz')['snapshots']\n", "\n", "## The snapshots are in tensor form:\n", "n_vars, nx, nt = snapshots.shape\n", "## Note that romtools works with tensor forms (https://pressio.github.io/rom-tools-and-workflows/romtools/vector_space.html)\n", "\n", "#Let's look at the first density snapshot:\n", "\n", "plt.plot(snapshots[0,:,0])\n", "plt.xlabel(r'Index')\n", "plt.ylabel(r'$\\rho$')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 26, "id": "217759fb-6ec9-4488-897b-e5b4db9f4b2c", "metadata": {}, "outputs": [ { "data": { "image/png": "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uMOKjo62/9aF0jgTcILopZdesvr27WtFRkZaQ4YMsbfdouXeeecdS1KTx6RJkyzLOr0Ncd68eVZ8fLzl8/msn//851ZxcXHAa3z33XfWtGnTrC5dulgdOnSw7rjjDqukpMSBTxOamhtfSdarr75qt2Gcg+O+++6zfyd0797duuWWW+xwY1mMc2v6fsBhrIPDf1+biIgIKyEhwRo/fry1e/du+/uhNM4ey7Ks4NaEAAAAnMUaHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAMbxeDzauHGj090A4CACDoCQMnnyZI0bN87pbgBo5wg4AADAOAQcACFrxIgRmjFjhn7/+9+rS5cuio+P1xNPPBHQZt++ffr5z3+uqKgoXXPNNcrNzW3yOocPH1ZGRoYuvfRSde3aVXfeeae++OILSdK///1vdezYUa+//rrdfv369YqKilJxcXFrfjwArYiAAyCkvfbaa+rUqZM++OADPfPMM5o/f74dYhoaGjR+/HiFh4fr/fff19KlS/WHP/wh4PnffvutRo4cqc6dO2vLli3aunWrOnfurF/84heqra3V1VdfrWeffVYPPPCADh48qCNHjui3v/2tFixYoOuuu86JjwwgCDhNHEBImTx5sr755htt3LhRI0aMUH19vfLz8+3vDxs2TKNGjdKCBQu0efNmjR49Wl988YV69+4tSdq0aZPS09O1YcMGjRs3TitWrNAzzzyjvXv3yuPxSJJqa2t1ySWXaOPGjUpLS5Mk3XHHHaqqqlJkZKTCwsL09ttv2+0BtD9epzsAAOczaNCggK979uypiooKSdLevXvVp08fO9xIUkpKSkD7goIC/ec//1F0dHTA9ZMnT+rzzz+3v16xYoX69eunsLAw7dq1i3ADtHMEHAAhLSIiIuBrj8ejhoYGSVJzBejvB5OGhgYlJydr9erVTdp2797d/u+PP/5YJ06cUFhYmMrLy5WQkBCM7gNwCAEHQLt1zTXXqKSkREeOHLEDyfbt2wPaDBkyRGvXrlWPHj0UExPT7Ot89dVXmjx5subOnavy8nLdfffd2rlzpzp06NDqnwFA62CRMYB269Zbb1X//v01ceJEffzxx8rPz9fcuXMD2tx9993q1q2b7rzzTuXn5+vAgQPKy8vTzJkzdejQIUlSZmamEhMT9V//9V9auHChLMvSww8/7MRHAhAkBBwA7VZYWJg2bNigmpoaDRs2TFOnTtXTTz8d0KZjx47asmWL+vTpo/Hjx2vAgAG677779N133ykmJkarVq1STk6O/vKXv8jr9apjx45avXq1li1bppycHIc+GYAfi11UAADAOFRwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGCc/w/e2WI5cmW0jAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now, let's make a dictionary basis (no truncation) that uses the first vector as an affine offset\n", "#First, let's create a \"shifter\" that is responsible for shifting snapshots\n", "#(https://pressio.github.io/rom-tools-and-workflows/romtools/vector_space/utils/shifter.html)\n", "my_shifter = vector_space.utils.create_firstvec_shifter(snapshots)\n", "\n", "#We can look at the shift vector if we want:\n", "shift_vec = my_shifter.get_shift_vector()\n", "plt.plot(shift_vec[0])\n", "plt.xlabel(r'Index')\n", "plt.ylabel(r'$\\rho$')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 28, "id": "8dddecd2-01f7-4b7c-955e-456a1974fefb", "metadata": {}, "outputs": [ { "data": { "image/png": "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Xq86d+6ssWPH6tixYxfwLNq/hQsX6p//+Z8VHx+v7t2769Zbb1VpaWlIGdr6/P3+979X3759zYn7MjIy9P7775vbaeO2sXDhQrlcLs2aNctcR1u3jvz8fLlcrpDF5/OZ29tVOxtot1asWGHExMQYr7zyivGXv/zFuP/++43OnTsbn332md1VixgrV640Hn30UeOtt94yJBmFhYUh25944gkjPj7eeOutt4x9+/YZEydONJKSkoyqqiqzzPTp041/+qd/MoqKioxdu3YZQ4cONfr162d88803F/hs2q8RI0YYr7/+ulFSUmIUFxcbo0aNMq644gqjurraLENbn793333XeO+994zS0lKjtLTUeOSRR4yYmBijpKTEMAzauC189NFHRo8ePYy+ffsa999/v7metm4dc+fONa6//nqjvLzcXCoqKszt7amdCUzt2KBBg4zp06eHrOvdu7fx8MMP21SjyPb9wFRfX2/4fD7jiSeeMNd9/fXXhsfjMV566SXDMAzj5MmTRkxMjLFixQqzzOeff2506NDBWLVq1QWre6SpqKgwJBkbNmwwDIO2bktdu3Y1Xn31Vdq4DZw6dcro2bOnUVRUZNx4441mYKKtW8/cuXONfv36nXVbe2tnLsm1UzU1Ndq5c6eys7ND1mdnZ2vz5s021ericvjwYfn9/pA2drvduvHGG8023rlzp2pra0PKJCcnKy0tjX+HMAKBgCSpW7dukmjrtlBXV6cVK1boH//4hzIyMmjjNvBv//ZvGjVqlIYPHx6ynrZuXQcPHlRycrJSU1OVk5OjTz/9VFL7a2cevttO/e1vf1NdXZ0SExND1icmJsrv99tUq4tLQzuerY0/++wzs0xsbKy6du3apAz/DmdnGIYeeOAB/eQnP1FaWpok2ro17du3TxkZGfr66691ySWXqLCwUNddd535y4E2bh0rVqzQrl27tH379ibb+P/cegYPHqw33nhD11xzjU6cOKH/+I//UGZmpvbv39/u2pnA1M65XK6Q14ZhNFmH8/ND2ph/h+bNmDFDe/fu1aZNm5pso63PX69evVRcXKyTJ0/qrbfe0q9+9Stt2LDB3E4bn7+jR4/q/vvv1+rVq9WxY8dmy9HW5+/mm282f+7Tp48yMjJ09dVXa+nSpRoyZIik9tPOXJJrp7xer6Kiopok5IqKiiZpGz9Mw50Y4drY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now, let's construct an affine vector space using this as a shifter\n", "#Note we don't use the first snapshot in the vector space since this is the affine offset\n", "my_affine_vector_space = vector_space.DictionaryVectorSpace(snapshots[...,1::],shifter=my_shifter)\n", "\n", "##It's important to note that we do not do a deep copy of the snapshot matrix for performance reasons.\n", "##Once you pass us the snapshot tensor, we will modify the data in place. \n", "\n", "\n", "#What if I didn't what an affine offset? We can just do:\n", "#my_vector_space = vector_space.DictionaryVectorSpace(snapshots)\n", "\n", "#We can view the basis and shift vector:\n", "basis = my_affine_vector_space.get_basis()\n", "shift_vector = my_affine_vector_space.get_shift_vector()\n", "\n", "#We can look at the density compoenent of the first basis:\n", "plt.plot(basis[0,:,0])\n", "plt.xlabel(r'Index')\n", "plt.ylabel(r'$\\rho$')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "8d254c75-a66f-4168-9815-8674e11ec572", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }