{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE20255](https://jckantor.github.io/CBE20255)\n", "by Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE20255.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", "< [Ethylene Oxide Flowsheet](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/04.02-Ethylene-Oxide-Flowsheet.ipynb) | [Contents](toc.ipynb) | [Unsteady-State Material Balances](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/04.04-Unsteady-State-Material-Balances.ipynb) >

\"Open" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# General Mass Balance on a Single Tank" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "This [Jupyter notebook](http://jupyter.org/notebook.html) demonstrates the application of a mass balance to a simple water tank. This example is adapted with permission from [learnCheme.com](http://learncheme.ning.com/), a project at the University of Colorado funded by the National Science Foundation and the Shell Corporation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Problem Statement" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Draw a Diagram" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Mass Balance" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "Using our general principles for a mass balance\n", "\n", "$\\frac{d(\\rho V)}{dt} = \\dot{m}_1 - \\dot{m}_2$\n", "\n", "which can be simplified to\n", "\n", "$\\frac{dV}{dt} = \\frac{1}{\\rho}\\left(\\dot{m}_1 - \\dot{m}_2\\right)$\n", "\n", "where the initial value is $V(0) = 1\\,\\mbox{m}^3$. This is a differential equation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Numerical Solution using `odeint`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "There are a number of numerical methods available for solving differential equations. Here we use [`odeint`](http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html) which is part of the [`scipy`](http://www.scipy.org/) package. `odeint` requires a function that returns the rate of accumulation in the tank as a function of the current volume and time." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from scipy.integrate import odeint" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Flowrates in kg/sec\n", "m1 = 4.0\n", "m2 = 2.0\n", "\n", "# Density in kg/m**3\n", "rho = 1000.0\n", "\n", "# Function to compute accumulation rate\n", "def dV(V,t): return (m1 - m2)/rho;" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Next we import `odeint` from the `scipy.integrate` package, set up a grid of times at which we wish to find solution values, then call `odeint` to compute values for the solution starting with an initial condition of 1.0." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "t = np.linspace(0,1000)\n", "V = odeint(dV,1.0,t)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "We finish by plotting the results of the integration and comparing to the capacity of the tank." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(t,V,'b',t,2*np.ones(len(t)),'r')\n", "plt.xlabel('Time [sec]')\n", "plt.ylabel('Volume [m**3]')\n", "plt.legend(['Water Volume','Tank Capacity'],loc='upper left');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This same approach can be used solve systems of differential equations. For an light-hearted (but very useful) example, check out [this solution](http://wiki.scipy.org/Cookbook/Zombie_Apocalypse_ODEINT) for the [Zombie Apocalypse](http://mysite.science.uottawa.ca/rsmith43/Zombies.pdf)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Solving for the Time Required to Fill the Tank" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now that we know how to solve the differential equation, next we create a function to compute the air volume of the tank at any given time." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Air volume in the tank at t = 100 is 0.80 m**3.\n" ] } ], "source": [ "Vtank = 2.0\n", "Vinitial = 1.0\n", "\n", "def Vwater(t): \n", " return odeint(dV,Vinitial,[0,t])[-1][0]\n", "\n", "def Vair(t): \n", " return Vtank - Vwater(t)\n", "\n", "print(\"Air volume in the tank at t = 100 is {:4.2f} m**3.\".format(Vair(100)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The next step is find the time at which `Vair(t)` returns a value of 0. This is [root finding](http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#root-finding) which the function [`brentq`](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.optimize.brentq.html) will do for us." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The tank will be full at t = 500.00 seconds.\n" ] } ], "source": [ "from scipy.optimize import brentq\n", "\n", "t_full = brentq(Vair,0,1000)\n", "\n", "print(\"The tank will be full at t = {:6.2f} seconds.\".format(t_full))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose the tank was being used to protect against surges in water flow, and the inlet flowrate was a function of time where\n", "\n", "$\\dot{m}_1 = 4 e^{-t/500}$\n", "\n", "* Will the tank overflow? \n", "* Assuming it doesn't overflow, how long would it take for the tank to return to its initial condition of being half full? To empty completely?\n", "* What will be the peak volume of water in the tank, and when will that occur?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Ethylene Oxide Flowsheet](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/04.02-Ethylene-Oxide-Flowsheet.ipynb) | [Contents](toc.ipynb) | [Unsteady-State Material Balances](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/04.04-Unsteady-State-Material-Balances.ipynb) >

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