{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/A.03-Modular-Simulation-using-Python-Generators.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [CBE32338](https://jckantor.github.io/CBE32338);\n", "content is available [on Github](https://github.com/jckantor/CBE32338.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/A.03-Modular-Simulation-using-Python-Generators.html)", "section": "" } }, "source": [ "\n", "< [A.2 Modular Simulation using Python Generators](https://jckantor.github.io/CBE32338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html) | [Contents](toc.html) | [A.4 Animation in Jupyter Notebooks](https://jckantor.github.io/CBE32338/A.04-Animation-in-Jupyter-Notebooks.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[A.3 A Modular Approach to Simulation using Python Generators](https://jckantor.github.io/CBE32338/A.03-Modular-Simulation-using-Python-Generators.html#A.3-A-Modular-Approach-to-Simulation-using-Python-Generators)",
"section": "A.3 A Modular Approach to Simulation using Python Generators"
}
},
"source": [
"# A.3 A Modular Approach to Simulation using Python Generators\n",
"\n",
"by Jeffrey Kantor (jeff at nd.edu). The latest version of this notebook is available at [https://github.com/jckantor/CBE30338](https://github.com/jckantor/CBE30338). \n",
"\n",
"### Summary\n",
"\n",
"This notebook demonstrates shows how to use the Python generators for simulation. This technique implements simulation blocks as Python generators, and shows how to piece blocks together to simulate more complex systems. This is an advanced technique that may be useful in certain projects and a convenient alternative to block diagram simulators.\n",
"\n",
"### Table of Contents\n",
"\n",
"1. [Simulation using scipy.integrate.odeint()](#section1)\n",
" 1. [Typical Usage](#section1-1)\n",
" 2. [What's Wrong with That? ](#section1-2)
\n",
"2. [Python Generators](#section2)\n",
" 1. [Yield Statement](#section2-1)\n",
" 2. [Iterators](#section2-2)\n",
" 3. [Two-way communcation with Generators using Send](#section2-3)
\n",
"3. [Example Application: Modeling Gravity-Drained Tanks with Python Generators](#section3)\n",
" 1. [Generator for a Gravity-Drained Tank](#section3-1)\n",
" 2. [Simulation of a Single Tank with Constant Inflow](#section3-2)\n",
" 3. [Simulation of Two Tanks in Series](#section3-3)\n",
" 4. [Simulation of Two Tanks in Series with PI Level Control on the Second Tank](#section3-4)\n",
" 5. [Adding a PI Control Generator](#section3-5)\n",
" 6. [Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance](#section3-6)
\n",
"4. [Enhancing Modularity with Class Definitions for Process Units](#section4)\n",
" 1. [Gravity-Drained Tank Class](#section4-1)\n",
" 2. [PI Controller Class](#section4-2)\n",
" 3. [Modular Simulation of Cascade Control for Two Tanks in Series](#section4-3)
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[A.3 A Modular Approach to Simulation using Python Generators](https://jckantor.github.io/CBE32338/A.03-Modular-Simulation-using-Python-Generators.html#A.3-A-Modular-Approach-to-Simulation-using-Python-Generators)",
"section": "A.3 A Modular Approach to Simulation using Python Generators"
}
},
"source": [
"\n",
"## Simulation using scipy.integrate.odeint()\n",
"\n",
"\n",
"### Typical Usage\n",
"\n",
"The SciPy library provides a convenient and familiar means of simulating systems modeled by systems of ordinary differential equations. As demonstrated in other notebooks, the straightforward approach consists of several common steps\n",
"\n",
"1. Initialize graphics and import libraries\n",
"2. Fix parameter values\n",
"3. Write a function to evaluate RHS of the differential equations\n",
"4. Choose initial conditions and time grid\n",
"5. Perform the simulation by numerical solution of the differential equations\n",
"6. Prepare visualizations and post-processing\n",
"\n",
"Here we demonstrate this approach for a two gravity-drained tanks connected in series with constant inflow."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"nbpages": {
"level": 1,
"link": "[A.3 A Modular Approach to Simulation using Python Generators](https://jckantor.github.io/CBE32338/A.03-Modular-Simulation-using-Python-Generators.html#A.3-A-Modular-Approach-to-Simulation-using-Python-Generators)",
"section": "A.3 A Modular Approach to Simulation using Python Generators"
}
},
"outputs": [
{
"data": {
"image/png": "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\nScEYY0yT/w/LWN3tD38gFwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda root]",
"language": "python",
"name": "conda-root-py"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}