{ "cells": [ { "cell_type": "markdown", "id": "d95ea367", "metadata": {}, "source": [ "\n", "*This notebook contains material from [CBE30338](https://jckantor.github.io/CBE30338);\n", "content is available [on Github](https://github.com/jckantor/CBE30338.git).*\n" ] }, { "cell_type": "markdown", "id": "3e18d162", "metadata": {}, "source": [ "\n", "< [7.3 Simulation in Pyomo](https://jckantor.github.io/CBE30338/07.03-Simulation-in-Pyomo.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [7.5 First Order System in Pyomo](https://jckantor.github.io/CBE30338/07.05-First-Order-System-in-Pyomo.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[7.4 Simulation of an Exothermic CSTR](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4-Simulation-of-an-Exothermic-CSTR)",
"section": "7.4 Simulation of an Exothermic CSTR"
}
},
"source": [
"# 7.4 Simulation of an Exothermic CSTR"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.4.1 Description](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4.1-Description)",
"section": "7.4.1 Description"
}
},
"source": [
"## 7.4.1 Description\n",
"\n",
"This example is intended as an introduction to the nonlinear dynamics of an exothermic continuous stirred-tank reactor. The example has been studied by countless researchers and students since the pioneering work of Amundson and Aris in the 1950's. The particular formulation and parameter values described below are taken from example 2.5 from Seborg, Edgar, Mellichamp and Doyle (SEMD).\n",
"\n",
"\n",
"\n",
"(Diagram By [Daniele Pugliesi](https://commons.wikimedia.org/wiki/User:Daniele_Pugliesi) own work, [Creative Commons Attribution-Share Alike 3.0 (CC BY-SA 3.0)](http://creativecommons.org/licenses/by-sa/3.0), [Link](https://commons.wikimedia.org/w/index.php?curid=6915706))"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.4.2 Imports](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4.2-Imports)",
"section": "7.4.2 Imports"
}
},
"source": [
"## 7.4.2 Imports\n",
"\n",
"The following code cell imports the libraries and functions needed within this notebook. The code installs Pyomo if necessary. This code is required to run this notebook in Google Colab."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.4.2 Imports](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4.2-Imports)",
"section": "7.4.2 Imports"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# if missing, install pyomo and ipopt\n",
"import shutil\n",
"\n",
"if not shutil.which(\"pyomo\"):\n",
" !pip install -q pyomo\n",
" assert(shutil.which(\"pyomo\"))\n",
" \n",
"# import pyomo modules\n",
"from pyomo.environ import *\n",
"from pyomo.dae import *\n",
"from pyomo.dae.simulator import Simulator"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.4.3 Arrehenius Law Kinetics for a First-Order Reaction](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4.3-Arrehenius-Law-Kinetics-for-a-First-Order-Reaction)",
"section": "7.4.3 Arrehenius Law Kinetics for a First-Order Reaction"
}
},
"source": [
"## 7.4.3 Arrehenius Law Kinetics for a First-Order Reaction\n",
"\n",
"We assume the kinetics are dominated by a single first order reaction\n",
"\n",
"$$A \\xrightarrow{kc_A}{} \\text{Products}$$\n",
"\n",
"The reaction rate per unit volume is modeled as the product $kc_A$ where $c_A$ is the concentration of $A$. The rate constant $k(T)$ is a increases with temperature following the Arrehenius law\n",
"\n",
"$$k(t) = k_0 e^{-\\frac{E_a}{RT}}$$\n",
"\n",
"$E_a$ is the activation energy, $R$ is the gas constant, $T$ is absolute temperature, and $k_0$ is the pre-exponential factor. \n",
"\n",
"We can see the strong temperature dependence by plotting $k(T)$ versus temperature over typical operating conditions."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.4.3 Arrehenius Law Kinetics for a First-Order Reaction](https://jckantor.github.io/CBE30338/07.04-Simulation-of-an-Exothermic-CSTR.html#7.4.3-Arrehenius-Law-Kinetics-for-a-First-Order-Reaction)",
"section": "7.4.3 Arrehenius Law Kinetics for a First-Order Reaction"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
}
],
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}