{ "cells": [ { "cell_type": "markdown", "id": "f389f465-1007-443d-873b-d27bfa74cbc7", "metadata": {}, "source": [ "# External model tutorial\n", "\n", "In this tutorial you will learn the basics of the model interface for running an external model. The API for the model interface is provided here:\n", "\n", "https://pressio.github.io/rom-tools-and-workflows/romtools/workflows/models.html\n" ] }, { "cell_type": "code", "execution_count": 2, "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.workflows import models\n", "import os" ] }, { "cell_type": "code", "execution_count": 3, "id": "b1ffa4be-246c-44a9-b486-f517b9f7acb9", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "'''\n", "Here, we will interface around a model for solving the 1D advection diffusion problem.\n", "The model code is given in adr_1d/adr_1d.py, and it solves the 1d advection diffusion equation:\n", "\n", "c u_x - nu * u_xx = 1\n", "\n", "\n", "To run the code, a file \"params.dat\" is required in the run directory. \n", "This .dat file contains the parameters c,nu. \n", "Running the code outputs a solution.npz file with the keys x (grid) and u (solution)\n", "\n", "'''\n", "\n", "# Here is an example of how we would run the code\n", "if __name__ == \"__main__\":\n", " #First, let's create our parameters\n", " c = 1.\n", " nu = 1.e-2\n", " #Now, we will save them to a file expected by the adr_1d.py code\n", " np.savetxt('params.dat',np.array([c,nu]))\n", "\n", " #This is how we would execute our external code\n", " #(For a more sophisticated application, this is likely an mpi call to an executable or\n", " # a submission to the HPCs)\n", " os.system('python adr_1d/adr_1d.py')\n", "\n", " #Let's take a peak at a solution\n", " sol = np.load('solution.npz')\n", " plt.plot(sol['x'],sol['u'])\n", " plt.xlabel(r'$x$')\n", " plt.ylabel(r'$u$')\n", "\n", " # Now we will clean up the files we created\n", " os.system('rm params.dat')\n", " os.system('rm solution.npz')" ] }, { "cell_type": "code", "execution_count": 4, "id": "217759fb-6ec9-4488-897b-e5b4db9f4b2c", "metadata": {}, "outputs": [], "source": [ "## Now, let's create a romtools wrapper around this model that meets the API of the ModelClass\n", "class adrExternalRomToolsModel:\n", " def __init__(self):\n", " # Get path to adr code\n", " self.exec_dir_ = os.getcwd() + '/adr_1d/'\n", " \n", " def populate_run_directory(self, run_directory: str, parameter_sample: dict):\n", " # Here, we need to make a params.dat file in the run_directory\n", " c = parameter_sample['c']\n", " nu = parameter_sample['nu']\n", " np.savetxt(run_directory + '/params.dat',np.array([c,nu]))\n", " \n", " def run_model(self, run_directory: str, parameter_sample: dict):\n", " starting_dir = os.getcwd()\n", " os.chdir(run_directory)\n", " os.system('python ' + self.exec_dir_ + 'adr_1d.py')\n", " #To avoid confusion, we will move back to the directory we started from\n", " os.chdir(starting_dir)\n", " return 0\n", "\n", "#Now let's try initializing the model\n", "adr_for_romtools = adrExternalRomToolsModel()\n", "\n", "#That's it, we can use this in a sampling workflow. " ] }, { "cell_type": "code", "execution_count": 5, "id": "acefef0c-1bdc-4755-b726-8026268ced93", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Let's do an example run of the model similar to how it will be used in a workflow.\n", "\n", "#First, let's make a dictionary that is a stand in for the parameter space\n", "if __name__ == \"__main__\":\n", " parameter_sample = {}\n", " parameter_sample['c'] = 0.5\n", " parameter_sample['nu'] = 1e-1\n", " \n", " #Now, let's populate our run directory. In this example, we will just use the current run directory.\n", " #In a full workflow, romtools will manage creating directories\n", " adr_for_romtools.populate_run_directory(os.getcwd(),parameter_sample)\n", " \n", " #Now, let's run the model\n", " adr_for_romtools.run_model(os.getcwd(),parameter_sample)\n", "\n", " #We can look at a solution\n", " sol = np.load('solution.npz')\n", " plt.plot(sol['x'],sol['u'])\n", " plt.xlabel(r'$x$')\n", " plt.ylabel(r'$u$')\n", "\n", " #We will finish by cleaning up the files we created\n", " os.system('rm params.dat')\n", " os.system('rm solution.npz')\n", "\n", " #That's it! See the sampling tutorial for an example of how this model is used in a sampling workflow" ] }, { "cell_type": "code", "execution_count": null, "id": "ca67434d-b549-47af-a801-66ab381c4262", "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.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }