{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Numerical simulation of the Michaelis-Menten system\n",
    "\n",
    "We are interested in solving the non-dimensionalised model\n",
    "\n",
    "\\begin{eqnarray} \n",
    "\\frac{\\partial u}{\\partial \\tau}&=&-u+(u+K-\\lambda)v,\\\\\n",
    "\\epsilon\\frac{\\partial v}{\\partial \\tau}&=&u-(u+K)v,\n",
    "\\end{eqnarray}\n",
    "\n",
    "where $u$ is the substrate concentration and $v$ is the complex concentration, with $u(0)=1.0$ and $v(0)=0.0$. \n",
    "\n",
    "Note that $\\epsilon$ is, in general, a very small parameter and so we expect there to be a boundary layer around $t=0$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from scipy import integrate\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "\n",
    "#set the plotting parameters\n",
    "plt.rcParams.update({\n",
    "    \"text.usetex\": True,\n",
    "    \"font.family\": \"serif\",\n",
    "    \"font.serif\": [\"Times New Roman\"],\n",
    "    \"font.size\": 18,\n",
    "    \"axes.linewidth\": 1.5,\n",
    "})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# set up the non-dimensionalised ODE system\n",
    "\n",
    "def f(tau,y,args):\n",
    "    \n",
    "    K,Lambda,epsilon=args\n",
    "    \n",
    "    derivs=np.zeros(2)\n",
    "    \n",
    "    # specify the derivatives\n",
    "    derivs[0]=-y[0]+(y[0]+K-Lambda)*y[1]\n",
    "    derivs[1]=1.0/epsilon*(y[0]-(y[0]+K)*y[1])\n",
    "    \n",
    "    return derivs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# model parameters\n",
    "\n",
    "K=0.03; \n",
    "Lambda=1.0;\n",
    "epsilon=1e-5;\n",
    "\n",
    "args=[K,Lambda,epsilon]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# solve over two different time horizons to capture the different dynamical regimes:\n",
    "\n",
    "# the long time scale\n",
    "t1_final=1.25 # final time\n",
    "dt1=1e-4 # output timestep\n",
    "t1=np.arange(0,t1_final+dt1,dt1)\n",
    "\n",
    "# the short time scale\n",
    "t2_final=1e-4; # final time\n",
    "dt2=2e-6 # output timestep\n",
    "t2=np.arange(0,t2_final+dt2,dt2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# initial conditions\n",
    "y0=np.zeros(2)\n",
    "y0[0]=1.0\n",
    "y0[1]=0.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# set up the ODE solver for the long time scale\n",
    "y1=np.empty((len(t1),len(y0)),dtype=np.float)\n",
    "r1=integrate.ode(f)\n",
    "r1.set_integrator('lsoda', method='bdf');\n",
    "r1.set_initial_value(y0,t1[0]);\n",
    "r1.set_f_params(args);\n",
    "\n",
    "# set up the ODE solver for the short time scale\n",
    "y2=np.empty((len(t2),len(y0)),dtype=np.float)\n",
    "r2=integrate.ode(f)\n",
    "r2.set_integrator('lsoda', method='bdf');\n",
    "r2.set_initial_value(y0,t2[0]);\n",
    "r2.set_f_params(args);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# solve the ODE on the long time scale\n",
    "idx=0\n",
    "while r1.successful() and r1.t<=t1_final:\n",
    "    y1[idx,:]=r1.y\n",
    "    r1.integrate(r1.t+dt1)\n",
    "    idx+=1\n",
    "    \n",
    "# solve the ODE on the short time scale\n",
    "idx=0\n",
    "while r2.successful() and r2.t<=t2_final:\n",
    "    y2[idx,:]=r2.y\n",
    "    r2.integrate(r2.t+dt2)\n",
    "    idx+=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the results\n",
    "\n",
    "fig,ax=plt.subplots(1,2,figsize=(12,5))\n",
    "fig.tight_layout(pad=3.0)\n",
    "\n",
    "ax[0].plot(t1,y1[:,0],label=\"u\")\n",
    "ax[0].plot(t1,y1[:,1],label=\"v\")\n",
    "ax[0].set_xlabel(\"time\")\n",
    "ax[0].set_ylabel(\"concentration\")\n",
    "\n",
    "ax[1].plot(t2,y2[:,0],label=\"u\")\n",
    "ax[1].plot(t2,y2[:,1],label=\"v\")\n",
    "ax[1].set_xlim(0,1e-4)\n",
    "ax[1].set_xlabel(\"time\")\n",
    "ax[1].set_ylabel(\"concentration\");\n",
    "ax[1].set_xticks(np.arange(0, 1.5e-4, 0.5e-4))\n",
    "\n",
    "# to save the figure\n",
    "# outputpath='../Lecture Notes/Chapter_EnzymeKinetics/figures/Michaelis_Menten.pdf'\n",
    "# plt.savefig(outputpath,bbox_inches=\"tight\", pad_inches=0.1);  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
