{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE30338](https://jckantor.github.io/CBE30338)\n", "by Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE30338.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Fed-Batch Bioreactor](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/02.07-Fed-Batch-Bioreactor.ipynb) | [Contents](toc.ipynb) | [Linearization](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/03.00-Linearization.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model Library" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 185, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.integrate import odeint,ode\n", "\n", "class GravityTank():\n", " \n", " def __init__(self, A=1, Cv=1, h = 0):\n", " self.A = A\n", " self.Cv = Cv\n", " self.Qin = 0\n", " self._h = h\n", " self.IC = self._h\n", " \n", " def deriv(self,h,t):\n", " h = max(0,h)\n", " self._h = h\n", " return (self.Qin/self.A - self.Cv*np.sqrt(h)/self.A)\n", " \n", " @property\n", " def Qin(self):\n", " return self._Qin\n", " \n", " @Qin.setter\n", " def Qin(self,Qin):\n", " self._Qin = Qin\n", " \n", " @property\n", " def Qout(self):\n", " return self.Cv*np.sqrt(self._h)\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tank1 = GravityTank(2,1)\n", "tank2 = GravityTank(1.5,2)\n", "\n", "t = np.linspace(0,.1,50)\n", "tank1.Qin = 3\n", "\n", "def deriv(X,t):\n", " h1,h2 = X\n", " tank2.Qin = tank1.Qout\n", " dh1 = tank1.deriv(h1,t)\n", " dh2 = tank2.deriv(h2,t)\n", " #print(\"{0:9.6f} {1:9.6f} {2:9.6f} {3:9.6f} {4:9.6f} {5:9.6f} {6:9.6f} {7:9.6f} {8:9.6f}\".format(h1,h2,tank1.Qin,tank1.Qout,tank2.Qin,tank2.Qout,dh1,dh2,t))\n", " return [dh1,dh2]\n", "\n", "\n", "sol = odeint(deriv,[0,0],t)\n", "h1,h2 = sol.T\n", "plt.plot(t,h2)" ] }, { "cell_type": "code", "execution_count": 165, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jeff/anaconda/lib/python3.5/site-packages/scipy/integrate/_ode.py:869: UserWarning: vode: Excess work done on this call. (Perhaps wrong MF.)\n", " 'Unexpected istate=%s' % istate))\n" ] }, { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tank1 = GravityTank(2,1)\n", "tank2 = GravityTank(1.5,1)\n", "tank3 = GravityTank(0.8,0.9)\n", "\n", "tank1.Qin = 3\n", "\n", "def deriv(t,X):\n", " h1,h2,h3 = X\n", " tank2.Qin = tank1.Qout\n", " tank3.Qin = tank2.Qout\n", " dh1 = tank1.deriv(h1,t)\n", " dh2 = tank2.deriv(h2,t)\n", " dh3 = tank3.deriv(h3,t)\n", " return [dh1,dh2,dh3]\n", "\n", "\n", "de = ode(deriv)\n", "de.set_initial_value(IC,0)\n", "\n", "ts = []\n", "ys = []\n", "t_end = 10\n", "t_step = .2\n", "\n", "while de.successful() and de.t < t_end:\n", " de.integrate(de.t + t_step)\n", " ts.append(de.t)\n", " ys.append(de.y)\n", "\n", "plt.plot(ts,ys)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 0, 0]\n", "[1.5, 0.0, 0.0]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jeff/anaconda/lib/python3.5/site-packages/scipy/integrate/odepack.py:218: ODEintWarning: Excess work done on this call (perhaps wrong Dfun type). Run with full_output = 1 to get quantitative information.\n", " warnings.warn(warning_msg, ODEintWarning)\n" ] }, { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "IC = [tank1.IC] + [tank2.IC] + [tank3.IC]\n", "print(IC)\n", "print(deriv(IC,0))\n", "t = np.linspace(0,45,500)\n", "sol = odeint(deriv,IC,t)\n", "plt.plot(t,sol)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tank3.Qin" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Fed-Batch Bioreactor](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/02.07-Fed-Batch-Bioreactor.ipynb) | [Contents](toc.ipynb) | [Linearization](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/03.00-Linearization.ipynb) >

\"Open

\"Download\"" ] } ], "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.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }