summaryrefslogtreecommitdiff
path: root/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers
diff options
context:
space:
mode:
authorJovina Dsouza2014-06-18 12:43:07 +0530
committerJovina Dsouza2014-06-18 12:43:07 +0530
commit206d0358703aa05d5d7315900fe1d054c2817ddc (patch)
treef2403e29f3aded0caf7a2434ea50dd507f6545e2 /Physical_And_Chemical_Equilibrium_For_Chemical_Engineers
parentc6f0d6aeb95beaf41e4b679e78bb42c4ffe45a40 (diff)
downloadPython-Textbook-Companions-206d0358703aa05d5d7315900fe1d054c2817ddc.tar.gz
Python-Textbook-Companions-206d0358703aa05d5d7315900fe1d054c2817ddc.tar.bz2
Python-Textbook-Companions-206d0358703aa05d5d7315900fe1d054c2817ddc.zip
adding book
Diffstat (limited to 'Physical_And_Chemical_Equilibrium_For_Chemical_Engineers')
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/README.txt10
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch1.ipynb154
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch10.ipynb405
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch11.ipynb962
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch12.ipynb916
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch13.ipynb862
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch14.ipynb645
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch15.ipynb319
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch2.ipynb222
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch3.ipynb539
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch4.ipynb223
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch5.ipynb358
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch6.ipynb499
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch7.ipynb474
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch8.ipynb1230
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch9.ipynb691
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic111.pngbin0 -> 166886 bytes
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic222.pngbin0 -> 154279 bytes
-rw-r--r--Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic333.pngbin0 -> 143158 bytes
19 files changed, 8509 insertions, 0 deletions
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/README.txt b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/README.txt
new file mode 100644
index 00000000..e9dea4fd
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/README.txt
@@ -0,0 +1,10 @@
+Contributed By: Jai Mathur
+Course: mca
+College/Institute/Organization: IIT
+Department/Designation: System Admin
+Book Title: Physical And Chemical Equilibrium For Chemical Engineers
+Author: N. de Nevers
+Publisher: John And Wiley & Sons Inc., New York
+Year of publication: 2002
+Isbn: 978-0471071709
+Edition: 1 \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch1.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch1.ipynb
new file mode 100644
index 00000000..48ad85eb
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch1.ipynb
@@ -0,0 +1,154 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 1 : Introduction to Equilibrium"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 1.1 Page: 9"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate Mass Fraction, Mole fraction, Molality and PPM.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "m_i = 10. #[g]\n",
+ "m_w = 990. #[g]\n",
+ "M_i = 342.3 #[g]\n",
+ "M_w = 18. #[g]\n",
+ "\n",
+ "# Calculations\n",
+ "# The mass fraction is \n",
+ "# ( mass fraction of sucrose ) = x_i (by mass) = m_i/(sum of all subsmath.tances)\n",
+ "\n",
+ "x_i = m_i/(m_i+m_w)\n",
+ "x_i = x_i*100. # [in percentage]\n",
+ "\n",
+ "# This is also the weight fraction.\n",
+ "# The mole fraction is\n",
+ "# ( mole fraction of sucrose ) = x_j (by mole) = n_i/(sum of number moles of all the subsmath.tances)\n",
+ "n_i = m_i/M_i # number of moles of sucrose\n",
+ "n_w = m_w/M_w # number of moles of water\n",
+ "x_j = n_i/(n_i+n_w)\n",
+ "x_j = x_j*100 # [in percentage]\n",
+ "\n",
+ "# The molality, a concentration unit is widely used in equilibrium calculations, is defined as \n",
+ "# m (molality) = (moles of solute)/(kg of solvent)\n",
+ "m = n_i/m_w*1000 #[molal]\n",
+ "# For solutions of solids and liquids (but not gases) ppm almost always means ppm by mass, so \n",
+ "x_ppm = x_i*10**(6)/100. #[ppm]\n",
+ "\n",
+ "# Results\n",
+ "print \" sucrose concentration in terms of the mass fraction is %f%%\"%(x_i)\n",
+ "print \" sucrose concentration in terms of the mole fraction is %f%%\"%(x_j)\n",
+ "print \" sucrose concentration in terms of the molality is %f molal\"%(m)\n",
+ "print \" sucrose concentration in terms of the ppm is %f ppm\"%(x_ppm)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " sucrose concentration in terms of the mass fraction is 1.000000%\n",
+ " sucrose concentration in terms of the mole fraction is 0.053088%\n",
+ " sucrose concentration in terms of the molality is 0.029509 molal\n",
+ " sucrose concentration in terms of the ppm is 10000.000000 ppm\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 1.2 Page: 9"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate Mass concentration , Mole concentration and Molarity\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "d = 1.038143/1000*10.**(6) #[kg/m**(3)]\n",
+ "m_i = 10. #[g] mass of sucrose\n",
+ "M_i = 342.3 #[g/mol] molecular weight of sucrose\n",
+ "\n",
+ "# Calculations\n",
+ "# In the previous example i.e. example 1.1 the mass was chosen to be 1.00 kg, so that\n",
+ "m = 1.00 #[kg]\n",
+ "V = m/d*1000 #[L]\n",
+ "\n",
+ "# The mass concentration is\n",
+ "# m_1 ( mass concentration of sucrose ) = (mass of sucrose)/(volume of solution)\n",
+ "m_1 = m_i/V #[g/L]\n",
+ "\n",
+ "# The mole concentration is \n",
+ "# m_2 ( mole concentration of sucrose ) = (moles of sucrose)/(volume of solution)\n",
+ "\n",
+ "m_2 = (m_i/M_i)/V #[mol/L]\n",
+ "\n",
+ "# Results\n",
+ "print \" Mass concentration of the solution is %f g/L\"%(m_1)\n",
+ "print \" Mole concentration of the solution is %f mol/L\"%(m_2)\n",
+ "\n",
+ "# By the definition of the molarity, molarity is mole concentration of the solute\n",
+ "# so molarity \n",
+ "print \" Molarity of the solution is %f mol/L\"%(m_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Mass concentration of the solution is 10.381430 g/L\n",
+ " Mole concentration of the solution is 0.030328 mol/L\n",
+ " Molarity of the solution is 0.030328 mol/L\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch10.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch10.ipynb
new file mode 100644
index 00000000..0a0c51e7
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch10.ipynb
@@ -0,0 +1,405 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 10 : Vapor Liquid Equilibrium VLE at High Pressures"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 10.1 Page: 260"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find values using\n",
+ "Raoult's law\n",
+ "from L-R rule\n",
+ "'''\n",
+ "\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 100. #[psia] Bubble point pressure\n",
+ "x_ethane = 0.10 # Mole fraction of ethane in liquid phase\n",
+ "x_hepmath_tane = (1-x_ethane)\n",
+ "\n",
+ "# a) From figure 10.7( page 260 ) given in the book\n",
+ "# We read the chart to get the bubble-point temperature\n",
+ "# The dew point curve for 100 psia crosses the 10 mol% ethane line at about temperature \n",
+ "T1 = 165. #[C]\n",
+ "# Now, we horizontally from that intersection point to the dew-point curve, finding the vapor phase composition of ethane \n",
+ "y1_e = 0.92\n",
+ "y1_h = (1- y1_e)\n",
+ "\n",
+ "# b) By Raoult's law, we use a trial and error procedureon the temperature\n",
+ "# Antoine equation consmath.tants for ethanol are given \n",
+ "A_e = 6.80267\n",
+ "B_e = 656.4028\n",
+ "C_e = 255.99\n",
+ "\n",
+ "# and that for n-hepmath_tane are\n",
+ "A_h = 6.9024\n",
+ "B_h = 1268.115\n",
+ "C_h = 216.9\n",
+ "\n",
+ "# Antoine equation is given by\n",
+ "# (math.log10p) = (A - B/(T+C))\n",
+ "T = 50. #[C]\n",
+ "err = 1.\n",
+ " \n",
+ "# Calculations\n",
+ "while err > 10**(-4):\n",
+ " p1_e = (10**(A_e - B_e/(C_e + T)))*(14.7/760)\n",
+ " p1_h = (10**(A_h - B_h/(C_h + T)))*(14.7/760)\n",
+ " y2_e = p1_e*x_ethane/P\n",
+ " y2_h = p1_h*x_hepmath_tane/P\n",
+ " err = abs((y2_e + y2_h) - 1)\n",
+ " T = T + 0.0001\n",
+ "\n",
+ "# Changing the temperature in deg F \n",
+ "T2 = T*9./5 + 32 #[F] Bubble-point temperature\n",
+ "\n",
+ "# c) In this method, we use L-R rule, instead of simple Raoult's law\n",
+ "# So,\n",
+ "# y_i = (x_i*p_i)/(v_i*P)\n",
+ "# Where calculated values of v_i from EOS are given in the table 10.A and are \n",
+ "v_e = 0.950 # For ethane\n",
+ "v_h = 0.459 # For n-hepmath_tane\n",
+ "\n",
+ "# We again use trial and error on the temperature\n",
+ "# Let us assume the initial temperature \n",
+ "Ti = 50. #[C]\n",
+ "err = 1\n",
+ " \n",
+ "while err > 10**(-4):\n",
+ " p2_e = (10**(A_e - B_e/(C_e + Ti)))*(14.7/760)\n",
+ " p2_h = (10**(A_h - B_h/(C_h + Ti)))*(14.7/760)\n",
+ " y3_e = p2_e*x_ethane/(P*v_e)\n",
+ " y3_h = p2_h*x_hepmath_tane/(P*v_h)\n",
+ " err = abs((y3_e + y3_h) - 1)\n",
+ " Ti = Ti + 0.0001\n",
+ "\n",
+ "# Changing the temperature in deg F \n",
+ "T3 = Ti*9./5 + 32 #[F] Bubble-point temperature\n",
+ "\n",
+ "# Results\n",
+ "print \" The results are summarized in the following table:\"\n",
+ "print \" Variable \\t Values calculated from\\t Values calculated from \\t Values calculated \"\n",
+ "print \" \\t from figure 10.7 \\t Raoult''s law \\t\\t\\t from L-R rule\"\n",
+ "print \" Tdeg F) \\t %f \\t\\t %f \\t\\t\\t %f\"%(T1,T2,T3)\n",
+ "print \" y_ethane \\t %f \\t\\t %f \\t\\t\\t %f\"%(y1_e,y2_e,y3_e)\n",
+ "print \" y_heptane \\t %f \\t\\t %f \\t\\t\\t %f\"%(y1_h,y2_h,y3_h)\n",
+ "print \"\\nWhere T is boiling point temperature\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The results are summarized in the following table:\n",
+ " Variable \t Values calculated from\t Values calculated from \t Values calculated \n",
+ " \t from figure 10.7 \t Raoult''s law \t\t\t from L-R rule\n",
+ " Tdeg F) \t 165.000000 \t\t 133.014380 \t\t\t 124.179620\n",
+ " y_ethane \t 0.920000 \t\t 0.968397 \t\t\t 0.943469\n",
+ " y_heptane \t 0.080000 \t\t 0.031504 \t\t\t 0.056431\n",
+ "\n",
+ "Where T is boiling point temperature\n"
+ ]
+ }
+ ],
+ "prompt_number": 33
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 10.2 Page: 262\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Tdeg\n",
+ "y_ethane\n",
+ "y_hepmath_tane\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 800. #[psia] Bubble point pressure\n",
+ "x_ethane = 0.60 # Mole fraction of ethane in liquid phase\n",
+ "x_hepmath_tane = (1-x_ethane)\n",
+ "\n",
+ "# a) From figure 10.7( page 260 ) given in the book\n",
+ "# We read the chart to get the bubble-point temperature\n",
+ "# The dew point curve for 800 psia crosses the 60 mol% ethane line at about temperature \n",
+ "# T1 = 165\n",
+ "# Now, we horizontally from that intersection point to the dew-point curve, finding the vapor phase composition of ethane \n",
+ "# y1_e = 0.95\n",
+ "# But, by linear interpolation in the experimental data on which Figure 10.7 is based we make a slightly more reliable estimate and get \n",
+ "T1 = 209. #[F]\n",
+ "y1_e = 0.945\n",
+ "y1_h = (1- y1_e)\n",
+ "\n",
+ "# b) By Raoult's law, we use a trial and error procedureon the temperature\n",
+ "# Antoine equation consmath.tants for ethanol are given \n",
+ "A_e = 6.80267\n",
+ "B_e = 656.4028\n",
+ "C_e = 255.99\n",
+ "\n",
+ "# and that for n-hepmath_tane are\n",
+ "A_h = 6.9024\n",
+ "B_h = 1268.115\n",
+ "C_h = 216.9\n",
+ "\n",
+ "# Antoine equation is given by\n",
+ "# (math.log10p) = (A - B/(T+C))\n",
+ "T = 50. #[C]\n",
+ "err = 1.\n",
+ " \n",
+ "# Calculations\n",
+ "while err > 10**(-4):\n",
+ " p1_e = (10**(A_e - B_e/(C_e + T)))*(14.7/760)\n",
+ " p1_h = (10**(A_h - B_h/(C_h + T)))*(14.7/760)\n",
+ " y2_e = p1_e*x_ethane/P\n",
+ " y2_h = p1_h*x_hepmath_tane/P\n",
+ " err = abs((y2_e + y2_h) - 1)\n",
+ " T = T + 0.0001\n",
+ "\n",
+ "# Changing the temperature in deg F \n",
+ "T2 = T*9./5 + 32 #[F] Bubble-point temperature\n",
+ "\n",
+ "# c) In this method, we use L-R rule, instead of simple Raoult's law\n",
+ "# So,\n",
+ "# y_i = (x_i*p_i)/(v_i*P)\n",
+ "# Where calculated values of v_i from EOS are given \n",
+ "v_e = 0.6290642 # For ethane\n",
+ "v_h = 0.0010113 # For n-hepmath_tane\n",
+ "\n",
+ "# We again use trial and error on the temperature\n",
+ "# Let us assume the initial temperature \n",
+ "Ti = 10. #[C]\n",
+ "err = 1.\n",
+ " \n",
+ "while err > 10**(-4):\n",
+ " p2_e = (10**(A_e - B_e/(C_e + Ti)))*(14.7/760)\n",
+ " p2_h = (10**(A_h - B_h/(C_h + Ti)))*(14.7/760)\n",
+ " y3_e = p2_e*x_ethane/(P*v_e)\n",
+ " y3_h = p2_h*x_hepmath_tane/(P*v_h)\n",
+ " err = abs((y3_e + y3_h) - 1)\n",
+ " Ti = Ti + 0.0001\n",
+ "\n",
+ "# Changing the temperature in deg F \n",
+ "T3 = Ti*9./5 + 32 #[F] Bubble-point temperature\n",
+ "\n",
+ "# Results\n",
+ "print \" The results are summarized in the following table:\"\n",
+ "print \" \\t Variable \\t\\t Values calculated from\\t Values calculated from Values calculated\"\n",
+ "print \" \\t\\t\\t\\t from figure 10.7 \\t Raoult''s law \\t\\t from L-R rule\"\n",
+ "print \" \\n\\t Tdeg F \\t\\t %f \\t\\t %f \\t\\t %f\"%(T1,T2,T3)\n",
+ "print \" \\t y_ethane \\t\\t %f \\t\\t %f \\t\\t %f\"%(y1_e,y2_e,y3_e)\n",
+ "print \" \\t y_heptane \\t\\t %f \\t\\t %f \\t\\t %f\"%(y1_h,y2_h,y3_h)\n",
+ "print \"\\nWhere T is boiling point temperature\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The results are summarized in the following table:\n",
+ " \t Variable \t\t Values calculated from\t Values calculated from Values calculated\n",
+ " \t\t\t\t from figure 10.7 \t Raoult''s law \t\t from L-R rule\n",
+ " \n",
+ "\t Tdeg F \t\t 209.000000 \t\t 172.210640 \t\t 70.854980\n",
+ " \t y_ethane \t\t 0.945000 \t\t 0.996044 \t\t 0.632080\n",
+ " \t y_heptane \t\t 0.055000 \t\t 0.003856 \t\t 0.367822\n",
+ "\n",
+ "Where T is boiling point temperature\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 10.3 Page: 262\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Bubble point of the given ethanol and n-heptane mixture at 800 psia\n",
+ "Amount of ethanol in the vapour phase of the mixture at the given condition\n",
+ "Amount of n-heptane in the vapour phase of the mixture at the given \n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# The initial data for this example is same as that of example 10.2, i.e.\n",
+ "P = 800. #[psia] Bubble point pressure\n",
+ "x_e = 0.60 # Mole fraction of ethane in liquid phase\n",
+ "x_h = (1-x_e) # Mole fraction of n-hepmath.tane in the liquid phase\n",
+ "R = 0.08314 #( L*bar/(mol*K)) Universal gas consmath.tant \n",
+ "\n",
+ "# Changing the pressure in bar\n",
+ "Pb = (800/14.7)*(1.01325) #[bar]\n",
+ "\n",
+ "# In this problem we will denote ethane by 'e' and that to n-hepmath.tane by 'h'\n",
+ "# From table A.1 ( page 417 ) given in the book, critical temperatures of ethane and hepmath.tane are \n",
+ "T_c_e = 305.3 #[K]\n",
+ "T_c_h = 540.2 #[K]\n",
+ "\n",
+ "# and critical pressures are\n",
+ "P_c_e = 48.72 #[bar]\n",
+ "P_c_h = 27.40 #[bar]\n",
+ "\n",
+ "# also the accentric facors are \n",
+ "w_e = 0.1\n",
+ "w_h = 0.35\n",
+ "\n",
+ "# Thus we have\n",
+ "P_r_e = Pb/P_c_e\n",
+ "P_r_h = Pb/P_c_h\n",
+ "\n",
+ "# Now from equations (F.13) and (F.14) ( page 459 ) given in the book we have\n",
+ "# A_e = 0.42747 + ( 1 + (0.480 + 1.574*w_e - 0.17*w_e**(2))*( 1 - T_r_e**(0.5)))**(2)*(P_r_e/T_r_e**(2))\n",
+ "# A_h = 0.42747 + ( 1 + (0.480 + 1.574*w_h - 0.17*w_h**(2))*( 1 - T_r_h**(0.5)))**(2)*(P_r_h/T_r_h**(2))\n",
+ "# and\n",
+ "# B_e = 0.08664*(P_r_e/T_r_e)\n",
+ "# B_h = 0.08664*(P_r_h/T_r_h)\n",
+ "\n",
+ "# We will take the help trial and error method both on Temperature and the vapor phase composition of ethane\n",
+ "# Let us assume the starting temperature 200 deg F. Changing this temperature in K\n",
+ "T = (200-32)*5./9 + 273.15 #[K]\n",
+ "err = 1\n",
+ "\n",
+ "# Calculations\n",
+ "while err > 10**(-4):\n",
+ " T_r_e = T/T_c_e\n",
+ " T_r_h = T/T_c_h\n",
+ " A_e = 0.42747*( 1 + (0.480 + 1.574*w_e - 0.17*w_e**(2))*( 1 - T_r_e**(0.5)))**(2)*(P_r_e/T_r_e**(2))\n",
+ " A_h = 0.42747*( 1 + (0.480 + 1.574*w_h - 0.17*w_h**(2))*( 1 - T_r_h**(0.5)))**(2)*(P_r_h/T_r_h**(2))\n",
+ " \n",
+ " B_e = 0.08664*(P_r_e/T_r_e)\n",
+ " B_h = 0.08664*(P_r_h/T_r_h)\n",
+ " \n",
+ " # Now we will take the starting value of vapor phase composition of ethane as \n",
+ " y_e = 0.9\n",
+ " err1 = 1\n",
+ " \n",
+ " while err1 > 10**(-6):\n",
+ " # Now value of A_mix and B_mix for both liquid and vapor phase are calculated as\n",
+ " \n",
+ " A_mix_l = (x_e*math.sqrt(A_e) + x_h*math.sqrt(A_h))**(2) # For liquid phase\n",
+ " A_mix_v = (y_e*math.sqrt(A_e) + (1 - y_e)*math.sqrt(A_h))**(2) # For vapor phase\n",
+ " B_mix_l = (x_e*B_e + x_h*B_h) # For liquid \n",
+ " B_mix_v = (y_e*B_e + (1 - y_e)*B_h) # For liquid \n",
+ "\n",
+ " def f(z1): \n",
+ " return z1**(3) - z1**(2) + z1*(A_mix_l - B_mix_l - B_mix_l**(2)) - A_mix_l*B_mix_l\n",
+ " z_l = fsolve(f,0.2)\n",
+ " # and\n",
+ " def g(z2): \n",
+ " return z2**(3) - z2**(2) + z2*(A_mix_v - B_mix_v - B_mix_v**(2)) - A_mix_v*B_mix_v\n",
+ " z_v = fsolve(g,0.3)\n",
+ " # Now\n",
+ " phi_el = B_e/B_mix_l*( z_l - 1) - math.log(z_l - B_mix_l) - (A_mix_l/B_mix_l)*(2*math.sqrt(A_e/A_mix_l)-B_e/B_mix_l)*math.log(1-B_mix_l/z_l)\n",
+ " phi_hl = B_h/B_mix_l*( z_l - 1) - math.log(z_l - B_mix_l) - (A_mix_l/B_mix_l)*(2*math.sqrt(A_h/A_mix_l)-B_h/B_mix_l)*math.log(1-B_mix_l/z_l)\n",
+ " phi_ev = B_e/B_mix_v*( z_v - 1) - math.log(z_v - B_mix_v) - (A_mix_v/B_mix_v)*(2*math.sqrt(A_e/A_mix_v)-B_e/B_mix_v)*math.log(1-B_mix_v/z_v)\n",
+ " phi_hv = B_h/B_mix_v*( z_v - 1) - math.log(z_v - B_mix_v) - (A_mix_v/B_mix_v)*(2*math.sqrt(A_h/A_mix_v)-B_h/B_mix_v)*math.log(1-B_mix_v/z_v)\n",
+ " K_e = phi_el/phi_ev\n",
+ " K_h = phi_hl/phi_hv\n",
+ " y_e1 = K_e*x_e\n",
+ " y_h1 = K_h*x_h\n",
+ " err1 =abs((y_e1 - y_e))\n",
+ " y_e = y_e1\n",
+ "\n",
+ " err = abs((y_e1 + y_h1) -1)\n",
+ " T = T + 0.1\n",
+ "\n",
+ "\n",
+ "# Changing the temperature in deg F, we have \n",
+ "Tf = ( T - 273.15)*9./5 + 32 #[F]\n",
+ "\n",
+ "# Results\n",
+ "print \" Bubble point of the given ethanol and n-hepmath.tane mixture at 800 psia is %f deg F\"%(Tf)\n",
+ "print \" Amount of ethanol in the vapour phase of the mixture at the given condition is %f \"%(y_e1)\n",
+ "print \" Amount of n-heptane in the vapour phase of the mixture at the given condition is %f \"%(y_h1)\n",
+ "\n",
+ "# Answers may vary because of rounding error."
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Bubble point of the given ethanol and n-hepmath.tane mixture at 800 psia is 200.180000 deg F\n",
+ " Amount of ethanol in the vapour phase of the mixture at the given condition is 0.599997 \n",
+ " Amount of n-heptane in the vapour phase of the mixture at the given condition is 0.399997 \n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py:227: RuntimeWarning: The iteration is not making good progress, as measured by the \n",
+ " improvement from the last five Jacobian evaluations.\n",
+ " warnings.warn(msg, RuntimeWarning)\n",
+ "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py:227: RuntimeWarning: The iteration is not making good progress, as measured by the \n",
+ " improvement from the last ten iterations.\n",
+ " warnings.warn(msg, RuntimeWarning)\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch11.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch11.ipynb
new file mode 100644
index 00000000..fff7b6e8
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch11.ipynb
@@ -0,0 +1,962 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 11 : LIquid Liquid Liquid Solid And Gas Solid Equilibrium"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.1 Page: 272"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The total number of the drops of the benznene required to saturate the water\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "V_water = 1. #[L] volume of the water\n",
+ "Temp = 25. #[C]\n",
+ "d_benzene = 0.88 #[g/ml] density of the benzene \n",
+ "M_benzene = 78. #[g/mol] molecular weight of the benzene\n",
+ "M_water = 18. #[g/mol]\n",
+ "# Typically a buret will deliver about 20 drops of lliquid per millimeter, so moles of benzene in one drop is\n",
+ "\n",
+ "# Calculations\n",
+ "n_1drop = 1./20*(d_benzene/M_benzene) #[mol/drop] \n",
+ "\n",
+ "# No of moles in 1 litre of the water is \n",
+ "n_water = 1000./M_water #[mol]\n",
+ "# Because 1 litre = 1000 g\n",
+ "# Now from the table 11.1 (page 273), at the saturated condition at the temperature 25C, solubility of benzene in the water is\n",
+ "s_benzene = 0.000405\n",
+ "n_benzene_saturate = s_benzene*n_water #[mol]\n",
+ "# Thus no of the drops of the benzene is\n",
+ "N_benzene = n_benzene_saturate/n_1drop #[drops]\n",
+ "\n",
+ "# Results\n",
+ "print \"The total number of the drops of the benznene required to saturate the water is %0.0f drops\"%(N_benzene)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The total number of the drops of the benznene required to saturate the water is 40 drops\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.2 Page: 273\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The amount of the ground water \n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "m_benzene = 1000. #[lbm]\n",
+ "M_benzene = 78. #[lbm/lbmol]\n",
+ "# The total moles benzene are \n",
+ "n_benzene = m_benzene/M_benzene #[lbmol]\n",
+ "# To saturate the water with benzene \n",
+ "# the mole fraction of the benzene in the water will be \n",
+ "x_benzene = 0.000405\n",
+ "# and \n",
+ "# n_benzene = x_benzene*n_T\n",
+ "# in this case n_benzene << n_water, so n_T = n_water\n",
+ "# Thus\n",
+ "#n_benzene = x_benzene*n_water\n",
+ "\n",
+ "# Calculations\n",
+ "n_water = n_benzene/x_benzene #[lbmol]\n",
+ "m_water = n_water*18 #[lbm] \n",
+ "\n",
+ "# Results\n",
+ "print \"The amount of the ground water that will make a saturated solution will be %e lbm\"%(m_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The amount of the ground water that will make a saturated solution will be 5.698006e+05 lbm\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.3 Page: 277\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Mol water\n",
+ "Mol ethanol\n",
+ "Mol benzene\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 25. #[C]\n",
+ "n_water = 3.75 #[mol]\n",
+ "n_ethanol = 2.5 #[mol]\n",
+ "n_benzene = 3.75 #[mol]\n",
+ "\n",
+ "# By the simple stoichiomtetry the overall mole fractions are \n",
+ "x_water = 0.375\n",
+ "x_ethanol = 0.250\n",
+ "x_benzene = 0.375\n",
+ "\n",
+ "# Calculations\n",
+ "# We locate the point corresponding to this concentration on the diagram 11.1 (page 277), by drawing any two of the three straight lines corresponding to those mole fractions.\n",
+ "# We find that the point falls almost exactly on the fifth tie line from the top.\n",
+ "#For this the end-point values are read from the table 11.4 ( page 276 ), which is fifth row from the bottom \n",
+ "# Thus in water reach phase we have the composition as\n",
+ "x_water_w = 64.9 #[%]\n",
+ "x_ethanol_w = 31.75 #[%]\n",
+ "x_benzene_w = 3.37 #[%]\n",
+ "\n",
+ "# and in the benzene reach phase composition is \n",
+ "x_water_b = 6.43 #[%]\n",
+ "x_ethanol_b = 18.94 #[%]\n",
+ "x_benzene_b = 74.62 #[%]\n",
+ "\n",
+ "# Results\n",
+ "print \"The composition of the two equilibrium phases i.e. water-reach phase and benzene reach phase is as \"\n",
+ "print \"\\t\\t\\t\\tWater-reach phase\\t\\tbenzene-reach phase\"\n",
+ "print \"Mol water\\t\\t\\t%f\\t\\t\\t\\t%f\"%(x_water_w,x_water_b)\n",
+ "print \"Mol ethanol\\t\\t\\t%f\\t\\t\\t\\t%f\"%(x_ethanol_w,x_ethanol_b)\n",
+ "print \"Mol benzene\\t\\t\\t%f\\t\\t\\t\\t%f\"%(x_benzene_w,x_benzene_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The composition of the two equilibrium phases i.e. water-reach phase and benzene reach phase is as \n",
+ "\t\t\t\tWater-reach phase\t\tbenzene-reach phase\n",
+ "Mol water\t\t\t64.900000\t\t\t\t6.430000\n",
+ "Mol ethanol\t\t\t31.750000\t\t\t\t18.940000\n",
+ "Mol benzene\t\t\t3.370000\t\t\t\t74.620000\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.4 Page: 282\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Activity coefficient of benzene in water\n",
+ "Activity coefficient of water in benzene\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 25. #[C]\n",
+ "# Here we assume benzene to be component 1 and water to be componenet 2\n",
+ "# From table 11.1 given in the book(page 273) \n",
+ "# The mole fraction of benzene in water is\n",
+ "x_1in2 = 405. #[ppm]\n",
+ "# and the mole fraction of water in benzene is \n",
+ "x_2in1 = 3000. #[ppm]\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus mole fraction of water in water rich phase is\n",
+ "x_water_w = (10**(6)-405.)/(10**(6))\n",
+ "x_benzene_w = 1-x_water_w\n",
+ "\n",
+ "# and mole fraction of the benzene in benzene rich phase is\n",
+ "x_benzene_b =(10.**(6.)-3000.)/(10**(6))\n",
+ "x_water_b = 1-x_benzene_b\n",
+ "\n",
+ "# Here both x_water and x_benzene are nearly equal to 1\n",
+ "# Thus assumption used for derivation of the equation 11.4(page 282) are suitable here and the equation is \n",
+ "# x_i_1 = y_i_1 , where y_i_1 is activity coefficient\n",
+ "\n",
+ "# So activity coefficient of benzene in water is\n",
+ "y_benzene = 1/(x_benzene_w)\n",
+ "# and activty coefficient of the water in benzene is\n",
+ "y_water = 1/(x_water_b)\n",
+ "\n",
+ "# Results\n",
+ "print \" Activity coefficient of benzene in water is %f\"%(y_benzene)\n",
+ "print \" Activity coefficient of water in benzene is %f\"%(y_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Activity coefficient of benzene in water is 2469.135802\n",
+ " Activity coefficient of water in benzene is 333.333333\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.5 Page: 283\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Draw Gibb's free energy vs mole fractions\n",
+ "\n",
+ "import math \n",
+ "from numpy import * \n",
+ "from matplotlib.pyplot import *\n",
+ "\n",
+ "%pylab inline\n",
+ "\n",
+ "# Variables\n",
+ "R = 8.314 #[J/(mol*K)] Universal gas consmath.tant\n",
+ "T = 298.15 #[K] Temperature\n",
+ "g_a_0 = 2. #[kj/mol] Gibb's free energy of the pure species 'a'\n",
+ "g_b_0 = 1. #[kj/mol] Gibb's free energy of the pure species 'b'\n",
+ "\n",
+ "# Calculations\n",
+ "for a in range(4):\n",
+ " def f(x): \n",
+ " return x*g_a_0 + (1-x)*g_b_0 + (R*T)/1000*(x*log(x) + (1-x)*log(1-x) + x*a*(1-x)**(2) + (1-x)*a*(x)**(2))\n",
+ " \n",
+ " x=linspace(0.000001,0.990001,100)\n",
+ " a = f(x) \n",
+ " plot(x,a)\n",
+ " \n",
+ "xlabel(\" mole fraction of species a,x_a\");\n",
+ "ylabel(\" gibb''s free energy per mole of mixture,g_mixture kJ/mol\");\n",
+ "annotate(\"A = 0\",xy=(.7,0))\n",
+ "annotate(\"A = 1\",xy=(.6,0.5))\n",
+ "annotate(\"A = 2\",xy=(.6,0.95))\n",
+ "annotate(\"A = 3\",xy=(.6,1.50))\n",
+ "suptitle(\"Calculated values of the molar Gibbs energy of a binary mixture at 25 \u0014 C, assuming \\\n",
+ "the symmetrical activity coefficient equation, with various values of A.\")\n",
+ "\n",
+ "# Results\n",
+ "show()\n",
+ "print \" The plot is shown in the graphic window.\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['f', 'draw_if_interactive']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\nnZLWW915JDMzkz777DNycnIiBwcH4VpI7u7du+Th4SH8HxERQWKxmIiI5s6dq/b4GjZsGO3atYuI\nSGn/u3z5MrVr146I1JcTRKrl9MOHD1W+k23btpFYLCYHBweaNm2aEIv8GPz2229Vpnn06BFJJBL6\n559/qGPHjiqfl6TEJGPZsmU0ceJEtZ8VFhZSeno6Ecl2aGtra+EzeZJx6NAh8vT0pJycHCIiSktL\nIyLlQk1TkpGenk6FhYVERHTs2DHq2bMnEclOugEBAcKyZsyYQX/++acw/6ZNm1JWVhYtXryYRo4c\nSUREN2/eJD09PZWCtKCggCwtLYWT65dffklbt24lIqLU1FRhPdu1ayfsbIqxKyZTwcHBQpLRv39/\nOnfuHBERPX36lJo3b05EsgJNfoBnZWUJ6yd35coVEovFlJ2dTZmZmWRvb0/Xr18nIqJGjRoJO5ui\n4ttjzpw55OnpSfn5+ZScnEy1atWiwsJCunPnDvn7+wvLHDt2LG3evFllfo0aNRKSiYkTJ5JYLKbM\nzExKSkqiunXrCuvq4+NDUqmUEhISyNLSkuLj45UuOrKzsyk3N5eIZBeWbm5uRCT7jo2NjSkyMlJl\n2fv27VN7MpErfvFrYWFBqamplJOTQw4ODnTlyhWKiIggkUgkbOcRI0bQokWLKCUlhZo1aybM68WL\nF0rzFovF5OPjQzNmzKBTp05RSEgINWjQgLKysmjDhg1kZWVF6enplJubSw0bNqRnz55RUlIStWnT\nRth/Fi5cSP/3f/8nbMeff/6ZiIhycnKoQYMGwjr379+f/P39iUh2cMtPMEeOHKFevXqprPdXX30l\nzPfkyZPk7OxMRKRUOBanuK/MmjWLVqxYoTLOnDlzyMnJiXJzcyk5OZkaNGhAcXFxKttZ3boTqR4j\nt27dUll3IiJvb29hP54xYwatXLlSJZZ27drR9OnTiUhW7lhYWFB8fDzl5eVR/fr1hWUpHnODBg2i\nFStWkJ+fHwUFBRGR6vEQGBiodHJwcHAQkgwdHR26dOkSEcm2vbygLyoqIj8/Pzpz5oxKnCWts7rj\nU1F+fj65uLgIZcOpU6eoZs2a5OjoSJ07d6bbt2+rTLNx40Zh28kVTzJu3LhBEomkxGWro2kfEYvF\nFBsbS0T/HScBAQFC2Si/SCieZCxatEhI9l/3+zx16hRVr16dYmJiSCqVUqtWrej8+fMlHjvFt1NZ\n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\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x2d7f510>"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The plot is shown in the graphic window.\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.6 Page: 283\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Draw two liquid phase\n",
+ "\n",
+ "import math \n",
+ "from matplotlib.pyplot import *\n",
+ "from numpy import *\n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T = 92 + 273.15 #[K] Temperature of the system\n",
+ "R = 8.314 #[m**(3)*Pa/(mol*K)] universal gas consmath.tant\n",
+ "\n",
+ "# Van Laar equation coefficients are given\n",
+ "A = 1.2739\n",
+ "B = 3.9771\n",
+ "\n",
+ "# From van laar equation, for water, we have\n",
+ "# lnY_a = B**(2)*A*(1-x_a)**(2)/(A*x_a + B*(1-x_a))**(2)\n",
+ "# Similarily for n-bumath.tanol\n",
+ "# lnY_b = A**(2)*B*x_a**(2)/(A*x_a + B*(1-x_a))**(2)\n",
+ "\n",
+ "# Let us say, g = g_mix - sum(x_i*g_i_0)\n",
+ "# So, plotting g vs x_i we have\n",
+ "\n",
+ "# Calculations\n",
+ "def f(x_a): \n",
+ "\t return (R*T/1000)*( x_a*log(x_a) + (1-x_a)*log(1-x_a) + \\\n",
+ " x_a*(B**(2)*A*(1-x_a)**(2)/(A*x_a + B*(1-x_a))**(2)) + (1-x_a)* \\\n",
+ " (A**(2)*B*x_a**(2)/(A*x_a + B*(1-x_a))**(2)) )\n",
+ "\n",
+ "x_a = linspace(0.000001,0.99999,100)\n",
+ "a = f(x_a)\n",
+ "plot(x_a,a)\n",
+ "#xlabel(\" Mol fraction of species a, x_a\")\n",
+ "#ylabel(\" g_mix - sum(x_i*g_i0)\")\n",
+ "\n",
+ "# Now drawing math.tangent \n",
+ "#x = linspace(0.000001,0.99999,100)\n",
+ "x = linspace(0.0,0.99999,100)\n",
+ "a = 1.2090312*x-1.251495764\n",
+ "#plot(x,a)\n",
+ "plot(x,1.2090312*x-1.251495764)\n",
+ "xlabel(\" Mol fraction of species a, x_a\");\n",
+ "ylabel(\" g_mix - sum(x_i*g_i0)\");\n",
+ "\n",
+ "show()\n",
+ "\n",
+ "# Results\n",
+ "# Figure shows the results of the calculation of the whole range of x_a \n",
+ "# Drawing the math.tangent to the curve, the line touches the curve at two points x_a = 0.47 and 0.97\n",
+ "print \"Thus based on the several assumptions that the Van Laar equation is an accurate representation of LLE\"\n",
+ "print \"we would conclude that at 92 deg C water-n-butanol does form two liquid phases.\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\nAAAAAElFTkSuQmCC\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x353ea90>"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Thus based on the several assumptions that the Van Laar equation is an accurate representation of LLE\n",
+ "we would conclude that at 92 deg C water-n-butanol does form two liquid phases.\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.7 Page: 286\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Heat of mixing of water-in-benzene\n",
+ "Heat of mixing of benzene-in-water\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "R = 8.314 #[J/(ml*K)]\n",
+ "# We find that the water in benzene least squares fit line has the equation \n",
+ "# math.log(x_water(benzene-reach phase)) = 4.175-2967.7/T\n",
+ "\n",
+ "# equation 11.7 in the book (page 286) is \n",
+ "# math.log(x_i_1) = (h_i_0-h_i_average)/(RT) + consmath.tant of integration\n",
+ "\n",
+ "# Comparing the two equations term by term, we have\n",
+ "\n",
+ "# Calculations\n",
+ "# (h_i_0-h_i_average)/(RT) = -2967.7/T\n",
+ "# let us say (h_i_0-h_i_average) = h_mix\n",
+ "# So that \n",
+ "h_mix = -2967.7*R/1000 #[kJ/mol] Heat of mixing of water-in-benzene\n",
+ "\n",
+ "# Now, for benzene-in-water the consmath.tant in the above equation is -522.9K, so\n",
+ "h_mix_1 = 522.9*R/1000 #[kJ/mol] Heat of mixing of benzene-in-water\n",
+ "\n",
+ "# Results\n",
+ "print \" Heat of mixing of water-in-benzene is given as %f kJ/mol\"%(h_mix)\n",
+ "print \" Heat of mixing of benzene-in-water is given as %f kJ/mol\"%(h_mix_1)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Heat of mixing of water-in-benzene is given as -24.673458 kJ/mol\n",
+ " Heat of mixing of benzene-in-water is given as 4.347391 kJ/mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.8 Page: 287\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The amount of water that will come out of the solution in the gasoline\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T_i = 50. #[F] Initial temperature of the system \n",
+ "T_f = 20. #[F] Final temperature of the system\n",
+ "M_gas = 115. #[g/mol] Molecular weight of gasoline at room temperature\n",
+ "M_water = 18. #[g/mol] Molecular weight of water at the room temperaature\n",
+ "d = 720. #[g/L] density of gasoline at the room temperature\n",
+ "\n",
+ "# From Figure 11.10 ( page 288 ), solubility of the water in gasoline ( similar to solubility of water in cyclohexane ) at 50 deg F is given as \n",
+ "s_50 = 0.00026 #[mol fraction]\n",
+ "\n",
+ "# And linearly extraploting the cyclohexane curve in figure 11.10 to 20 deg F, we get the solubility of water at 20deg F as \n",
+ "s_20 = 0.0001 #[mol fraction]\n",
+ "\n",
+ "# Calculations\n",
+ "# So, rejected water is\n",
+ "s_rej = s_50 - s_20 # mol of water per mole of gasoline \n",
+ "\n",
+ "# In terms of weight, rejected water will be\n",
+ "w = (s_rej*d*M_water)/M_gas #[g water/L gasoline]\n",
+ "\n",
+ "# Results\n",
+ "print \" The amount of water that will come out of the solution in the gasoline will be %f g water/L gasoline\"%(w)\n",
+ "print \" At 20 deg F we would expect this water to become solid ice, forming a piece large enough to plug the fuel line of a parked auto.\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The amount of water that will come out of the solution in the gasoline will be 0.018031 g water/L gasoline\n",
+ " At 20 deg F we would expect this water to become solid ice, forming a piece large enough to plug the fuel line of a parked auto.\n"
+ ]
+ }
+ ],
+ "prompt_number": 24
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.9 Page: 290\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Ethanol's 0.1 mol distributed in the water rich phase\n",
+ "Ethanol's 0.1 mol distributed in the benzene rich phase\n",
+ "'''\n",
+ "\n",
+ "from numpy import *\n",
+ "from matplotlib.pyplot import *\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 25. #[C]\n",
+ "x_water = 5. #[mo]\n",
+ "x_benzene = 0.1 #[mol]\n",
+ "\n",
+ "# The fugacity of the ethanol must be same in both phases so that we have distribution coefficient \n",
+ "\n",
+ "# K = ( distribution coefficient ) = x_ethanol(water_rich phase)/x_ethanol(benzene-rich phase) = y_ethanol(benzene-rich phase)/y_ethanol(water-rich phase)\n",
+ "# Here distribution coefficient is defined as rhe ratio of mole fractions of the distributed solute between the two phases.\n",
+ "\n",
+ "# We observe that for the first experimental data set in table 11.4 in the book(page 276)\n",
+ "x_ethanol_water_rich = 3.817 #[%]\n",
+ "x_ethanol_benzene_rich = 1.010 #[%]\n",
+ "\n",
+ "# So \n",
+ "K = x_ethanol_water_rich/x_ethanol_benzene_rich\n",
+ "\n",
+ "# Calculations\n",
+ "# Now for all the data set in the table 11.4 in the book(page 276), we wiil draw a plot \n",
+ "X = array([3.817,7.968,12.977,18.134,23.540,24.069,27.892,31.725,35.510,39.382,41.062,41.771])\n",
+ "Y = array([1.010,3.323,5.860,9.121,12.939,13.340,16.090,18.943,22.444,26.216,29.341,33.093])\n",
+ "Z = X/Y\n",
+ "\n",
+ "# Plotting the graph between 'Z' and 'Y' \n",
+ "plot(Y,Z)\n",
+ "xlabel(\"Mol% ethanol in benzene-rich phase \");\n",
+ "ylabel(\"Distribution coefficient of ethanol, K_ethanol\");\n",
+ "#xgrid()\n",
+ "#xlabel(\"Mol% ethanol in benzene-rich phase \")\n",
+ "#ylabel(\"Distribution coefficient of ethanol, K_ethanol\")\n",
+ "show()\n",
+ "# We see from the plot that at the low mole percent of ethanol , the distribution coefficient is approximately \n",
+ "K_1 = 4\n",
+ "\n",
+ "# Thus ratio of the amount of the ethanol distributed in the two phases will be 4\n",
+ "#the amount in mol % is \n",
+ "# for water rich phase \n",
+ "m_water_rich = 100*K_1/(K_1+1)\n",
+ "m_benzene_rich = 100/(K_1+1)\n",
+ "\n",
+ "# Results\n",
+ "print \" Ethanol''s 0.1 mol distributed in the water rich phase will be %f mol%% of the total mol\"%(m_water_rich)\n",
+ "print \" Ethanol''s 0.1 mol distributed in the benzene rich phase will be %f mol%% of the total mol\"%(m_benzene_rich)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\npZRSasmSJSosLEyNHj1a5ebmqh49eqji4uIqj3ngwAE1cOBA42MmTJigFi9ebMxjcPjwYeXq6qp+\n/PFHpZRS9957r1q6dKlSSpVbbnzKlCnq7bffVkopFR8fr+69917jcdq3b6+UUmrlypWqV69eqrS0\nVGVlZambb75Z/fnnn1XuD1729gULFqhbb71VXbhwQRUWFqpbbrlFHTt2rMJzfH19jRMQFy9ebPwM\nR40aZdxn/MiRIyogIEAppa1j361bN3X58mV1+vRp1aJFi3KfW1FRkerevbtat26dys7OVnfddZfK\nz89XSmlLNBt+L76+vuqdd95RSin13//+V40bN04ppdQLL7xg/LzOnTun/P39jUsnlxUTE6OefPJJ\n4/WySylHRkaqL774Qiml1KVLl1R+fr7avHmzatq0qTp+/LgqLS1Vd9xxR7l91Mu+7mOPPaaU0pYs\nN3yeL7/8suratWul7/vs2bNKKaXy8/NVUFCQOnPmjNqzZ4/q1auX8XXPnz+vlFKqR48e6uDBg0op\npXbt2qV69OhRIYOwPLvv0SysLzg4mIyMDD755BP69+9f7r7t27ezevVqAGJjYzlz5oxxaQ6DBx98\n0PjX4iuvvMLTTz/NV199xZIlS2jbti2zZ88u12SwceNGUlNTiYiIALQp961bt640m5+fHyEhIQB0\n6tSJjIwMAPbv38+UKVM4f/48eXl53H333YDWNGFYZiAgIMC4YmVycjL3338/Op0Ob29voqOjSUlJ\nMbnPIi4uzrjwXGBgIBkZGZXuFT5q1CgARo4cyd///ncAvvvuO3755RfjY3Jzc7l48SI6nY7+/ftT\nv359WrRogbe3N1lZWdx0000ATJw4kbi4OPr378+6des4cOAAXbt2BbSljw0/AwwbNgyA8PBw4+/r\n22+/5csvv2TWrFkAXLp0iczMTG677bYKue+7774Kt+Xl5XHixAkGDx4MQIMGDYz3RUZGGnOGhoaS\nkZFBt27dqvw8unfvzoULFzh//jw6nY4BAwZU+r7nzJljXHo6MzOT9PR0/P39+eOPP5g4cSL9+/en\nd+/e5OXlsXPnznL9PpcvX65wfGF5UhSuE4MGDeLZZ59ly5YtZGdnl7tPXdVOXlWb8IkTJ9i9ezdT\np04lJiaGzZs3M336dDZu3EjPnj3LPTY+Pr5cp3JVGjZsaPy5Xr16xuajMWPGsHbtWoKDg1m0aBFJ\nSUnGx5X98jJkr6y935y27atzlJSUXPM5htdXSvH999+Xy1VZ1nr16lFcXAxoTVaZmZn897//Nd7f\nq1cvPv7442rzlX0NgNWrV9OhQ4dyjx07dixpaWn4+Piwbt06QOtbMsfVn0fZY1bH8JlU9r6TkpLY\nuHEju3btws3NjdjYWAoLC/Hy8uLHH3/km2++4X//+x+fffYZb731Fl5eXqSlpZmVW9Se9ClcJ8aO\nHUtCQoJxfXWD7t27s2zZMkAbdXLDDTfg4eFR6Wu89NJLTJ8+HdD++ldKodPpjO39BnFxcaxcudJY\nfM6ePcvRo0cBqF+/fpVfMKpMP0ZeXh6tW7emqKiIpUuXXvMLvnv37nz66aeUlpaSnZ3N1q1biYyM\nrPY51bm6wBhu+/TTTwH49NNPjX/J9+7dm7lz5xof9+OPP1b72qmpqcyePbvcCKAuXbqwfft2Yz/F\nxYsXOXjwYLWv06dPn3LHNXyBfvTRR6SlpRkLQlXvz8PDgzZt2hg3rrp06VKF3+W1GD6P5ORkvLy8\naNKkSZWf3YULF2jWrBlubm78+uuv7Nq1C4AzZ85QUlLCsGHDmD59OmlpaXh6euLn58fKlSuNz9+3\nb59Z2UTNSFGo4wxfpj4+Pjz11FPG2wy3JyQkkJqail6v58UXXzSuBnn1uvF79+7FxcXFuLPW/fff\nT0hICDt37jQ27RgEBATw6quv0rt3b/R6Pb179zau1PjYY48REhJi7Ggue4yy16dPn05UVBR33nkn\nAQEBlb6nsj8PHTqUkJAQ9Ho9cXFxvP7668YljqsqKIbbK1sjv7Ln6HQ6zp07h16v5+233+bNN98E\nYO7cuezZswe9Xk/Hjh157733qsyqlGLevHmcO3eO2NhYwsLCeOyxx2jZsiULFy5k1KhR6PV6unbt\nWmnHatmsL730EkVFRYSEhBAUFMTLL79c6fus7r0vWbKEuXPnotfrufPOO/nzzz9N/jwA3NzcCA8P\n54knnmD+/PkVMpZ9/t13301xcTGBgYG88MIL3HHHHYC2mZbhsxg9erRxhNqyZcuYP38+oaGhBAUF\nVdmRLixLFsQTQtRIbGwss2fPJjw83N5RhAXJmYIQQggjOVMQQghhJGcKQgghjKQoCCGEMJKiIIQQ\nwkiKghBCCCMpCkIIIYykKAghhDD6f+NRTP1s7PsOAAAAAElFTkSuQmCC\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x37ae490>"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Ethanol''s 0.1 mol distributed in the water rich phase will be 80.000000 mol% of the total mol\n",
+ " Ethanol''s 0.1 mol distributed in the benzene rich phase will be 20.000000 mol% of the total mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.10 Page: 293\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Weight fraction of the NaCl in the saturated solution \n",
+ "Mol fraction of the NaCl in the saturated solution\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 20. #[C]\n",
+ "# At this temperature solubility of NaCl is \n",
+ "s = 36.0 #[g per 100 g of water]\n",
+ "M_NaCl = 58.5 #[g/mol] molecular weight of NaCl \n",
+ "M_water = 18. #[g/mol] molecular weight of water\n",
+ "\n",
+ "# Calculations\n",
+ "# weight fraction of NaCl\n",
+ "w = s/(s+100)\n",
+ "# In weight percentage \n",
+ "w_percent = w*100 #[wt %]\n",
+ "\n",
+ "# Mol fraction of the NaCl\n",
+ "x = (s/M_NaCl)/((s/M_NaCl)+(100/M_water))\n",
+ "# In mol percentage\n",
+ "x_percent = x*100 #[mol %]\n",
+ "\n",
+ "# Results\n",
+ "print \" Weight fraction of the NaCl in the saturated solution is %0.1f wt %%\"%(w_percent)\n",
+ "print \" Mol fraction of the NaCl in the saturated solution is %0.0f mol %%\"%(x_percent)\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Weight fraction of the NaCl in the saturated solution is 26.5 wt %\n",
+ " Mol fraction of the NaCl in the saturated solution is 10 mol %\n"
+ ]
+ }
+ ],
+ "prompt_number": 26
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.11 Page: 293\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Total amount of the solid left behind in the heater\n",
+ "Total amount of the solid left behind in the heater\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T_inlet = 68. #[F]\n",
+ "T_outlet = 110. #[F]\n",
+ "\n",
+ "# from the figure 11.13 we read that at 68F the solubility of CaCO3 and CaSO4.2H2O are \n",
+ "s_inlet_carbonate = 60. #[ppm]\n",
+ "s_inlet_sulphate = 2020. #[ppm]\n",
+ "\n",
+ "# At 110F the solubility of the CaCO3 is \n",
+ "s_outlet_carbonate = 30. #[ppm]\n",
+ "# at 110F the least soluble form of the CaSO4 is anhydride with the solubility \n",
+ "s_outlet_sulphate = 2000. #[ppm]\n",
+ " # This is close enough to the solubility of the gypsum at 68F \n",
+ " # so we conclude that we would not expect either form of CaSO4 to prdcipitate\n",
+ " \n",
+ "# Calculations\n",
+ "# Thus total amount of the calcium carbonate which will cime out of the solution and will remain in the heater will be \n",
+ "w = s_inlet_carbonate - s_outlet_carbonate #[ppm]\n",
+ "\n",
+ "# Results\n",
+ "print \" Total amount of the solid left behind in the heater will be %0.1f ppm\"%(w)\n",
+ "\n",
+ " # Now if a typical houshold water heater heats 100 gallons/per day , we would expect to deposite \n",
+ "w_per_day = w*10**(-6)*100*8.33 #[lb/day]\n",
+ "print \" Total amount of the solid left behind in the heater per day will be %.3f lb/day\"%(w_per_day)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Total amount of the solid left behind in the heater will be 30.0 ppm\n",
+ " Total amount of the solid left behind in the heater per day will be 0.025 lb/day\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.12 Page: 298\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Activity coefficient in benzene corresponding to practically ideal solution \n",
+ "Activity coefficient in CCl4 corresponding to mild type II behavior \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_2 = 0.1\n",
+ "#y_i_1 = (x_i__ideal /x_i_1) , at consmath.tant temperature\n",
+ "# From figures 11.15 and 11.16 given in the book (page 298-299) ( or the equations of the lines on those figures, presented in [14] ) we can compute the values in Table 11.6\n",
+ "# We see that at x_solute = 10% \n",
+ "# T_m/T for the solution in benzene at which math.log(x_experimental) = -1 is equal to 1.332\n",
+ "# and that for the solution in CCl4 is equal to 1.288\n",
+ "#Now at the that value of the T_m/T \n",
+ "x_ideal_benzene = 0.114\n",
+ "x_ideal_CCl4 = 0.152\n",
+ "\n",
+ "# Calculations\n",
+ "# In benzene the average these compounds is\n",
+ "y_i_1 = x_ideal_benzene/x_2# corresponding to practically ideal solution\n",
+ "\n",
+ "# and in benzene the average of these compounds is \n",
+ "y_i_2 = x_ideal_CCl4/x_2# corresponding to mild type II behavior \n",
+ "\n",
+ "# Results\n",
+ "print \" Activity coefficient in benzene corresponding to practically ideal solution is %0.2f\"%(y_i_1)\n",
+ "print \" Activity coefficient in CCl4 corresponding to mild type II behavior is %0.2f\"%(y_i_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Activity coefficient in benzene corresponding to practically ideal solution is 1.14\n",
+ " Activity coefficient in CCl4 corresponding to mild type II behavior is 1.52\n"
+ ]
+ }
+ ],
+ "prompt_number": 28
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.13 Page: 299\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The solubility of the NaCl in water\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+20 #[K]\n",
+ "\n",
+ "# The equation 11.15 (page 297) is given by \n",
+ "# log(1/(x_i_1*y_i_1)) = math.log(p_i_solid_phase/p_i_subcooled_liquid) = delta_h_solid_to_liquid/(R*T_melting_point)*(T_melting_point/T-1)\n",
+ "# Ignoring the moment the wild extraplation involved, we simply insert the appropriate values\n",
+ "T_m = 273.15+800 #[K]\n",
+ "delta_h_fusion = 30219. #[J/g]\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# Calculations\n",
+ "# Let log(1/(x_i_1*y_i_1)) = a\n",
+ "a = delta_h_fusion/(R*T)*(T_m/T-1)\n",
+ "\n",
+ "# Now \n",
+ "x_NaCl_into_y_i_1 = 1/math.exp(a)\n",
+ "\n",
+ "# If we make the plausible assumption that y_i_1 = 1.00, then\n",
+ "x_NaCl = 1/math.exp(a)*1\n",
+ "\n",
+ "# Results\n",
+ "print \" The solubility of the NaCl in water at 20 deg C is %e \"%( x_NaCl)\n",
+ "print \" But the experimental value is 0.1 so Similar to the results in book our results are very far wrong\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The solubility of the NaCl in water at 20 deg C is 4.704794e-15 \n",
+ " But the experimental value is 0.1 so Similar to the results in book our results are very far wrong\n"
+ ]
+ }
+ ],
+ "prompt_number": 29
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.14 Page: 301\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Equilibrium concentration of water vapour\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 1*14.7 #[psia]\n",
+ "T = 30. #[F]\n",
+ "#******#\n",
+ "#The vapour pressure of ice at 30F is 0.0808 psia i.e.\n",
+ "p_ice = 0.0808 #[psia]\n",
+ "# We may assume that the solubility of nitrogen and oxygen in solid ice is negligible\n",
+ "#Thus\n",
+ "x_water_in_ice = 1.00\n",
+ "#and thus use Raoult's law,finding\n",
+ "\n",
+ "# Calculations\n",
+ "y_water_vapour = x_water_in_ice*p_ice/P\n",
+ "\n",
+ "# Results\n",
+ "print \" Equilibrium concentration of water vapour in the air is %0.4f\"%(y_water_vapour)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Equilibrium concentration of water vapour in the air is 0.0055\n"
+ ]
+ }
+ ],
+ "prompt_number": 30
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 11.15 Page: 302\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Estimated solubility of naphthalene in CO2\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+35 #[K]\n",
+ "p_d = 100. #[atm]\n",
+ "R = 82.06 #[(cm**(3)*atm)/(mol*K)]\n",
+ "\n",
+ "#The calculated vapour pressure of naphthalene at 35C is\n",
+ "p_naphthalene = 0.00065 #[atm]\n",
+ "\n",
+ "#The solid is practically pure naphthalene\n",
+ "x_naphthalene = 1.00\n",
+ "#Total pressure \n",
+ "P = p_d\n",
+ "\n",
+ "# Calculations\n",
+ "#By Raoult's law\n",
+ "y_naphthalene = x_naphthalene*p_naphthalene/P\n",
+ "#At this high a pressure the volume of solid naphthalene is\n",
+ "v = 132. #[cm**(3)/mol]\n",
+ "# We have equation math.log(f_d/f_c) = v/(R*T)*(p_d-p_c)\n",
+ "p_c = 1. #[atm]\n",
+ "f_d_by_f_c = math.exp(v/(R*T)*(p_d-p_c))\n",
+ "#and the estimated\n",
+ "y_naphthalene = f_d_by_f_c*y_naphthalene\n",
+ "\n",
+ "# Results\n",
+ "print \"Estimated solubility of naphthalene in CO2 is %e\"%(y_naphthalene)\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Estimated solubility of naphthalene in CO2 is 1.089816e-05\n"
+ ]
+ }
+ ],
+ "prompt_number": 31
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch12.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch12.ipynb
new file mode 100644
index 00000000..1f171743
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch12.ipynb
@@ -0,0 +1,916 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 12 : Chemical Equilibrium"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.1 Page: 311\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The chemical equilibrium composition of the gaseous mixture contains\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 298.15 #[K] temperature\n",
+ "P = 1. #[atm] pressure \n",
+ "R = 8.314*10**(-3) #[kJ/(mol*K)]\n",
+ "\n",
+ "# Calculations\n",
+ "# For an ideal binary solution the Gi# Calculationss free energy is given by\n",
+ "# g_mix = summation(x_i*g_i_0) + R*T*summation(x_i*math.log(x_i))\n",
+ "# Differentiating the above equation with respect to x_a , remembering that for a binary mixture dx_b = dx_a, finding\n",
+ "\n",
+ "# dg_mix/dx_a = g_a_0-g_b_0+R*T*[math.log(x_a)+1-(math.log(x_b)+1)]\n",
+ "# and x_a+x_b = 1\n",
+ "# so\n",
+ "# dg_mix/dx_a = g_a_0-g_b_0+R*T*[math.log(x_a/(1-x_a))]\n",
+ "\n",
+ "# setting up this equal to zero ( to find the minimum on the g-x curve ) and solving gives\n",
+ "# x_a/(1-x_a) = exp((g_b_0-g_a_0)/(R*T))\n",
+ "\n",
+ "# From the table A.8 (page 427) reported in the book, pure component Gibbs free energies for isobumath.tane,a,and n-bumath.tane,b, we find\n",
+ "g_a_0 = -20.9 #[kJ/mol]\n",
+ "g_b_0 = -17.2 #[kJ/mol]\n",
+ "\n",
+ "# Now solving the above equation for x_a, we have\n",
+ "x_a = math.exp((g_b_0-g_a_0)/(R*T))/(1+math.exp((g_b_0-g_a_0)/(R*T)))\n",
+ "x_b = 1-x_a\n",
+ "\n",
+ "# Results\n",
+ "print \" The chemical equilibrium composition of the gaseous mixture contains %f mol fraction isobutane \\t\\t\\t\\t\\t\\t\\t\\tan %f mol fraction n-bumath.tane\"%(x_a,x_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The chemical equilibrium composition of the gaseous mixture contains 0.816475 mol fraction isobutane \t\t\t\t\t\t\t\tan 0.183525 mol fraction n-bumath.tane\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.2 Page: 319\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The equilibrium consmath.tant for the reaction\n",
+ "The concentration of NO at equilibrium\n",
+ "The equilibrium constant\n",
+ "The concentration of NO \n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 298.15 #[K] temperature\n",
+ "P = 0.987 #[atm] pressure\n",
+ "g_0_NO = 86.6 #[kJ/mol] Free energy of formation the NO from elements\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# And the corresponding values for the elements N2 and O2 are\n",
+ "g_0_O2 = 0.00\n",
+ "g_0_N2 = 0.00\n",
+ "\n",
+ "# The reaction of the nitrogen and oxygen to form nitric oxide at 298.15 K is\n",
+ "# N2 + O2 = NO\n",
+ "\n",
+ "# Calculations\n",
+ "# Here \n",
+ "delta_g_0 = 2*g_0_NO - g_0_O2 - g_0_N2 #[kJ/mol]\n",
+ "# Changing in the J/mol \n",
+ "delta_g_01 = delta_g_0*1000 #[J/mol]\n",
+ "\n",
+ "# hence \n",
+ "K_298 = math.exp((-delta_g_01)/(R*T))\n",
+ "\n",
+ "# The activities are all \n",
+ "# a_i = f_i/f_i_0\n",
+ "# f_i_0 correspond to the smath.radians(numpy.arcmath.tan(ard state, which for gas at idael gas state are \n",
+ "f_0_N2 = 1. #[bar]\n",
+ "f_0_O2 = 1. #[bar]\n",
+ "f_0_NO = 1. #[bar]\n",
+ "\n",
+ "# If we make the most general statement of the activities (for gases ) we would have\n",
+ "# a_i = y_i*v_i*Y_i*P/f_i_0 = y_i*phi*P/f_i_0\n",
+ "\n",
+ "# At this low pressure we may safely asssume that the NO,O2 and N2 behave as ideal gases for which v_i*Y_i = phi = 1.00 and substituting these we find\n",
+ "# K_298 = [a_NO]**(2)/([a_N2]*[a_O2]) = [y_NO]**(2)/([y_N2]*[y_O2])\n",
+ "\n",
+ "# Now umath.sing this equilibrium consmath.tant we can calculare he equilibrium concentratin of NO in the air sample in which \n",
+ "#oxygen = 21%, nitrogen = 78% and argon = 1% ,so\n",
+ "y_N2 = 0.78\n",
+ "y_O2 = 0.21\n",
+ "\n",
+ "# Hence From above expression, we have\n",
+ "y_NO_298 = math.sqrt(K_298*y_N2*y_O2)\n",
+ "\n",
+ "# Making the similar calculations for the temperature 2000 K, we have\n",
+ "T_1 = 2000 #[K]\n",
+ "K_2000 = 4.0*10**-4\n",
+ "\n",
+ "# So,\n",
+ "y_NO_2000 = math.sqrt(K_2000*y_N2*y_O2)*10**(6) #[ppm]\n",
+ "\n",
+ "# Results\n",
+ "print \" The equilibrium constant for the reaction at 298.15 K is \\t\\t\\t %.1e\"%(K_298)\n",
+ "print \" The concentration of NO at equilibrium at temperature 298.15 K is \\t\\t %.1e\"%(y_NO_298)\n",
+ "print \" The equilibrium consmath.tant for the reaction at 2000 K is \\t\\t\\t %.1e\"%(K_2000)\n",
+ "print \" The concentration of NO at equilibrium at temperature 2000 K is \\t\\t %.0f ppm\"%(round(y_NO_2000,-2))\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The equilibrium constant for the reaction at 298.15 K is \t\t\t 4.5e-31\n",
+ " The concentration of NO at equilibrium at temperature 298.15 K is \t\t 2.7e-16\n",
+ " The equilibrium consmath.tant for the reaction at 2000 K is \t\t\t 4.0e-04\n",
+ " The concentration of NO at equilibrium at temperature 2000 K is \t\t 8100 ppm\n"
+ ]
+ }
+ ],
+ "prompt_number": 8
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.3 Page: 321\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The calculated NO cocentration\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 2000. #[K]\n",
+ "n_air = 1. #[mol] no of moles of the air\n",
+ "\n",
+ "# Let the moless of the NO formed be 2*x\n",
+ "# Then at equilibrium the unreacted moles of the N2 and O2 will be (0.78-x) and (0.21-x) respectively\n",
+ "\n",
+ "# Calculations\n",
+ "# from the previous example, we have \n",
+ "# [y_NO]**(2) = K_298*[y_N2]*[y_O2]\n",
+ "# here \n",
+ "K_2000 = 4*10**(-4)\n",
+ "# Substituting all the values, we have \n",
+ "# (2*x)**(2) = K_2000*(0.78-x)*(0.21-x)\n",
+ "\n",
+ "#Now \n",
+ "def f(x): \n",
+ "\t return (2*x)**(2) - K_2000*(0.78-x)*(0.21-x)\n",
+ "#def f(x): \n",
+ "\t #return (K_2000-2)*x**(2)-K_2000*(0.78+0.21)*x+K_2000*0.78*0.21\n",
+ "x = fsolve(f,0)\n",
+ "# Here negative root is meaningless,so\n",
+ "# concentration of NO\n",
+ "c_NO = 2*x*10**(6) #[ppm]\n",
+ "# now\n",
+ "p = c_NO/8100.*100\n",
+ "\n",
+ "# Results\n",
+ "print \" The calculated NO cocentration is %f ppm, which %f%% of the value computed in example 12.1\"%(c_NO,p)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The calculated NO cocentration is 7996.442873 ppm, which 98.721517% of the value computed in example 12.1\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.5 Page: 324\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Concentration of the ethylene \n",
+ "Concentration of the water \n",
+ "Concentration of the ethanol\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 298. #[K]\n",
+ "K = 29.6 # equilibrium consmath.tant at 298 K \n",
+ "P = 1. #[bar]\n",
+ "n_water_0 = 0.833 #[mol]\n",
+ "n_ethylene_0 = 1. #[mol]\n",
+ "n_ethanol_0 = 0. #[mol]\n",
+ "\n",
+ "# Calculations\n",
+ "n_T_0 = (n_water_0+n_ethylene_0+n_ethanol_0) #[mol]\n",
+ "\n",
+ "# From the previous example, we have \n",
+ "# [(0+e)/(1.833-e)]/([(1-e)/(1.833-e)]*[(0.833-e)/(1.833-e)]) = K*P/(1 bar)\n",
+ "# let y = [(0+e)/(1.833-e)]/([(1-e)/(1.833-e)]*[(0.833-e)/(1.833-e)])- K*P/(1 bar)\n",
+ "def f(e): \n",
+ "\t return ((0+e)/(1.833-e))/(((1-e)/(1.833-e))*((0.833-e)/(1.833-e)))-K*P/(1)\n",
+ "e_1 = fsolve(f,0)\n",
+ "e_2 = fsolve(f,0.5)\n",
+ "\n",
+ "# Here the root 'e_2' is meaningless, Then \n",
+ "y_ethanol = ((0+e_2)/(1.833-e_2))\n",
+ "y_ethylene = ((1-e_2)/(1.833-e_2))\n",
+ "y_water = ((0.833-e_2)/(1.833-e_2))\n",
+ "\n",
+ "# Results\n",
+ "print \"Concentration of the ethylene at the equilibrium is %f\"%(y_ethylene)\n",
+ "print \" Concentration of the water at the equilibrium is %f\"%(y_water)\n",
+ "print \" Concentration of the ethanol at the equilibrium is %f\"%(y_ethanol)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Concentration of the ethylene at the equilibrium is 0.243702\n",
+ " Concentration of the water at the equilibrium is 0.092079\n",
+ " Concentration of the ethanol at the equilibrium is 0.664219\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.6 Page: 324\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The equilibrium mol fraction of the hydrogen \n",
+ "And the equilibrium mol fraction of the oxygen\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 273.15+25 #[C]\n",
+ "P = 1. #[bar]\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# We have the reaction as \n",
+ "# H2 + 0.5O2 = H2O\n",
+ "# Using values of the Gibbs free energies of formation in the Table A.8(page 427) we have\n",
+ "g_H2O_0 = -237.1 #[kJ/mol]\n",
+ "g_O2_0 = 0 #[kJ/mol]\n",
+ "g_H2_0 = 0 #[kJ/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# now\n",
+ "delta_g_0 = g_H2O_0 - 0.5*g_O2_0-g_H2_0 #[kJ/mol]\n",
+ "# expresmath.sing delta_g_0 in [J/mol] \n",
+ "delta_g_1 = delta_g_0*1000 #[J/mol]\n",
+ "\n",
+ "# and \n",
+ "K = math.exp((-delta_g_1)/(R*Temp))\n",
+ "# And we have \n",
+ "# K = [a_H2O]/([a_H2]*[a_O2]**(0.5))\n",
+ "# Here we will again assume as in the previous example that we have an ideal solution of the ideal gases for which in equation 12.18 (page 320),we have \n",
+ "# v_i*Y_i = phi = 1.00 , and that for each reacmath.tant or product f_i_0 = 1 bar, putting all the values and simplifying \n",
+ "\n",
+ "# K = [y_H2O]/([y_H2]*[y_O2]**(0.5))*((1 bar)/P)**(0.5)\n",
+ "# Choomath.sing oxygen as the selected reacmath.tant, and assuming that we begin with 0.5 mol of oxygen and 1 mol of hydrogen,\n",
+ "# we have the stoichiometric coefficients of -1, -0.5 and +1 \n",
+ "# and \n",
+ "n_T_0 = 1.5#[mol]\n",
+ "# Also summation(v_i) = -0.5\n",
+ "\n",
+ "# Thus \n",
+ "# K = [e/(1.5-0.5*e)]/([(1-e)/(1.5-0.5*e)]*[(0.5-0.5*e)/(1.5-0.5*e)]**(0.5))\n",
+ "\n",
+ "# Now \n",
+ "def f(e): \n",
+ "\t return (e/(1.5-0.5*e))/(((1-e)/(1.5-0.5*e))*((0.5-0.5*e)/(1.5-0.5*e))**(0.5))\n",
+ "# e = fsolve(f,.99999)\n",
+ "# e = (1-2.4e-28)\n",
+ "\n",
+ "# So the equilibrium concentration of the hydrogen and oxygen are as\n",
+ "# y_H2 = [(1-e)/(1.5-0.5*e)]\n",
+ "# y_O2 = [(0.5-0.5*e)/(1.5-0.5*e)]\n",
+ "# These values are so less that scilab consol is print laying them zero, however we get\n",
+ "y_H2 = 2.4e-28\n",
+ "y_O2 = 0.5*y_H2\n",
+ "\n",
+ "# Results\n",
+ "print \" The equilibrium mol fraction of the hydrogen is %0.3e\"%(y_H2)\n",
+ "print \" And the equilibrium mol fraction of the oxygen is %e \"%(y_O2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The equilibrium mol fraction of the hydrogen is 2.400e-28\n",
+ " And the equilibrium mol fraction of the oxygen is 1.200000e-28 \n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.7 Page: 327\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Total change in the free energy of water going under given conditions \n",
+ "and the free energy change\n",
+ "'''\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 298.15 #[K]\n",
+ "Press = 1*10**(5) #[Pa]\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# Calculations\n",
+ "# We will calculate the free energy change from liquid to hypothetical gas in three steps\n",
+ "# 1) The liquid is reduced in pressure from the smath.radians(numpy.arcmath.tan(ard pressure of 1 bar to its vapour pressure at 298.15K and for this cange in the state we have \n",
+ "v_liquid = 1.805*10**(-5) #[m**(3)/mol] this liquid specific volume and we will treat is as a consmath.tant\n",
+ "\n",
+ "# The vapour preesure of the water 25C is given as\n",
+ "P_vapour_25 = 0.0317*10**(5) #[Pa]\n",
+ "\n",
+ "# thus change in the Gibbs free energy is \n",
+ "\n",
+ "def f0(P): \n",
+ "\t return v_liquid*P**(0)\n",
+ "\n",
+ "delta_g_0_1 = quad(f0,Press,P_vapour_25)[0]\n",
+ "\n",
+ "\n",
+ "# 2) In the second step the liquid is vaporized at that pressure, for which\n",
+ "delta_g_0_2 = 0 #[J/mol]\n",
+ "# because this is an equilibrium vaporization.\n",
+ "\n",
+ "# 3) And in this last step the vapour is replaced by an ideal gas, which will not condence, and compressed from the vapour pressure at 298.15K to 1 bar\n",
+ "# In this case the specific volume v_ideal of the ideal gas is replaced by the ideal gas law viz. (R*T)/P\n",
+ "\n",
+ "def f1(P): \n",
+ "\t return 1./P\n",
+ "\n",
+ "delta_g_0_3 = (R*Temp)* quad(f1,P_vapour_25,Press)[0]\n",
+ "\n",
+ "\n",
+ "# Thus total change in free energy is \n",
+ "delta_g_0 = delta_g_0_1+delta_g_0_2+delta_g_0_3 #[J/mol]\n",
+ "#expresmath.sing the result in kJ/mol\n",
+ "delta_g_1 = delta_g_0/1000 #[kJ/mol]\n",
+ "\n",
+ "# Results\n",
+ "print \" Total change in the free energy of water going under given conditions is %0.2f kJ/mol\"%(delta_g_1)\n",
+ "\n",
+ "# From Table A.8 we find \n",
+ "delta_g_0_ideal_gas = -228.6 #[kJ/mol]\n",
+ "delta_g_0_liquid = -237.1 #[kJ/mol]\n",
+ "# So \n",
+ "delta_g_o = delta_g_0_ideal_gas-delta_g_0_liquid #[kJ/mol]\n",
+ "\n",
+ "print \" From the values of Table A.8 given in the book the free energy change is %0.2f kJ/mol\"%(delta_g_o)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Total change in the free energy of water going under given conditions is 8.55 kJ/mol\n",
+ " From the values of Table A.8 given in the book the free energy change is 8.50 kJ/mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.8 Page: 330\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Equilibrium constants for the formation of ammonia from hydrogen and nitrogen are\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "# Variables\n",
+ "T1 = 273.15+25 #[K]\n",
+ "T2 = 273.15+400 #[K]\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# Umath.sing the table A.8, we have\n",
+ "# Gibb's free energy of the various species at 298.15 K are\n",
+ "g0_NH3 = -16.5 #[kJ/mol]\n",
+ "g0_N2 = 0 #[kJ/mol]\n",
+ "g0_H2 = 0 #[kJ/mol]\n",
+ "\n",
+ "# We have the reaction as \n",
+ "# 0.5N2 + 1.5H2 = NH3\n",
+ "\n",
+ "# Calculations\n",
+ "# So, Gibb's free energy change in the reaction is given as \n",
+ "delta_g_0 = g0_NH3 - 0.5*g0_N2 - 1.5*g0_H2 #[kJ/mol]\n",
+ "\n",
+ "# and\n",
+ "K_1 = math.exp(-delta_g_0*1000/(R*T1)) # Equilibrium consmath.tant of the reaction at temperature 298.15 K\n",
+ "\n",
+ "# Similarly enthalpy of the various species are \n",
+ "h0_NH3 = -46.1 #[kJ/mol]\n",
+ "h0_N2 = 0 #[kJ/mol]\n",
+ "h0_H2 = 0 #[kJ/mol]\n",
+ "\n",
+ "# So, enthalpy change of the reaction is given as \n",
+ "del_h_1 = h0_NH3 - 0.5*h0_N2 - 1.5*h0_H2 #[kJ/mol]\n",
+ "\n",
+ "# Now, from Table 12.3( page 332 )\n",
+ "a_NH3 = 3.578\n",
+ "a_H2 = 3.249\n",
+ "a_N2 = 3.280\n",
+ "b_NH3 = 3.020*10**(-3) #[1/K]\n",
+ "b_H2 = 0.422*10**(-3)\n",
+ "b_N2 = 0.593*10**(-3)\n",
+ "c_NH3 = 0 #[1/K**(2)]\n",
+ "c_H2 = 0 #[1/K**(2)]\n",
+ "c_N2 = 0 #[1/K**(2)]\n",
+ "d_NH3 = -0.186*10**(5) #[K**(2)]\n",
+ "d_H2 = 0.083*10**(5) #[K**(2)]\n",
+ "d_N2 = 0.040*10**(5) #[K**(2)]\n",
+ "\n",
+ "# So,\n",
+ "del_a = a_NH3 - 0.5*a_N2 - 1.5*a_H2\n",
+ "del_b = b_NH3 - 0.5*b_N2 - 1.5*b_H2\n",
+ "del_c = c_NH3 - 0.5*c_N2 - 1.5*c_H2\n",
+ "del_d = d_NH3 - 0.5*d_N2 - 1.5*d_H2\n",
+ "\n",
+ "# Now, enthalpy change of the reaction at any other temparature is given by\n",
+ "# Integrating and putting the limits, we have\n",
+ "# del_h = del_h_1 + R*( del_a*T + del_b*T**(2)/2 + del_c*T**(3)/3 - del_d/T) - R*( del_a*T_1 + del_b*T_1**(2)/2 + del_c*T_1**(3)/3 - del_d/T_1)\n",
+ "# let\n",
+ "I = R*( del_a*T1 + del_b*T1**(2)/2 + del_c*T1**(3)/3 - del_d/T1) #[J/mol]\n",
+ "\n",
+ "# From equation 12.28 and above relations we have\n",
+ "# Let math.log(K_2/K_1) = X, So,\n",
+ "\n",
+ "def f5(T): \n",
+ "\t return (del_h_1*1000 - I + R*(del_a*T + del_b*T**(2)/2 + del_c*T**(3)/3 - del_d/T))/T**(2)\n",
+ "\n",
+ "X = (1/R)* quad(f5,T1,T2)[0]\n",
+ "\n",
+ "\n",
+ "# So, \n",
+ "K_2 = K_1*math.exp(X)\n",
+ "\n",
+ "# Results\n",
+ "print \" Equilibrium consmath.tants for the formation of ammonia from hydrogen and nitrogen are \"\n",
+ "print \" K = %0.0f at temperature 25 deg C\"%(K_1)\n",
+ "print \" K = %f at temperature 400 deg C\"%(K_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Equilibrium consmath.tants for the formation of ammonia from hydrogen and nitrogen are \n",
+ " K = 778 at temperature 25 deg C\n",
+ " K = 0.013588 at temperature 400 deg C\n"
+ ]
+ }
+ ],
+ "prompt_number": 21
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.9 Page: 335\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The mole fraction of NH3 in the equilibrium\n",
+ "The mole fraction of NH3 in the equilibrium\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# Initial moles of the gases are \n",
+ "n_H2_0 = 1.5 #[mol]\n",
+ "n_N2_0 = 0.5 #[mol]\n",
+ "n_NH3_0 = 0 #[mol]\n",
+ "T_1 = 298.15 #[K]\n",
+ "T_2 = 673.15 #[K]\n",
+ "P = 1. #[bar]\n",
+ "\n",
+ "# We start with the equation as \n",
+ "# [f_NH3/f_0_NH3]/([f_N2/f_0_N2]**(0.5)*[f_H2/f_0_H2]**(1.5)) = K\n",
+ "\n",
+ "# For a pressure of 1 bar with the assumption of ideal solution of ideal gases and smath.radians(numpy.arcmath.tan(ard state fugacities of 1 bar,\n",
+ "# a_i = [f_i/f_0_i] = [P*y_i/(1 bar)] = y_i \n",
+ "# The equilibrium relation is given by \n",
+ "# K = [y_NH3]/([y_N2]**(0.5)*[y_H2]**(1.5))\n",
+ "\n",
+ "# We have the stoichiometric coefficient of N2, H2 and NH3 as -0.5, -1.5 and +1 respectively, so summation(v_i) = -1\n",
+ "# Now umath.sing the equilibrium relations which are Equations 12.W, 12.X and 12.Y ( page 322 ), we have \n",
+ "\n",
+ "# K = ((0+e)/(2-e))/(((0.5-0.5*e)/(2-e))**(0.5)*((1.5-1.5*e)/(2-e))**(1.5))\n",
+ "# Form the example 12.8 of this book we know that \n",
+ "K_298 = 778. # at temperature 298.15K\n",
+ "K_673 = 0.013 # at temperature 673.15K\n",
+ "\n",
+ "# Calculations\n",
+ "# Solving for temperature 298.15\n",
+ "def g(e_1): \n",
+ "\t return ((0+e_1)/(2-e_1))/(((0.5-0.5*e_1)/(2-e_1))**(0.5)*((1.5-1.5*e_1)/(2-e_1))**(1.5))-K_298\n",
+ " \n",
+ "e_1 = fsolve(g,0.97)\n",
+ "y_NH3_298 = e_1/(2-e_1)\n",
+ "\n",
+ "# Similarily solving for temperature 673.15K\n",
+ "def h(e_2): \n",
+ "\t return ((0+e_2)/(2-e_2))/(((0.5-0.5*e_2)/(2-e_2))**(0.5)*((1.5-1.5*e_2)/(2-e_2))**(1.5))-K_673\n",
+ "\n",
+ "e_2 = fsolve(h,0)\n",
+ "y_NH3_673 = e_2/(2-e_2)\n",
+ "\n",
+ "# Results\n",
+ "print \" The mole fraction of NH3 in the equilibrium at the temperature 298.15K and 1 bar is %f\"%(y_NH3_298)\n",
+ "print \" The mole fraction of NH3 in the equilibrium at the temperature 673.15K and 1 bar is %f\"%(y_NH3_673)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The mole fraction of NH3 in the equilibrium at the temperature 298.15K and 1 bar is 0.939036\n",
+ " The mole fraction of NH3 in the equilibrium at the temperature 673.15K and 1 bar is 0.004187\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.10 Page: 337\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The mole fraction of the ammonia in the equilibrium\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 273.15+400 #[K]\n",
+ "P = 150*1.01325 #[bar]\n",
+ "\n",
+ "# Comparing this with the example 12.9, we see that we can use the same equation , but K_673 is replaced by K_673*(P/(1bar))**(1.5+0.5-1)\n",
+ "K_673 = 0.013\n",
+ "\n",
+ "# So \n",
+ "K = K_673*(P/1)**(1.5+0.5-1)\n",
+ "\n",
+ "# Calculations\n",
+ "# We have \n",
+ "# K = ((0+e)/(2-e))/(((0.5-0.5*e)/(2-e))**(0.5)*((1.5-1.5*e)/(2-e))**(1.5))\n",
+ "def f(e): \n",
+ "\t return ((0+e)/(2-e))/(((0.5-0.5*e)/(2-e))**(0.5)*((1.5-1.5*e)/(2-e))**(1.5))-K\n",
+ "e=fsolve(f,0.5)\n",
+ "\n",
+ "# Thus mole fraction of the ammonia in the gas is given by \n",
+ "y_NH3 = (0+e)/(2-e)\n",
+ "\n",
+ "# Results\n",
+ "print \"The mole fraction of the ammonia in the equilibrium is %0.2f\"%(y_NH3)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The mole fraction of the ammonia in the equilibrium is 0.31\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.11 Page: 338\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The mole fraction of the ammonia in the equilibrium\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# The data used in this example will e same as in the example 12.10\n",
+ "T = 273.15+400 #[K] given temperature\n",
+ "P = 150*1.01325 #[bar] given pressure\n",
+ "\n",
+ "# Here again the equation will be same as in the example 12.9 like we used in the example 12.10 only K_673 is replaced by (K/K_v)*[P/(1 bar)]**(1.5+0.5-1)\n",
+ "K_673 = 0.013\n",
+ "# The value of 'K_v' is calculated by the equation 12.BN, which is \n",
+ "# log10(1/K_v) = (0.1191849/T + 91.87212/T**(2) + 25122730/T**(4))*P\n",
+ "\n",
+ "# Calculations\n",
+ "# So \n",
+ "K_v = (10**((0.1191849/T + 91.87212/T**(2) + 25122730/T**(4))*P))**(-1)\n",
+ "\n",
+ "# Thus \n",
+ "K = (K_673/K_v)*(P/1)**(1.5+0.5-1)\n",
+ "\n",
+ "# Now from the previous example we have\n",
+ "# K = ((0+e)/(2-e))/(((0.5-0.5*e)/(2-e))**(0.5)*((1.5-1.5*e)/(2-e))**(1.5))\n",
+ "\n",
+ "def f(e): \n",
+ "\t return ((0+e)/(2-e))/(((0.5-0.5*e)/(2-e))**(0.5)*((1.5-1.5*e)/(2-e))**(1.5))-K\n",
+ "e = fsolve(f,0.2)\n",
+ "\n",
+ "# Mol fraction of the ammonia in the gas phase in the equilibrium is given by\n",
+ "y_NH3 = (0+e)/(2-e)\n",
+ "\n",
+ "# Results\n",
+ "print \" The mole fraction of the ammonia in the equilibrium is %0.2f\"%(y_NH3)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The mole fraction of the ammonia in the equilibrium is 0.34\n"
+ ]
+ }
+ ],
+ "prompt_number": 24
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.12 Page: 340\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "On increasing the pressure from 1 atm to 150 atm the reacted amount of the equimolar\n",
+ "reactants at equilibrium becomes times of initial\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "p_i = 1. #[atm] initial pressure \n",
+ "P = 150. #[atm] final pressure\n",
+ "T = 273+25. #[K] Given temperature\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# Now ignoring the difference between 25C and 20C, we use the values given in the table A.8 (page 427) to get \n",
+ "delta_g_0 = 10.54*1000 #[J/mol]\n",
+ "# And thus \n",
+ "\n",
+ "# Calculations\n",
+ "K = math.exp((-delta_g_0)/(R*T))\n",
+ "\n",
+ "# Now the chemical reaction is given by\n",
+ "# C2H5OH + CH3COOH = C2H5OOC2H5 + H2O\n",
+ "\n",
+ "# Let we start with 1 mol each of ethanol and acetic acid, and at equilibrium 'e' moles each of the reacmath.tants reacted, then\n",
+ "# remaining amount of each of the two reacmath.tants will be (1-e) and that products formation will be 'e' mol each\n",
+ "\n",
+ "# We have \n",
+ "# K = (a_C2H5OOC2H5*a_H2O)/(a_C2H5OH*a_CH3COOH) = (x_C2H5OOC2H5*x_H2O)/(x_C2H5OH*x_CH3COOH) = (e*e)/((1-e)*(1-e))\n",
+ "# Now solving for 'e'\n",
+ "def f(e): \n",
+ "\t return (e*e)/((1-e)*(1-e))-K\n",
+ "e = fsolve(f,0)\n",
+ "\n",
+ "# To see the effect of changing the pressure we first compute the volume increase of the reaction \n",
+ "# delta_v = v_C2H5OOC2H5 + v_H2O - v_C2H5OH - v_CH3COOH, where v_i is the molar volume of the ith component\n",
+ "# From the Table 12.4(page 340), we have\n",
+ "v_C2H5OOC2H5 = 97.67 #[ml/mol]\n",
+ "v_H2O = 18.03 #[ml/mol]\n",
+ "v_C2H5OH = 58.30 #[ml/mol]\n",
+ "v_CH3COOH = 57.20 #[ml/mol]\n",
+ "\n",
+ "# Thus volume increase of the reaction is\n",
+ "delta_v = v_C2H5OOC2H5 + v_H2O - v_C2H5OH - v_CH3COOH #[ml/mol]\n",
+ "\n",
+ "# So, from Le Chatelier's principal, on increamath.sing the pressure , the reaction is forced in the direction of the reacmath.tant or away from the product \n",
+ "# To calculate the extent of shifting we will take the help of the activity of each of the four component \n",
+ "# a_i = (f_i/f_i_0) = (x_i*Y_i*p_i)/p_i*exp(v/(R*T)*(P-p_i))\n",
+ "# we will assume that this is an ideal solution so that Y_i = 1.00, for every component\n",
+ "\n",
+ "# Now substituting the activity of each component in the expression of the equilibrium consmath.tant given above, we have\n",
+ "# K = (x_C2H5OOC2H5*x_H2O)/(x_C2H5OH*x_CH3COOH)*exp[(delta_v)/(R*T)*(P-p_i)]\n",
+ "# or\n",
+ "# K = (e_1*e_1)/((1-e_1)*(1-e_1))*exp[(delta_v)/(R*T)*(P-p_i)]\n",
+ "\n",
+ "# Solving for 'e_1'\n",
+ "def g(e_1): \n",
+ "\t return (e_1*e_1)/((1-e_1)*(1-e_1))*math.exp((delta_v)/(R*T)*(P-p_i))-K\n",
+ "e_1 = fsolve(g,0.2)\n",
+ "\n",
+ "# Now if we carry out the calculation to enough significant figures then\n",
+ "a = e_1/e\n",
+ "\n",
+ "# It indicates that e_1 is 'a' times of that of the e\n",
+ "\n",
+ "# Results\n",
+ "print \"On increamath.sing the pressure from 1 atm to 150 atm the reacted amount of the equimolar \\\n",
+ "reacmath.tants at equilibrium becomes %f times of initial\"%(a)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "On increamath.sing the pressure from 1 atm to 150 atm the reacted amount of the equimolar reacmath.tants at equilibrium becomes 0.994639 times of initial\n"
+ ]
+ }
+ ],
+ "prompt_number": 25
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 12.13 Page: 342\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Value of the K_p at the given condition\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 150. #[atm] given pressure\n",
+ "T = 400. #[C] temperature\n",
+ "# Umath.sing the values from the example 12.11, we know that\n",
+ "K = 0.013\n",
+ "K_v = 0.84\n",
+ "delta_v = 1.5+0.5-1\n",
+ "\n",
+ "# Calculations\n",
+ "# so \n",
+ "# K_p = (K/K_v)*[1/bar]**(-summation(v_i)) = (K/K_v)*[1/bar]**(delta_v)\n",
+ "\n",
+ "K_p = (K/K_v)*(1/1)**(delta_v) #[1/bar]\n",
+ "\n",
+ "# Results\n",
+ "print \" Value of the K_p at the given condition is %f 1/bar)\"%(K_p)\n",
+ "print \" The basic K is dimensionless%( but K_p has the dimensions of pressure to the power.\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Value of the K_p at the given condition is 0.015476 1/bar)\n",
+ " The basic K is dimensionless%( but K_p has the dimensions of pressure to the power.\n"
+ ]
+ }
+ ],
+ "prompt_number": 26
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch13.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch13.ipynb
new file mode 100644
index 00000000..6042a664
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch13.ipynb
@@ -0,0 +1,862 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 13 : Equilibrium In Complex Chemical Reactions"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.1 Page: 349\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find the equilibrium the product of the hydrogen ion and hydroxil ion\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T =273.15+25 #[K] given temperature\n",
+ "R = 8.314 #[J/(mol*K)] universal gas consmath.tant\n",
+ "\n",
+ "# We have the reaction as follows\n",
+ "# H2O = H+ + OH-\n",
+ "\n",
+ "# Reading the free energy of species from the Table A.8 ( page 427), we have \n",
+ "g_0_H = 0 #[kJ/mol]\n",
+ "g_0_OH = -157.29 #[kJ/mol]\n",
+ "g_0_H2O = -237.1 #[kJ/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus free enaergy change of the reaction is \n",
+ "delta_g_0 = g_0_H + g_0_OH - g_0_H2O #[kJ/mol]\n",
+ "# Changing in J/mol we have \n",
+ "delta_g_1 = delta_g_0*1000 #[J/mol]\n",
+ "\n",
+ "# Now equilibrium consmath.tant of the reaction is given by\n",
+ "K = math.exp((-delta_g_1)/(R*T))\n",
+ "\n",
+ "# Also, in terms of activity\n",
+ "# K = ([[H+]/(1 molal)]*[[OH-]/(1 molal)])/[a_water]\n",
+ "# The activity of any pure liquid at its smath.radians(numpy.arcmath.tan(ard state is 1.00, and here water is practically pure, so\n",
+ "# K_w = [[H+]/(1 molal)]*[[OH-]/(1 molal)] = K\n",
+ "# or \n",
+ "K_w = K\n",
+ "\n",
+ "# Results\n",
+ "print \"At the equilibrium the product of the hydrogen ion and hydroxil ion is %0.1e\"%(K_w)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "At the equilibrium the product of the hydrogen ion and hydroxil ion is 1.0e-14\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.2 Page: 351\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The equilibrium concentration of H2SO4 in terms of molality\n",
+ "The equilibrium concentration of HSO4- in terms of molality\n",
+ "The equilibrium concentration of SO4-- in terms of molality\n",
+ "The equilibrium concentration of H+ in terms of molality\n",
+ "'''\n",
+ "\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "n_H2SO4 = 1. #[mol] mole of the sulphuric acid\n",
+ "w_water = 1000. #[g] weight of the water \n",
+ "T =273.15+25 #[K] temperature\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# We the two sequential reaction, in which the first reaction is\n",
+ "# H2SO4 = HSO4- + H+\n",
+ "\n",
+ "# From the Table A.8 (page 427) as given in the book, free energy of the above species are \n",
+ "g_0_H = 0 #[J/mol] free energy of the hydrogen ion\n",
+ "g_0_HSO4 = -756.01*1000 #[J/mol] free energy of the bisulphate ion\n",
+ "g_0_H2SO4 = -744.50*1000 #[J/mol] free enery of sulphuric acid\n",
+ "\n",
+ "# Calculations\n",
+ "# So \n",
+ "delta_g_0 = g_0_H + g_0_HSO4 - g_0_H2SO4 #[J/mol]\n",
+ "\n",
+ "# So equilibrium consmath.tant of the reaction is given by\n",
+ "K_1 = math.exp((-delta_g_0)/(R*T))\n",
+ "\n",
+ "# Now the second reaction is which is going on sequentialy is\n",
+ "# HSO4- = SO4(-2) + H+\n",
+ "\n",
+ "# Again from the Table A.8 reading the values of free energy of the species of the above reaction, we have\n",
+ "g_0_H = 0 #[J/mol] free energy of the hydrogen ion\n",
+ "g_0_SO4 = -744.62*1000 #[J/mol] free energy of sulphate ion\n",
+ "g_0_HSO4 = -756.01*1000 #[J/mol] free energy of the bisulphate ion\n",
+ "\n",
+ "# So \n",
+ "delta_g_1 = g_0_H + g_0_SO4 - g_0_HSO4 #[J/mol]\n",
+ "\n",
+ "# Equilibrium consmath.tant of thi reaction is \n",
+ "K_2 = math.exp((-delta_g_1)/(R*T))\n",
+ "\n",
+ "# Now we have 1 mol of H2SO4 initially. Let e_1 mol of H2SO4 ionised at equilibrium\n",
+ "# Then amount of the each of two product i.e. bisulphate and hydrogen ion will be e_1 mol\n",
+ "# Now for the second reaction e_1 mol of the bisulphate ion will be treated as initial concentration.\n",
+ "# If at equilibrium e_2 moles of bisulphate ion has ionised\n",
+ "# In this case the amount of each of two product of this reaction will be e_2 mol\n",
+ "# So final amount of each of the species (in moles) at equilibrium is given as \n",
+ "# n_H2SO4 = (1-e_1)\n",
+ "# n_HSO4 = (e_1-e_2)\n",
+ "# n_SO4 = e_2\n",
+ "# n_H = (e_1+e_2)\n",
+ "\n",
+ "# now\n",
+ "# K_1 = ([HSO4]*[H])/[H2SO4] = ((e_1-e_2)*(e_1+e_2))/(1-e_1)...................(1)\n",
+ "# and that for the second reaction \n",
+ "# K_2 = ([SO4]*[H])/[HSO4] = ((e_2)*(e_1+e_2))/(e_1-e_2).......................(2)\n",
+ "\n",
+ "# e = [e_1 e_2]\n",
+ "# Solving the two given simulmath.taneous equations,we have\n",
+ "def F(e):\n",
+ " f = [0,0]\n",
+ " f[0] = ((e[0]-e[1])*(e[0]+e[1]))/(1-e[0]) - K_1\n",
+ " f[1] = ((e[1])*(e[0]+e[1]))/(e[0]-e[1]) - K_2\n",
+ " return f\n",
+ "\n",
+ "# Initial guess:\n",
+ "e = [0.8,0.1]\n",
+ "y = fsolve(F,e)\n",
+ "e_1 = y[0]\n",
+ "e_2 = y[1]\n",
+ "\n",
+ "# So, concentration of the various species in equilibrium is given as \n",
+ "m_H2SO4 = 1-e_1 # [molal]\n",
+ "m_HSO4 = e_1 - e_2 #[molal]\n",
+ "m_SO4 = e_2 #[molal]\n",
+ "m_H = e_1 + e_2 #[molal]\n",
+ "\n",
+ "# Results\n",
+ "print \" The equilibrium concentration of H2SO4 in terms of molality is %f molal\"%(m_H2SO4)\n",
+ "print \" The equilibrium concentration of HSO4- in terms of molality is %f molal\"%(m_HSO4)\n",
+ "print \" The equilibrium concentration of SO4-- in terms of molality is %f molal\"%(m_SO4)\n",
+ "print \" The equilibrium concentration of H+ in terms of molality is %f molal\"%(m_H)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The equilibrium concentration of H2SO4 in terms of molality is 0.009444 molal\n",
+ " The equilibrium concentration of HSO4- in terms of molality is 0.980653 molal\n",
+ " The equilibrium concentration of SO4-- in terms of molality is 0.009903 molal\n",
+ " The equilibrium concentration of H+ in terms of molality is 1.000459 molal\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.3 Page: 352\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Percent conversion of CO\n",
+ "Percent conversion of CO2\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 10. #[MPa] given pressure\n",
+ "T = 250. #[C] Temperature\n",
+ "# Let the total number of moles in the feed be one, then\n",
+ "n_T_0 = 1. #[mol]\n",
+ "n_CO = 0.15 #[mol]\n",
+ "n_CO2 = 0.08 #[mol]\n",
+ "n_H2 = 0.74 #[mol]\n",
+ "n_CH4 = 0.03 #[mol]\n",
+ "\n",
+ "# The two simulmath.taneous reactions taking place are\n",
+ "# CO + 2*H2 = CH3OH\n",
+ "# CO2 + H2 = CO + H2O\n",
+ "\n",
+ "# Let us denote the first reaction by 1 and the second reaction by 2\n",
+ "# and K_i = (K/K_v)*[P/(1 atm)]**(-summation(v_i))\n",
+ "# and that summation(v_i) = V_i\n",
+ "\n",
+ "# Then from the table 13.C (page 353) as reported in the book, we have \n",
+ "V_1 = -2\n",
+ "V_2 = 0\n",
+ "K_1 = 49.9 # For the first reaction \n",
+ "K_2 = 0.032 # For the second reaction\n",
+ "\n",
+ "# Now let v_i denotes the stoichiometric coefficient of species 'i', then\n",
+ "v_CO_1 = -1\n",
+ "v_H2_1 = -2\n",
+ "v_CH3OH_1 = +1\n",
+ "v_CO2_2 = -1\n",
+ "v_H2_2 = -1\n",
+ "v_CO_2 = +1\n",
+ "v_H2O_2 = +1\n",
+ "\n",
+ "# Let e_1 = the moles of CO reacted in reaction 1 and e_2 = the moles of CO2 reacted in reaction 2.\n",
+ "# Now mol fractions of each of the species in the equilibrium is \n",
+ "# y_CO = (n_CO+v_CO_1*e_1+v_CO_2*e_2)/(n_T_0+e_1*V_1+e_2*V_2) = (0.15-1*e_1+1*e_2)/(1+e_1*(-2)+e_2*(0)) = (0.15 - e_1 + e_2)/(1 - 2*e_1)\n",
+ "\n",
+ "# similarily\n",
+ "# y_H2 = (n_H2+v_H2_1*e_1+v_H2_2*e_2)/(n_T_0+e_1*V_1+e_2*V_2) = (0.74 - 2*e_1 - e_2)/(1 - 2*e_1)\n",
+ "\n",
+ "# y_CH3OH = (n_CH3OH+v_CH3OH_1*e_1+v_CH3OH_2*e_2)/(n_T_0+e_1*V_1+e_2*V_2) = (0 + e_1)/(1 - 2*e_1)\n",
+ "\n",
+ "# y_CO2 = (n_CO2+v_CO2_1*e_1+v_CO2_2*e_2)/(n_T_0+e_1*V_1+e_2*V_2) = (0.08 - e_2)/(1 - 2*e_1)\n",
+ "\n",
+ "# y_H2O = (n_H2O+v_H2O_1*e_1+v_H2O_2*e_2)/(n_T_0+e_1*V_1+e_2*V_2) = (0 + e_2)/(1 - 2*e_1)\n",
+ "\n",
+ "# Now putting the values in the expression of the equilibrium consmath.tant of the reactions, for the reaction 1 we have\n",
+ "\n",
+ "# K_1 = ((0 + e_1)/(1 - 2*e_1))/(((0.15 - e_1 + e_2)/(1 - 2*e_1))*((0.74 - 2*e_1 - e_2)/(1 - 2*e_1))**(2))\n",
+ "\n",
+ "# K_2 = (((0.15 - e_1 + e_2)/(1 - 2*e_1))*((0 + e_2)/(1 - 2*e_1)))/(((0.08 - e_2)/(1 - 2*e_1))*((0.74 - 2*e_1 - e_2)/(1 - 2*e_1)))\n",
+ "\n",
+ "# Calculations\n",
+ "# e = [e_1 e_2]\n",
+ "# Solving the two given simulmath.taneous equations,we have\n",
+ "def F(e):\n",
+ " f = [0,0]\n",
+ " f[0] = ((0 + e[0])/(1 - 2*e[0]))/(((0.15 - e[0] + e[1])/(1 - 2*e[0]))*((0.74 - 2*e[0] - e[1])/(1 - 2*e[0]))**(2)) - K_1\n",
+ " f[1] = (((0.15 - e[0] + e[1])/(1 - 2*e[0]))*((0 + e[1])/(1 - 2*e[0])))/(((0.08 - e[1])/(1 - 2*e[0]))*((0.74 - 2*e[0] - e[1])/(1 - 2*e[0]))) - K_2\n",
+ " return f\n",
+ "\n",
+ "\n",
+ "# Initial guess:\n",
+ "e = [0.109, 0]\n",
+ "y = fsolve(F,e)\n",
+ "e_1 = y[0]\n",
+ "e_2 = y[1]\n",
+ "\n",
+ "# So, percent conversion of CO2 is given as\n",
+ "# (moles of CO2 reacted)/(moles of CO2 fed) i.e.\n",
+ "c_CO2 = e_2/(n_CO2)*100\n",
+ "# Number of moles of CO Formed by the second reaction is 0.032\n",
+ "# So, percent conversion of CO is given as\n",
+ "c_CO = e_1/(n_CO + 0.032)*100\n",
+ "\n",
+ "# Results\n",
+ "print \" Percent conversion of CO is %f%%\"%(c_CO)\n",
+ "print \" Percent conversion of CO2 is %f%%\"%(c_CO2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Percent conversion of CO is 96.815234%\n",
+ " Percent conversion of CO2 is 47.930771%\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.4 Page: 354\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The amount of solid dissolved in terms of solubility product\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+25 #[K] Temperature\n",
+ "R = 8.314 #[J/(mol*K)] universal gas consmath.tant\n",
+ "\n",
+ "# Solubility of AgCl in water follows\n",
+ "# AgCl = Ag+ + Cl-\n",
+ "# From the Table A.8, free energy of above species are\n",
+ "g_0_Ag = 77.12*1000 #[J/mol]\n",
+ "g_0_Cl = -131.26*1000 #[J/mol]\n",
+ "g_0_AgCl = -109.8*1000 #[J/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Free energy change of the reacton is given by \n",
+ "delta_g_0 = g_0_Ag + g_0_Cl - g_0_AgCl #[J/mol]\n",
+ "\n",
+ "# Now equilbrium consmath.tant of the reaction is given by\n",
+ "K = math.exp((-delta_g_0)/(R*T))\n",
+ "\n",
+ "# In terms of activity of the components, equilibrium consmath.tant is \n",
+ "# K = [[Ag+]/(1 molal)*[Cl-]/(1 molal)]/[a_AgCl]\n",
+ "\n",
+ "# For solids f_i_0 is normaly taken as the fugacity of the pure crystalline solid,and the activity of the pure crystalline solid is = 1.00, so\n",
+ "a_AgCl = 1.00\n",
+ "\n",
+ "# Results\n",
+ "# hence \n",
+ "# [[Ag+]/(1 molal)*[Cl-]/(1 molal)]= K = K_sp , solubility product\n",
+ "print \"The amount of solid dissolved in terms of solubility product is %0.2e\"%(K)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The amount of solid dissolved in terms of solubility product is 1.77e-10\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.5 Page: 357\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Amount of the CO2 dissolved in water in equilibrium with air\n",
+ "Conentration of HCO3 ion and hydrogen ion H- in solution in equilibrium with air\n",
+ "And concentration of CO3 ion in the solution in equilibrium with air\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+25 #[K] Given temperature of air\n",
+ "P = 1. #[atm] Pressure of the air\n",
+ "y_CO2 = 350.*10**(-6) # Amount of CO2 present in air at the given condition \n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# At equilibrium there are two ionisition reactions takin place sequentily\n",
+ "# First ionisation reaction is \n",
+ "# H2CO3 = H+ + HCO3-\n",
+ "# Free energy of the species of the above reation is\n",
+ "g_0_H2CO3 = -623.1*1000 #[J/mol]\n",
+ "g_0_H = 0. #[J/mol]\n",
+ "g_0_HCO3 = -586.85*1000 #[J/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# So free energy change of the reaction is given by \n",
+ "delta_g_0 = g_0_H + g_0_HCO3 - g_0_H2CO3 #[J/mol]\n",
+ "# Equilibrium consmath.tant of the reaction is given by\n",
+ "K_1 = math.exp((-delta_g_0)/(R*T)) \n",
+ "\n",
+ "# And the second one is \n",
+ "# HCO3- = H+ + CO3(-2)\n",
+ "# Free energy of the species of the second reacion are\n",
+ "g_0_CO3 = -527.89*1000 #[J/mol]\n",
+ "\n",
+ "# Free energy change of the second reacion is \n",
+ "delta_g_1 = g_0_H + g_0_CO3 - g_0_HCO3 #[J/mol]\n",
+ "# So equilibrium consmath.tant of the reaction is given by\n",
+ "K_2 = math.exp((-delta_g_1)/(R*T))\n",
+ "\n",
+ "# Now, writing the expression of the equilibrium consmath.tant of the first reaction, we have\n",
+ "# K_1 = ([HCO3-]*[H+])/[H2CO3]\n",
+ "# and that for the second reaction \n",
+ "# K_2 = ([CO3]*[H+])/[CO3-]\n",
+ "\n",
+ "# From the Table A.3 (page 419) as reported in the book, Henry's law consmath.tant is \n",
+ "H = 1480. #[atm]\n",
+ "\n",
+ "# From Henry's law \n",
+ "# P*y_CO2 = x_O2*H , so\n",
+ "x_CO2 = P*y_CO2/H\n",
+ "\n",
+ "# This gives the mol fracion. The dissociation consmath.tant are based on molaities a smath.radians(numpy.arcmath.tan(ard states, so\n",
+ "# Molality of the CO2 in the solution is \n",
+ "# m_CO2 = x_CO2*n_water , where 'n_water' is number of moles of water in 1000g of water, so\n",
+ "n_water = 1000/18. #[mol]\n",
+ "m_CO2 = x_CO2*n_water #[molal]\n",
+ "\n",
+ "# Then we assume that almost all the H+ comes from the dissociation of dissolved CO2, so \n",
+ "# m_HCO3 = m_H, i.e. molality of bicarbonate is approximately equal to molality of hydrogen ion in the solution and hence \n",
+ "m_HCO3 = math.sqrt(K_1*m_CO2) #[molal]\n",
+ "m_H = m_HCO3 #[molal]\n",
+ "\n",
+ "# Then we compute \n",
+ "m_CO3 = K_2*(m_HCO3/m_H) #[molal]\n",
+ "\n",
+ "# Results\n",
+ "print \" Amount of the CO2 dissolved in water in equilibrium with air is \\t\\t\\t%0.2e molal\"%(m_CO2)\n",
+ "print \" Conentration of HCO3 ion and hydrogen ion H- in solution in equilibrium with air is %0.2e molal\"%(m_HCO3)\n",
+ "print \" And concentration of CO3 ion in the solution in equilibrium with air is\\t\\t%0.2e molal\"%(m_CO3)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Amount of the CO2 dissolved in water in equilibrium with air is \t\t\t1.31e-05 molal\n",
+ " Conentration of HCO3 ion and hydrogen ion H- in solution in equilibrium with air is 2.42e-06 molal\n",
+ " And concentration of CO3 ion in the solution in equilibrium with air is\t\t4.68e-11 molal\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.6 Page: 358\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Amount of the CO2 dissolved in water in equilibrium with air\n",
+ "Conentration of HCO3 ion in solution in equilibrium with air\n",
+ "And concentration of CO3 ion in the solution in equilibrium with air\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# All the data are taken from the previous example 13.5 \n",
+ "m_H = 10**(-10) #[molal] molality of hydrogen ion\n",
+ "K_1 = 4.5*10**(-7)\n",
+ "K_2 = 4.7*10**(-11)\n",
+ "\n",
+ "# Calculations\n",
+ "# Our Henry's law calculations are independent of the subsequent fate of the dissolved CO2.\n",
+ "# The concentration of dissolved CO2 in equilibrium with atmosphere is \n",
+ "m_CO2 = 1.32*10**(-5) #[molal] from previous example\n",
+ "# It is independent of that acidity or basicity of the water, and hence \n",
+ "m_HCO3 = K_1*(m_CO2/m_H) #[molal]\n",
+ "\n",
+ "# and \n",
+ "m_CO3 = K_2*(m_HCO3/m_H) #[molal]\n",
+ "\n",
+ "# Results\n",
+ "print \" Amount of the CO2 dissolved in water in equilibrium with air is \\t%0.2e molal\"%(m_CO2)\n",
+ "print \" Conentration of HCO3 ion in solution in equilibrium with air is \\t %0.2e molal\"%(m_HCO3)\n",
+ "print \" And concentration of CO3 ion in the solution in equilibrium with air is %0.2e molal\"%(m_CO3)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Amount of the CO2 dissolved in water in equilibrium with air is \t1.32e-05 molal\n",
+ " Conentration of HCO3 ion in solution in equilibrium with air is \t 5.94e-02 molal\n",
+ " And concentration of CO3 ion in the solution in equilibrium with air is 2.79e-02 molal\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.7 Page: 362\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Standard state cell voltage for the production of aluminium\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 298.15 #[K] Temperature\n",
+ "F = 96500. #[(coulomb)/(mole*electrons)] faraday consmath.tant\n",
+ "\n",
+ "# The reaction is given as\n",
+ "# Al2O3 + 1.5C = 2Al + 1.5CO2\n",
+ "\n",
+ "# No of the electron being exchanged are \n",
+ "n_e = 6. #[electron]\n",
+ "# All the reacmath.tants and products enter or leave the reactor as pure species in their smath.radians(numpy.arcmath.tan(ard states, so\n",
+ "# delta_g_0 = delta_g_1 and E = E_0\n",
+ "# Free energy of the species in the above equation as reported in the Table A.8 in the book is \n",
+ "g_0_CO2 = -394.4*1000 #[J/mol] \n",
+ "g_0_Al = 0 #[J/mol]\n",
+ "g_0_C = 0 #[J/mol]\n",
+ "g_0_Al2O3 = -1582.3*1000 #[J/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Free energy change of the reaction is \n",
+ "delta_g_0 = 1.5*g_0_CO2 + 2*g_0_Al - 1.5*g_0_C - g_0_Al2O3 #[J/mol]\n",
+ "\n",
+ "# So, smath.radians(numpy.arcmath.tan(ard state cell voltage is \n",
+ "E_0 = (-delta_g_0)/(n_e*F) #[V]\n",
+ "\n",
+ "# Results\n",
+ "print \"Standard state cell voltage for the production of aluminium is %f Volt\"%(E_0)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Standard state cell voltage for the production of aluminium is -1.711054 Volt\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.8 Page: 362\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The reversible voltage for given electrochemical device\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 298.15 #[K] Temperature\n",
+ "F = 96500. #[(coulomb)/(mole*electrons)] faraday consmath.tant\n",
+ "\n",
+ "# The reaction taking place between lithium and florine is \n",
+ "# Li + F = LiF\n",
+ "# Calculations\n",
+ "# From Table A.8 we find that \n",
+ "delta_g_0 = -587.7*1000 #[J/mol]\n",
+ "# We also know that \n",
+ "n_e = 1 #[electron] no of electron transferred\n",
+ "# That is because the valence Li and F change by 1, so one electron is transferred per molecule of LiF, thus\n",
+ "E_298_0 = (-delta_g_0)/(n_e*F) #[V]\n",
+ "\n",
+ "# Results\n",
+ "print \"The reversible voltage for given electrochemical device is %f Volt\"%(E_298_0)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The reversible voltage for given electrochemical device is 6.090155 Volt\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.9 Page: 363\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The equilibrium cell voltage of electrolytic cell\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 298.15 #[K] Temperature\n",
+ "P_0 = 1. #[atm]\n",
+ "P = 100. #[atm]\n",
+ "E_0 = -1.229 #[V]\n",
+ "F = 96500. #[(coulomb)/(mole*electrons)] faraday consmath.tant\n",
+ "R = 8.314 #[J/(mol*K)] universal gas consmath.tant \n",
+ "\n",
+ "# The reaction is \n",
+ "# H2O(l) = H2(g) + 1/2O2(g)\n",
+ "# number of the valence electrons transferred in this reaction is \n",
+ "n_e = 2. #[(mole electrons)/mole]\n",
+ "\n",
+ "# Calculations\n",
+ "# Gibb's free energy is given by\n",
+ "# or\n",
+ "# In the rightmost term we replace v_T by (R*T)/P, which is correct only for ideal gases, so\n",
+ "# g = g_0 + (R*T)*math.log(P/P_0)\n",
+ "\n",
+ "# According to the assumption ,we can ignore the change in Gibb's free energy with pressure of the liquid water, so that \n",
+ "# delta_g = delta_g_0 + 1.5*(R*T)*math.log(P/P_0)\n",
+ "\n",
+ "# and \n",
+ "# E = (-delta_g)/(n_e*F) = -(delta_g_0 + 1.5*(R*T)*math.log(P/P_0))/(n_e*F)\n",
+ "# So equilibrium cell voltage is given as \n",
+ "E = E_0 - 1.5*(R*T)*math.log(P/P_0)/(n_e*F)\n",
+ "\n",
+ "# Results\n",
+ "print \"The equilibrium cell voltage of electrolytic cell if feed and product are at the pressure 100 atm is %f Volt\"%(E)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The equilibrium cell voltage of electrolytic cell if feed and product are at the pressure 100 atm is -1.317721 Volt\n"
+ ]
+ }
+ ],
+ "prompt_number": 21
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.10 Page: 365 \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The value of the compressibility factor\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+25 #[K] Temperature\n",
+ "P = 11.38/760 #[atm] Pressure\n",
+ "R = 0.08206 #[(L*atm)/(mol*K)] Gas consmath.tant\n",
+ "v = 0.6525/0.04346 #[L/g] Specific volume \n",
+ "M = 60.05 #[g/mol] Molecular weight of HAc in the monomer form\n",
+ "\n",
+ "# Calculations\n",
+ "# So the specific volume in [L/mol] is\n",
+ "V = v*M #[L/mol]\n",
+ "\n",
+ "# Compressibility factor is give by\n",
+ "z = (P*V)/(R*T)\n",
+ "\n",
+ "# Results\n",
+ "print \"The value of the compressibility factor for HAc at given condition is %f\"%(z) \n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The value of the compressibility factor for HAc at given condition is 0.551780\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.11 Page: 366\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Mole fraction of the monomer in the vapour phase\n",
+ "Mole fraction of the dimer in the vapour phase\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 273.15+25 #[K] Temperature\n",
+ "P = 11.38 #[torr] Pressure\n",
+ "\n",
+ "# Formation of the dimer from monomer in the gas phase follows the reaction \n",
+ "# 2*HAc = (HAc)2\n",
+ "\n",
+ "# Calculations\n",
+ "# From the equation 13.BF(page 366) given in the book\n",
+ "# K = (P*y_HAc_2)/(P*y_HAc)**(2) , where 'y_HAc_2' is mol fraction of dimer and 'y_HAc' is mol fraction of monomer\n",
+ "# and \n",
+ "# math.log10(K) = -10.4184 + 3164/T , so \n",
+ "K = 10**(-10.4184 + 3164/T) #[1/torr]\n",
+ "\n",
+ "# Thus \n",
+ "# y_HAc_2 = K*(P*y_HAc)**(2)/P\n",
+ "# Since, (y_HAc + y_HAc_2) = 1\n",
+ "# y_HAc_2 = K*(P*(1-y_HAc))**(2)/P\n",
+ "\n",
+ "# Solving for y_HAc_2\n",
+ "def f(y_HAc_2): \n",
+ "\t return K*(P*(1-y_HAc_2))**(2)/P-y_HAc_2\n",
+ "y_HAc_2 = fsolve(f,0)\n",
+ "# So\n",
+ "y_HAc = 1-y_HAc_2\n",
+ "\n",
+ "# Results\n",
+ "print \"Mole fraction of the monomer in the vapour phase is %f\"%(y_HAc)\n",
+ "print \"Mole fraction of the dimer in the vapour phase is %f\"%(y_HAc_2)\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Mole fraction of the monomer in the vapour phase is 0.210713\n",
+ "Mole fraction of the dimer in the vapour phase is 0.789287\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 13.12 Page: 367\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The compressibility factor z for the gaseous mixture\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# Getting the data from the example 13.10\n",
+ "T = 273.15+25 #[K] Temperature\n",
+ "P = 11.38/760 #[atm] Pressure\n",
+ "R = 0.08206 #[(L*atm)/(mol*K)] Gas consmath.tant\n",
+ "v = 0.6525/0.04346 #[L/g] Specific volume \n",
+ "\n",
+ "# Now from the previous example ie example 13.11 the mole fractions of the monomer and dimer in the gas phase is \n",
+ "y_HAc = 0.211 # monomer \n",
+ "y_HAc_2 = 0.789 # dimer\n",
+ "\n",
+ "# Molecular weights of the monomer and dimer forms are\n",
+ "M_HAc = 60.05 #[g/mol] monomer \n",
+ "M_HAc_2 = 120.10 #[g/mol] dimer\n",
+ "\n",
+ "# Calculations\n",
+ "# Now average molecular weight of the mixture is\n",
+ "M_avg = M_HAc*y_HAc + M_HAc_2*y_HAc_2 #[g/mol]\n",
+ "\n",
+ "# So specific volume in [L/mol] is\n",
+ "V = v*M_avg #[L/mol]\n",
+ "\n",
+ "# Now compressibility factor is\n",
+ "z = (P*V)/(R*T)\n",
+ "\n",
+ "# Results\n",
+ "print \"The compressibility factor z for the gaseous mixture is %f\"%(z)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The compressibility factor z for the gaseous mixture is 0.987135\n"
+ ]
+ }
+ ],
+ "prompt_number": 25
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch14.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch14.ipynb
new file mode 100644
index 00000000..d85f313f
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch14.ipynb
@@ -0,0 +1,645 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 14 : Equilibrium With Gravity Or Centrifugal Force Osmotic Equilibrium Equilibrium With Surface Tension"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.1 Page: 379\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The mol fraction of the methane\n",
+ "The mol fraction of the ethane\n",
+ "The mol fraction of the propane \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 300. #[K] Temperature of the natural gas well\n",
+ "R = 8.314 #[J/(mol*K)] universal gas consmath.tant\n",
+ "z_1 = 0 #[m]\n",
+ "# At the surface of the well mole fraction of the components are\n",
+ "y_methane_surf = 85./100 #[mol%]\n",
+ "y_ethane_surf = 10/100. #[mol%]\n",
+ "y_propane_surf = 5/100. #[mol%]\n",
+ "P = 2. #[MPa] Total equilibrium pressure \n",
+ "z_2 = 1000. #[m] Depth of the well \n",
+ "\n",
+ "# Calculations\n",
+ "# Molecular weights of the components are\n",
+ "M_methane = 16./1000 #[kg/mol]\n",
+ "M_ethane = 30./1000 #[kg/mol]\n",
+ "M_propane = 44./1000 #[kg/mol]\n",
+ "\n",
+ "# Now, we have the relation between the fugacities of a component at z_1 and z_2 as\n",
+ "# f_i_2/f_i_1 = exp((-M_i*g*(z_2-z_1))/(R*T)) , where g is gravitational accelaration and its value is\n",
+ "g = 9.81 #[m/s**(2)]\n",
+ "\n",
+ "# Fugacities of the various components at the surface i.e. at z = z_1 is\n",
+ "f_methane_1 = y_methane_surf*P #[MPa]\n",
+ "f_ethane_1 = y_ethane_surf*P #[MPa]\n",
+ "f_propane_1 = y_propane_surf*P #[MPa]\n",
+ "\n",
+ "# Now, fugacities at z = z_2 are\n",
+ "f_methane_2 = f_methane_1*math.exp((-M_methane*g*(z_1-z_2))/(R*T)) #[MPa]\n",
+ "f_ethane_2 = f_ethane_1*math.exp((-M_ethane*g*(z_1-z_2))/(R*T)) #[MPa]\n",
+ "f_propane_2 = f_propane_1*math.exp((-M_propane*g*(z_1-z_2))/(R*T)) #[MPa]\n",
+ "\n",
+ "# Let at z = z_1 total pressure of the gases are P_2\n",
+ "# Then, fugacities of the ith component is also given as \n",
+ "# f_i_2 = y_i_2*P_2\n",
+ "# Writing the expression for all the component ad adding them we get \n",
+ "# (f_methane_2 + f_ethane_2 + f_propane_2 ) = y_methane_2*P_2 + y_ethane_2*P_2 + y_propane_2*P_2\n",
+ "# or\n",
+ "# (f_methane_2 + f_ethane_2 + f_propane_2 ) = P_2*(y_methane_2 + y_ethane_2 + y_propane_2)\n",
+ "# and\n",
+ "# (y_methane_2 + y_ethane_2 + y_propane_2) = 1 ,so\n",
+ "P_2 = (f_methane_2 + f_ethane_2 + f_propane_2 ) #[MPa]\n",
+ "\n",
+ "# Now the mole fractions of the components are \n",
+ "# y_i_2 = f_i_2/P_2 , so\n",
+ "y_methane_2 = f_methane_2/P_2\n",
+ "y_ethane_2 = f_ethane_2/P_2\n",
+ "y_propane_2 = f_propane_2/P_2\n",
+ "\n",
+ "# Results\n",
+ "print \"The mol fraction of the methane at the depth 1000m is %f\"%(y_methane_2)\n",
+ "print \"The mol fraction of the ethane at the depth 1000m is %f\"%(y_ethane_2)\n",
+ "print \"The mol fraction of the propane at the depth 1000m is %f\"%(y_propane_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The mol fraction of the methane at the depth 1000m is 0.840351\n",
+ "The mol fraction of the ethane at the depth 1000m is 0.104461\n",
+ "The mol fraction of the propane at the depth 1000m is 0.055187\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.2 Page: 380\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find Concentration of the nitrogen at the top of atmosphere with respect to the concentration of nitrogen \n",
+ "at the surface of the earth\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 288. #[K] Atmospheric temperature \n",
+ "R = 8.314 #[J/(mol*K)] universal gas consmath.tant\n",
+ "z_2 = 15000. #[m] Thickness of the atmosphere\n",
+ "z_1 = 0. #[m] Surface\n",
+ "# At the surface, the mole fraction of nitrogen and oxygen are \n",
+ "y_N2_1 = 0.79\n",
+ "y_O2_1 = 0.21\n",
+ "M_N2 = 28./1000 #[kg/mol]\n",
+ "M_O2 = 32./1000 #[kg/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# For an ideal solution of ideal gases with only two species, we have \n",
+ "# y_i_2/y_i_1 = 1/(y_i_1 + y_j_1/a) , and\n",
+ "# a = exp(-(M_i-M_j)*g*(z_2-z_1)/(R*T))\n",
+ "# where 'g' is accelaration due to gravity and its value is\n",
+ "g = 9.81 #[m/s**(2)]\n",
+ "\n",
+ "# So\n",
+ "a = math.exp(-(M_N2-M_O2)*g*(z_2-z_1)/(R*T))\n",
+ "# and\n",
+ "yi2_by_yi1 = 1/(y_N2_1 + y_O2_1/a)\n",
+ "\n",
+ "# Results\n",
+ "print \" Concentration of the nitrogen at the top of atmosphere with respect to the concentration of nitrogen \\\n",
+ " at the surface of the earth is yi2_by_yi1 = %0.2f\"%(yi2_by_yi1)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Concentration of the nitrogen at the top of atmosphere with respect to the concentration of nitrogen at the surface of the earth is yi2_by_yi1 = 1.05\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.3 Page: 381\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find \n",
+ "Concentration of the nitrogen at the top of reactor with respect to the concentration of nitrogen \n",
+ "at the bottom of reactor\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# For this problem all the data are same as in previous Example 14.2 except z_1 and z_2 \n",
+ "# So\n",
+ "T = 288. #[K] Atmospheric temperature \n",
+ "R = 8.314 #[J/(mol*K)] Universal gas consmath.tant\n",
+ "z_2 = 10. #[m] Height of the reactor\n",
+ "z_1 = 0. #[m] Surface\n",
+ "g = 9.81 #[m/s**(2)] Accelaration due to gravity\n",
+ "\n",
+ "# Calculations\n",
+ "# At z = z_1, the mole fraction of nitrogen and oxygen are \n",
+ "y_N2_1 = 0.79\n",
+ "y_O2_1 = 0.21\n",
+ "M_N2 = 28./1000 #[kg/mol]\n",
+ "M_O2 = 32./1000 #[kg/mol]\n",
+ "\n",
+ "# So\n",
+ "a = math.exp(-(M_N2-M_O2)*g*(z_2-z_1)/(R*T))\n",
+ "# and\n",
+ "yi2_by_yi1 = 1/(y_N2_1 + y_O2_1/a)\n",
+ "\n",
+ "# Results\n",
+ "print \" Concentration of the nitrogen at the top of reactor with respect to the concentration of nitrogen \\\n",
+ " at the bottom of reactor is yi2_by_yi1 = %f\"%(yi2_by_yi1)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Concentration of the nitrogen at the top of reactor with respect to the concentration of nitrogen at the bottom of reactor is yi2_by_yi1 = 1.000034\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.4 Page: 382\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 300. #[K] Temperature of the centrifuge\n",
+ "R = 8.314 #[J/(mol*K)] Universal gas consmath.tant\n",
+ "# Mole fractions of the two components are \n",
+ "y_UF6_238_1 = 0.993 # Mole fraction of UF6 with 238 isotope of uranium in feed\n",
+ "y_UF6_235_1 = 0.007 # Mole fraction of UF6 with 235 isotope of uranium in feed\n",
+ "M_UF6_238 = 352./1000 #[kg/mol] Molecular weight of UF6 with 238 isotope of uranium\n",
+ "M_UF6_235 = 349./1000 #[kg/mol] Molecular weight of UF6 with 235 isotope of uranium\n",
+ "r_in = 2./100 #[m] Interanal raddi of the centrifuge\n",
+ "r_out = 10./100 #[m] outer raddi of the centrifuge\n",
+ "f = 800. #[revolution/second] Rotational frequency of centrifuge\n",
+ "\n",
+ "# Calculations\n",
+ "# Here the accelaration will come due to centrifugal force and is \n",
+ "# g = w**(2)*r , where 'w' is angular speed and its value is w = 2*pie*f and 'r' is radius \n",
+ "# But in the present case 'r' is varies as we move away from the axis of centrifuge\n",
+ "# After making integration by taking small elements at the dismath.tance 'r' we find the expression \n",
+ "a = math.exp((M_UF6_235-M_UF6_238)*(2*3.141592*f)**(2)*(r_out**(2)-r_in**(2))/(2*R*T))\n",
+ "\n",
+ "# Now Let the ratio y_i_2/y_i_1 = A\n",
+ "# Then we have \n",
+ "A = 1./(y_UF6_235_1 + y_UF6_238_1/a)\n",
+ "\n",
+ "# Now say y_i_1/y_i_2 = 1/A = B , then\n",
+ "B = 1./A\n",
+ "\n",
+ "# Results\n",
+ "print \"The ratio of the mole fraction of UF6 with uranium 235 isotope) at the 2 cm radius to\\\n",
+ " that at the 10 cm radius is %0.3f\"%(B)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The ratio of the mole fraction of UF6 with uranium 235 isotope) at the 2 cm radius to that at the 10 cm radius is 1.156\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.5 Page: 384\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The pressure difference between the two phases\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# We have two phase system in this problem in which phase 1 is seawater and phase 2 is fresshwater \n",
+ "# Seawater contains mostly NaCl, Na2SO4, MgCl2, KCl and if they completly ionised then\n",
+ "x_water_1 = 0.98 # mole fraction of water in phase 1 i.e. in seawater\n",
+ "x_water_2 = 1. # mole fraction of water in the phase 2 i.e. in water \n",
+ "R = 10.73 #[(psi*ft**(3))/(lbmol*R)] Universal gas consmath.tant\n",
+ "T = 500. #[R] temperature\n",
+ "v_water_1 = 18/62.4 # [ft**(3)/(lbmol)]\n",
+ "\n",
+ "# The effect of the pressure on the fugacity of the liquid is given as\n",
+ "\n",
+ "# Calculations\n",
+ "# Writing this equation twice, oncce for pure water and once for the water in the ocean water, and equating the fugacities, we get \n",
+ "\n",
+ "# For pure water, x_i and Y_i are unity, and for the water in the solution, with mole fraction 0.98, Raoult's law is certain to be practically obeyed\n",
+ "# So that Y_i is certain to be practically unity.\n",
+ "\n",
+ "# The partial molal volume of water in pure water is practically the same as that in dilute solutions,\n",
+ "# Tkaing the math.logarithm of both sides and solving , we get \n",
+ "\n",
+ "# Integrating with the limit P_purewater and P_seawater we have\n",
+ "# -math.log(x_water_1) = (v_water_1/(R*T))*( P_seawater - P_purewater )\n",
+ "# ( P_seawater - P_purewater ) = delta_P\n",
+ "# So \n",
+ "delta_P = (-(R*T)*math.log(x_water_1))/v_water_1#[psi]\n",
+ "\n",
+ "# Results\n",
+ "print \"The pressure difference between the two phases is %0.1f psi\"%(delta_P)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The pressure difference between the two phases is 375.7 psi\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.6 Page: 386\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate Pressure difference with the change in radius of the drop of the water\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 100. #[C] Temperature of the outside\n",
+ "P_outside = 1. #[atm]\n",
+ "# At 100 C, the surface tension between steam and water is \n",
+ "T = 0.05892 #[N/m] From metric steam table (7, page 267)\n",
+ "\n",
+ "# Pressure difference between inside and outside of a drop is given by the expression \n",
+ "# (P_inside - P_outside) = (4*T)/d_i\n",
+ "\n",
+ "# Let (P_inside - P_outside) = delta_P , so\n",
+ "#delta_P = (4*T)/d_i\n",
+ "# For the drop of diameter\n",
+ "d_1 = 0.001 #[m]\n",
+ "\n",
+ "# Calculations\n",
+ "# So \n",
+ "delta_P_1 = (4*T)/d_1 #[Pa]\n",
+ "\n",
+ "# Which is certainly negligible \n",
+ "# If we reduce the diameter to \n",
+ "d_2 = 10**(-6) #[m]\n",
+ "\n",
+ "# So \n",
+ "delta_P_2 = (4*T)/d_2 #[Pa]\n",
+ "\n",
+ "# If we reduce it to diameter that is smallest sized drop likely to exist \n",
+ "d_3 = 0.01*10**(-6) #[m]\n",
+ "# Then the calculated pressure difference is \n",
+ "delta_P_3 = (4*T)/d_3 #[Pa]\n",
+ "\n",
+ "# Results\n",
+ "print \"Pressure difference with the change in radius of the drop of the water is given as in the following table\"\n",
+ "print \" Diameter of the droplet d_iin meter Pressure difference P_inside - P_outside in atm\"\n",
+ "print \" %0.2e %0.2e\"%(d_1,delta_P_1) \n",
+ "print \" %0.2e %0.2e\"%(d_2,delta_P_2) \n",
+ "print \" %0.2e %0.2e\"%(d_3,delta_P_3) \n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Pressure difference with the change in radius of the drop of the water is given as in the following table\n",
+ " Diameter of the droplet d_iin meter Pressure difference P_inside - P_outside in atm\n",
+ " 1.00e-03 2.36e+02\n",
+ " 1.00e-06 2.36e+05\n",
+ " 1.00e-08 2.36e+07\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.7 Page: 387\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The equilibrium pressure at which the steam begin to condence at this temperature on the nuclei \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P_NBP = 1. #[atm]\n",
+ "Temp =273.15+100 #[C] Temperature\n",
+ "D = 0.01*10**(-6) #[m] Diameter of the condensation nuclei( due to impurity )\n",
+ "T = 0.05892 #[N/m] Surface tension between water drops and gas\n",
+ "R = 8.314 #[J/(mol*K)]\n",
+ "\n",
+ "# At equilibrium the Gibb's free energy per pound will be the same inside and outside the drops.\n",
+ "# From the previous example 14.6, the pressure difference inside and outside of the drop is \n",
+ "# delta_P = ( P_inside-P_outside) = 4*T/D = 233 atm = 235.7 bar\n",
+ "\n",
+ "# Calculations\n",
+ "# Taking the Gibb's free energy at the normal boiling point as g_NBP we have \n",
+ "# also\n",
+ "# and\n",
+ "v_water_liquid = 1/958.39*0.018 #[m**(3)/mol]\n",
+ "\n",
+ "# If we assume that the specific volume of the liquid is a consmath.tant,and independent of pressure, and that the volume of the vapour is given by the gas law\n",
+ "# then we can perform the integrations and cancel the g_NBP terms, finding the Kelvin equation \n",
+ "\n",
+ "# (R*Temp)*math.log(P_gas/P_NBP) = v_water_liquid*(P_gas + 4*T/D - P_NBP)\n",
+ "# For very small drops \n",
+ "# (P_gas - P_NBP) << 4*T/D\n",
+ "# So that we can write it approximately as \n",
+ "\n",
+ "# P_gas/P_NBP = exp(v_water_liquid*(4*T/D)/(R*Temp)) = I\n",
+ "# so\n",
+ "I = math.exp(v_water_liquid*(4*T/D)/(R*Temp))\n",
+ "\n",
+ "# Substracting 1 from both sides in the above equation we have \n",
+ "# (P_gas-P_NBP)/P_NBP = I-1\n",
+ "# So \n",
+ "P_gas_minus_P_NBP = (I-1)*P_NBP #[atm]\n",
+ "# Changing into the bar we have \n",
+ "delta_P = P_gas_minus_P_NBP*1.01325 #[bar]\n",
+ "\n",
+ "# Now changing the unit to psi we have \n",
+ "delta_P_1 = delta_P*100*0.1450377 #[psi]\n",
+ "\n",
+ "# Results\n",
+ "print \"The equilibrium pressure at which the steam begin to condence at this temperature on \\\n",
+ " the nuclei is %f psi above the normal boiling point.\"%(delta_P_1)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The equilibrium pressure at which the steam begin to condence at this temperature on the nuclei is 2.253760 psi above the normal boiling point.\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.8 Page: 388\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The liquid can lower its free energy\n",
+ "\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 273.15+100 #[K] Temperature of the water drop\n",
+ "R = 8.314 #[J/(mol*K)] Universal gas consmath.tant\n",
+ "D = 0.01*10**(-6) #[m] Diameter of the water drop\n",
+ "P_g = 0.15 #[bar] guage pressure\n",
+ "T = 0.05892 #[N/m] Surface tension between water drop and gas\n",
+ "\n",
+ "# The calculation of the pressure difference from inside to outside is the same as done in the example 14.7\n",
+ "\n",
+ "# Calculations\n",
+ "# The specific Gibb's free energy of the liquid is thus given as\n",
+ "# Where \n",
+ "v_water_liquid = 0.018/958.39 #[m**(3)/mol]\n",
+ "P_NBP = 1.013 #[bar]\n",
+ "P_gas = 1.013+0.15 #[bar]\n",
+ "\n",
+ "# Say\n",
+ "P_1 = P_gas + 4*T/D #[bar]\n",
+ "# and (g_water_liquid - g_NBP) = delta_g_1\n",
+ "# So\n",
+ "\n",
+ "def f2(P): \n",
+ "\t return v_water_liquid*P**(0)\n",
+ "\n",
+ "delta_g_1 = quad(f2,P_NBP,P_1)[0]\n",
+ "\n",
+ "\n",
+ "# and for the gas, again umath.sing equation for Gibb's free energy, we have \n",
+ "# Here assuming that the vapour follows the ideal gas law we have \n",
+ "# v_water_gas = (R*Temp/P)\n",
+ "# and also let (g_water_liquid- g_NBP) = delta_g_2\n",
+ "# so\n",
+ "\n",
+ "def f3(P): \n",
+ "\t return (R*Temp)/P\n",
+ "\n",
+ "delta_g_2 = quad(f3,P_NBP,P_gas)[0]\n",
+ "\n",
+ "\n",
+ "# Now \n",
+ "# (g_water_liquid - g_water_gas) = (g_water_liquid - g_NBP)-(g_water_gas - g_NBP) = delta_g\n",
+ "# So\n",
+ "delta_g = (delta_g_1 - delta_g_2) \n",
+ "\n",
+ "# We have got the value of the delta_g positive, so\n",
+ "\n",
+ "# Results\n",
+ "print \"The liquid can lower its free energy %0.2f J/mol by Changing to gas,\"%(delta_g)\n",
+ "print \"So that even at 0.15 bar above the normal boiling point, a drop of this small size is unstable and will quickly evaporate.\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The liquid can lower its free energy 14.25 J/mol by Changing to gas,\n",
+ "So that even at 0.15 bar above the normal boiling point, a drop of this small size is unstable and will quickly evaporate.\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 14.9 Page: 390\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The liquid pressure at which these boiling nuclei will begin to grow and intiate boiling\n",
+ "At this external pressure the pressure inside the bubble\n",
+ "'''\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 904.7 #[R] Temperature of the pure liquid water \n",
+ "P_NBP = 400. #[psia] Saturation pressure of the pure liquid water at the given temperature\n",
+ "T = 1.76*10**(-4) #[lbf/inch] Surface tension of water\n",
+ "R = 10.73 #[(psi*ft**(3))/(lbmol*R)]\n",
+ "\n",
+ "# Calculations\n",
+ "# In this problem the gas is inside the bubble, at a pressure much higher than that of the sorrounding liquid.\n",
+ "# The criterion of equilibrium is that the Gibb's free energy of the gas inside the bubble must be the same as that of the liquid outside the bubble.\n",
+ "# Thus we have \n",
+ "# also\n",
+ "# where\n",
+ "v_water_liquid = 18*0.01934 #[ft**(3)/lbmol]\n",
+ "D = 10**(-5.) #[inch]\n",
+ "\n",
+ "# so \n",
+ "# Here we assume that the liquid has practically consmath.tant density and that the gas behaves as an ideal gas and find \n",
+ "# (R*Temp)*math.log((P_liquid+4*T/D)/P_NBP) = v_water_liquid*(P_liquid - P_NBP)\n",
+ "# let P_liquid = p\n",
+ "\n",
+ "# We will solve the above equation for p\n",
+ "def f(p): \n",
+ "\t return v_water_liquid*(p - P_NBP)-(R*Temp)*math.log((p+4*T/D)/P_NBP)\n",
+ "P_liquid = fsolve(f,300)\n",
+ "\n",
+ "# At this external pressure the pressure inside the bubble is \n",
+ "P_inside = P_liquid + 4*T/D #[psia]\n",
+ "\n",
+ "# Results\n",
+ "print \"The liquid pressure at which these boiling nuclei will begin to grow and intiate boiling is %0.1f psia\"%(P_liquid)\n",
+ "print \"At this external pressure the pressure inside the bubble is %0.1f psia\"%(P_inside)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The liquid pressure at which these boiling nuclei will begin to grow and intiate boiling is 328.6 psia\n",
+ "At this external pressure the pressure inside the bubble is 399.0 psia\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch15.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch15.ipynb
new file mode 100644
index 00000000..3eab43ea
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch15.ipynb
@@ -0,0 +1,319 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 15 : The Phase Rule"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 15.2 Page: 401"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate independent relations among these four species\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# The system contains four species\n",
+ "print \" In this system there are four identifiable chemical species%(which are C,O2,CO2 and CO. The balanced equations we can write among them are\"\n",
+ "\n",
+ "print \" C + 0.5O2 = CO\"\n",
+ "print \" C + O2 = CO2\"\n",
+ "print \" CO + 0.5O2 = CO2\"\n",
+ "print \" CO2 + C = 2CO\"\n",
+ "\n",
+ "# Let we call these equations A, B, C and D respectively\n",
+ "# These relations are not independent.\n",
+ "# If we add A and C and cancel like terms, we obtain B.\n",
+ "# So, If we want independent chemical equilibria we must remove equation C\n",
+ "\n",
+ "# Now, if we reverse the direction of B and add it to A, we see that D is also not independent.\n",
+ "# Thus, there are only two independent relations among these four species and \n",
+ "print \" There are only two independent relations among these four species and\"\n",
+ "\n",
+ "# V = C + 2 - P\n",
+ "# and we have\n",
+ "V = 2# No of the variable\n",
+ "P = 2# No of the phases\n",
+ "# So\n",
+ "C = V + P - 2\n",
+ "print \" C = V + P - 2\"\n",
+ "print \" C = 4 - 2 = 2\"\n",
+ "print \" Thus, this is a two-component system\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " In this system there are four identifiable chemical species%(which are C,O2,CO2 and CO. The balanced equations we can write among them are\n",
+ " C + 0.5O2 = CO\n",
+ " C + O2 = CO2\n",
+ " CO + 0.5O2 = CO2\n",
+ " CO2 + C = 2CO\n",
+ " There are only two independent relations among these four species and\n",
+ " C = V + P - 2\n",
+ " C = 4 - 2 = 2\n",
+ " Thus, this is a two-component system\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 15.3 Page: 402\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Define Phase rule\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "#***Data***#\n",
+ "# This contains three species.\n",
+ "print \" The three species in this system are H2 N2 and NH3\"\n",
+ "N = 3\n",
+ "print \" There is only one balanced chemical reaction among these species\"\n",
+ "Q = 1\n",
+ "\n",
+ "# 2NH3 = N2 + 3H2\n",
+ "C = N - Q\n",
+ "print \" C = N - Q = %0.0f\"%(C)\n",
+ "# Now let us we made the system by starting with pure ammonia.\n",
+ "# Assuming that all the species are in the gas phase, ammonia dissociates in H2 and N2 in the ratio of 3:1.\n",
+ "print \" Let we start with pure ammonia in the system then ammonia will dissociate in H2 and N2 in the ratio of 3:1.\"\n",
+ "\n",
+ "# We can write an equation among their mole fractions, viz\n",
+ "# y_H2 = 3*y_N2\n",
+ "print \" And the relation between their mole fraction is y_H2 = 3*y_N2\"\n",
+ "\n",
+ "# We might modify the phase rule to put in another symbol for stoichiometric restrictions, but the common usage is to write that \n",
+ "# Components = species - (independent reactions) - (stoichiometric restriction)\n",
+ "# and stoichiometric restriction SR is \n",
+ "SR = 1\n",
+ "# so\n",
+ "c = N-Q-SR\n",
+ "print \" We have the modified phase rule as Components = species - independent reactions - stoichiometric restriction\"\n",
+ "print \" C = N - Q - SR = %0.0f\"%(c)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The three species in this system are H2 N2 and NH3\n",
+ " There is only one balanced chemical reaction among these species\n",
+ " C = N - Q = 2\n",
+ " Let we start with pure ammonia in the system then ammonia will dissociate in H2 and N2 in the ratio of 3:1.\n",
+ " And the relation between their mole fraction is y_H2 = 3*y_N2\n",
+ " We have the modified phase rule as Components = species - independent reactions - stoichiometric restriction\n",
+ " C = N - Q - SR = 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 15.4 Page: 403\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Find number of the components present in the test tube\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "#***Data***#\n",
+ "# We have been given the reaction \n",
+ "# CaCO3(s) = CaO(s) + CO2(g)\n",
+ "\n",
+ "# Here we have three species and one balanced chemical reaction between them\n",
+ "# So\n",
+ "N = 3# No of species\n",
+ "Q = 1 # no of reaction\n",
+ "\n",
+ "# Since CO2 will mostly be in the gas phase and CaCO3 and CaO will each form separate solid phases, \n",
+ "# there is no equation we can write among the mole fractions in any of the phases.\n",
+ "# Hence, there is no stoichiometric restriction i.e.\n",
+ "SR = 0\n",
+ "# and the number of the components is\n",
+ "C = N - Q - SR\n",
+ "\n",
+ "print \"Number of the components presents in the test tube are %0.0f\"%(C)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Number of the components presents in the test tube are 2\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 15.5 Page: 403\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "(a) How many phases are present?\n",
+ "(b) How many degrees of freedom are there?\n",
+ "(c) If we place a sample of pure CaCO 3 in an evacuated container and heat it, will we find a unique P-T curve?\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "#***Data***#\n",
+ "# We have been given the reaction \n",
+ "# CaCO3(s) = CaO(s) + CO2(g)\n",
+ "# The CaCO3 and CaO form separate solid phases, so we have three phases, two solid and one gas. \n",
+ "# So\n",
+ "P = 3\n",
+ "# This is a two component system, so\n",
+ "C = 2\n",
+ "\n",
+ "# From the phase rule\n",
+ "V = C + 2 - P\n",
+ "\n",
+ "# If there is only one degree of freedom, then the system should have a unique P-T curve.\n",
+ "# Reference [ 2, page 214 ] as reported in the book, shows the data to draw such a curve, which can be well represented by\n",
+ "# math.log(p/torr) = 23.6193 - 19827/T\n",
+ "\n",
+ "print \" The no. of phases present in the system are %0.0f \"%(P)\n",
+ "print \" Total no of degrees of freedom is %0.0f \"%(V)\n",
+ "print \" Since there is only one degree of freedom so the system has a unique P-T curve\"\n",
+ "print \" which can be well represented by logp/torr = 23.6193 - 19827/T\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The no. of phases present in the system are 3 \n",
+ " Total no of degrees of freedom is 1 \n",
+ " Since there is only one degree of freedom so the system has a unique P-T curve\n",
+ " which can be well represented by logp/torr = 23.6193 - 19827/T\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 15.6 Page: 404\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find number of components\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "#***Data***#\n",
+ "# The system consists of five species.\n",
+ "print \" The five species present in the system are H2O%( HCl%( H+%( OH- and Cl-. \"\n",
+ "# So\n",
+ "N = 5 # Number of the species \n",
+ "print \" Here we have two chemical relations:\"\n",
+ "print \" H2O = H+ + OH- \"\n",
+ "print \" HCl = H+ + Cl- \"\n",
+ "\n",
+ "# so\n",
+ "Q = 2 # No of the reactions\n",
+ "\n",
+ "# In addition we have electroneutrality, which says that at equilibrium the total no of positive ions in the solution must be the same as the total no of nagative ions,or\n",
+ "# [H+] = [OH-] + [Cl-]\n",
+ "# To maintain electroneutrality number of positive and negative ion should be same.\n",
+ "# Here [H+] smath.radians(numpy.arcmath.tan(s for the molality of hydrogen ion. This is convertible to a relation among the 'mu's' hence,\n",
+ "# it is an additional restriction, so\n",
+ "SR = 1 \n",
+ "# So\n",
+ "# The number of components is\n",
+ "C = N - Q - SR\n",
+ "\n",
+ "print \" Number of the components present in the system are C = N - Q - SR = %0.0f\"%(C)\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The five species present in the system are H2O%( HCl%( H+%( OH- and Cl-. \n",
+ " Here we have two chemical relations:\n",
+ " H2O = H+ + OH- \n",
+ " HCl = H+ + Cl- \n",
+ " Number of the components present in the system are C = N - Q - SR = 2\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch2.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch2.ipynb
new file mode 100644
index 00000000..76efb50a
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch2.ipynb
@@ -0,0 +1,222 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "\n",
+ "Chapter 2 : Basic Thermodynamics"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 2.1 Page: 27"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "''' Calculate internal energy of the steam\n",
+ "enthalpy of the steam,entropy of the steam and Piston expanding.\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "m = 1. #[lbm] Mass of the steam\n",
+ "T_1 = 300. #[F] Initial temperature\n",
+ "P_1 = 14.7 #[psia] Initial pressure\n",
+ "P_sorronding = 14.7 #[psia]\n",
+ "Q = 50. #[Btu] Amount of the energy added to the system as heat\n",
+ "\n",
+ "# This is a closed system and we can apply the following equations\n",
+ "# delta_U_system = sum(dQ_in_minus_out) + sum(dW_in_minus_out) (A)\n",
+ "# dS_system = (m*ds)_system = sum((dQ)/T)_in_minus_out + dS_reversible (B)\n",
+ "\n",
+ "# From the steam tables, we look up the properties of steam at temperature 300F and pressure 14.7 psia and find \n",
+ "u_initial = 1109.6 #[Btu/lbm] Internal energy of the steam\n",
+ "h_initial = 1192.6 #[Btu/lbm] Enthalpy of the steam\n",
+ "s_initial = 1.8157 #[Btu/(lbm*R)] Entropy of the steam\n",
+ "\n",
+ "# The work here is done by the system, equal to\n",
+ "# -delta_w = P*A_piston*delta_x = P*m*delta_v\n",
+ "\n",
+ "# Calculations\n",
+ "# Substituting this in the equation (A) and rearranging, we have\n",
+ "# m*delta_(u + P*v) = m*delta_h = delta_Q\n",
+ "# From which we can solve for the final specific enthalpy\n",
+ "h_final = h_initial + Q #[Btu/lbm]\n",
+ "\n",
+ "# Now, by the linear interpolation we find that at h = 1242.6 Btu/lbm and P = 1 atm, temperature of the steam is given \n",
+ "T_2 = 405.7 #[F] Final temperature\n",
+ "\n",
+ "# At this final temperature and pressure we have the steam properties \n",
+ "u_final = 1147.7 #[Btu/lbm]\n",
+ "s_final = 1.8772 #[Btu/(lbm*R)]\n",
+ "\n",
+ "# Thus, increase in the internal energy, enthalpy and entropy are \n",
+ "delta_u = u_final - u_initial #[Btu/lbm]\n",
+ "delta_s = s_final - s_initial #[Btu/(lbm*R)]\n",
+ "delta_h = Q #[Btu/lbm]\n",
+ "\n",
+ "# The work done on the atmosphere is given by\n",
+ "w = delta_h - delta_u #[Btulbm]\n",
+ "\n",
+ "# Results\n",
+ "print \"The increase in internal energy of the steam by adding the heat is %0.2f Btu/lbm\"%(delta_u)\n",
+ "print \"The increase in enthalpy of the steam by adding the heat is %0.2f Btu/lbm\"%(delta_h)\n",
+ "print \"The increase in entropy of the steam by adding the heat is %0.4f Btu/lbm\"%(delta_s)\n",
+ "print \"Work done by the piston expanding against the atmosphere is %0.2f Btu/lbm\"%(w)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The increase in internal energy of the steam by adding the heat is 38.10 Btu/lbm\n",
+ "The increase in enthalpy of the steam by adding the heat is 50.00 Btu/lbm\n",
+ "The increase in entropy of the steam by adding the heat is 0.0615 Btu/lbm\n",
+ "Work done by the piston expanding against the atmosphere is 11.90 Btu/lbm\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 2.2 Page: 28\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Find Turbine of steam\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T_in = 600. #[F] Input steam temperature\n",
+ "P_in = 200. #[psia] Input steam pressure\n",
+ "P_exit = 50. #[psia]\n",
+ "\n",
+ "# Because this is a steady-state, steady-flow process, we use \n",
+ "# (work per pound) = W/m = -( h_in - h_out )\n",
+ "\n",
+ "# From the steam table we can read the the inlet enthalpy and entropy as \n",
+ "h_in = 1322.1 #[Btu/lbm]\n",
+ "s_in = 1.6767 #[Btu/(lb*R)]\n",
+ "\n",
+ "# Now, we need the value of h_out\n",
+ "\n",
+ "# For a reversible adiabatic steady-state, steady-flow process, we have\n",
+ "# sum(s*m_in_minus_out) = ( s_in - s_out ) = 0\n",
+ "\n",
+ "# Which indicates that inlet and outlet entropies are same\n",
+ "# We can find the outlet temperature by finding the value of the temperature in the steam table\n",
+ "# For which the inlet entropy at 50 psia is the same as the inlet entropy, 1.6767 Btu/(lb*R). \n",
+ "# By linear interpolation in the table we find \n",
+ "T_in = 307.1 #[R]\n",
+ "\n",
+ "# and by the linear interpolation in the same table we find that\n",
+ "h_out = 1188.1 #[Btu/lb]\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus, we find \n",
+ "W_per_pound = (h_in - h_out) #[Btu/lb]\n",
+ "\n",
+ "# Results\n",
+ "print \" The work output of the turbine of steam is %0.1f Btu/lb\"%(-W_per_pound)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The work output of the turbine of steam is -134.0 Btu/lb\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 2.3 Page: 38"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate compressibility factor of steam\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T = 500. #[F]\n",
+ "P = 680. #[psi]\n",
+ "\n",
+ "# Calculations\n",
+ "# It is reported in the book in the table A.1(page 417) that for water \n",
+ "# We know that T_r = T/T_c and P_r = P/P_c, so\n",
+ "T_c = 647.1*1.8 #[R]\n",
+ "P_c = 220.55*14.51 #[psia]\n",
+ "w = 0.345\n",
+ "T_r = (T+459.67)/T_c\n",
+ "P_r = P/P_c\n",
+ "z_0 = 1+P_r/T_r*(0.083-0.422/T_r**(1.6))\n",
+ "z_1 = P_r/T_r*(0.139-0.172/T_r**(4.2))\n",
+ "z = z_0+w*z_1\n",
+ "\n",
+ "# Results\n",
+ "print \"The compressibility factor of steam at the given state is %0.3f\"%(z)\n",
+ "# Based on the steam table (which may be considered as reliable as the experimental data, the value of z is 0.804.\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The compressibility factor of steam at the given state is 0.851\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch3.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch3.ipynb
new file mode 100644
index 00000000..84d35a73
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch3.ipynb
@@ -0,0 +1,539 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 3 : The Simplest Phase Equilibrium Examples and Some Simple Estimating Rules"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 3.1 Page: 52\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate mole fraction of water vapour in air in equilibrium\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "P = 1. #[atm]\n",
+ "# From Raoult's law y_i*P = x_i*p_i\n",
+ "# Rearranging\n",
+ "#y_i = x_i*p_i/P\n",
+ "\n",
+ "# Calculations\n",
+ "x_N2 = 0\n",
+ "x_O2 = 0\n",
+ "x_water = 1-x_N2-x_O2\n",
+ "# From any steam table we may look up the value of the vapour pressure of water at 20C, finding\n",
+ "p_water = 0.023 #[atm]\n",
+ "# So \n",
+ "y_water = x_water*p_water/P\n",
+ "\n",
+ "# Results\n",
+ "print \"The mole fraction of water vapour in air in equilibrium with water is %f\"%(y_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The mole fraction of water vapour in air in equilibrium with water is 0.023000\n"
+ ]
+ }
+ ],
+ "prompt_number": 9
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 3.2 Page: 53\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate concentration of oxygen\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "P = 1. #[atm]\n",
+ "# From previous example i.e. example 3.1\n",
+ "y_water = 0.023\n",
+ "#so that \n",
+ "#y = y_N2+y_O2\n",
+ "y = 1-y_water\n",
+ "# The oxygen is 0.21 mole fraction of this mix, so that\n",
+ "y_O2 = y*0.21\n",
+ "# It is reported in the book in table A.3 (page 419) that Henry's law cinsmath.tant for oxygen in water at 20C is \n",
+ "H_O2 = 40100 #[atm]\n",
+ "# From Henry's law, we have \n",
+ "# y_i = x_i*H_i/P\n",
+ "# rearranging\n",
+ "# x_i = y_i*P/H_i\n",
+ "# so \n",
+ "x_O2 = y_O2*P/H_O2\n",
+ "# By the same math.logic we find that\n",
+ "y_N2 = y*0.79\n",
+ "#and Henry's law consmath.tant for nitrogen in water at 20C is\n",
+ "H_N2 = 80400. #[atm]\n",
+ "\n",
+ "# Calculations\n",
+ "# hence \n",
+ "x_N2 = y_N2*P/H_N2\n",
+ "# Now expresmath.sing the dissolved oxygen concentration in terms of the volume of the oxygen at STP viz. taken as 1 atm and 20C\n",
+ "# c = (concentration of dissolved oxygen in equilibrium with air at 1 atm and 20C)\n",
+ "c = x_O2*998.2/18 #[(mole O2)/(L solution)]\n",
+ "# V = (volume of O2, STP)/(L solution)\n",
+ "V = c*24.06 #[(L O2, STP)/(L solution)]\n",
+ "V = V*1000 #[(ml O2, STP)/(L solution)]\n",
+ "\n",
+ "# Results\n",
+ "print \"Concentration of oxygen dissolved in water at equilibrium is %f mL O2, STP)/L solution)\"%(V)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Concentration of oxygen dissolved in water at equilibrium is 6.826690 mL O2, STP)/L solution)\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 3.3 Page: 52\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate composition in liquied and vapor phase.\n",
+ "\n",
+ "import math \n",
+ "from numpy import *\n",
+ "\n",
+ "# Variables\n",
+ "P = 1.0 #[atm]\n",
+ "p_w = 0.023 #[atm] Vapor pressure of pure water\n",
+ "H_o = 40100 #[atm] Vapor pressure of pure oxygen\n",
+ "H_n = 80400. #[atm] Vapor pressure of pure nitrogen\n",
+ "\n",
+ "# From Raoult's law, we have\n",
+ "# ( y_i*P ) = ( x_i*p_i )\n",
+ "# So \n",
+ "#For water\n",
+ "# ( y_w*P ) = ( x_w*p_i )\n",
+ "# For oxygen\n",
+ "#( y_o*P ) = ( x_o*p_i )\n",
+ "# And for nitrogen\n",
+ "#( y_n*P ) = ( x_n*p_i )\n",
+ "\n",
+ "# Also\n",
+ "# ( y_w + y_o + y_n ) = 1\n",
+ "# ( x_w + x_o + x_n ) = 1\n",
+ "\n",
+ "# Calculations\n",
+ "# In air, the mole fraction of nitrogen and oxygen are 0.79 and 0.21 respectively. So,\n",
+ "# y_o/y_n = 0.21/0.79\n",
+ "\n",
+ "# We will take the help of matrix method to solve these six equations for six unknowns\n",
+ "A = matrix([[0.023, 0, 0, -1, 0, 0],[0, 40100, 0, 0, -1, 0],[0, 0 ,80400, 0, 0, -1],[0, 0, 0, 1, 1 ,1],[1 ,1, 1, 0, 0 ,0],[0, 0, 0, 0, 0.79, -0.21]]);\n",
+ "#A = matrix([[0.023, 0, 0, -1, 0, 0],[0, 40100, 0, 0, -1, 0],[0, 0, 80400, 0, 0, -1],[0, 0 ,0, 1, 1, 1],[1, 1, 1, 0, 0, 0],[0, 0, 0, 0, 0.79, -0.21]])\n",
+ "B = matrix([[0],[0],[0],[1],[1],[0]])\n",
+ "X = linalg.inv(A)\n",
+ "X = X * B\n",
+ "\n",
+ "# Results\n",
+ "print \" The composition in liquid and vapor phase are summarized in the following table:\"\n",
+ "print \" y_water \\t %f\"%(X[3])\n",
+ "print \" y_oxygen \\t %f\"%(X[4])\n",
+ "print \" y_nitrogen \\t %f\"%(X[5])\n",
+ "print \" x_water \\t %f\"%(X[0])\n",
+ "print \" x_oxygen \\t %e\"%(X[1])\n",
+ "print \" x_nitrogen \\t %e\"%(X[2])\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The composition in liquid and vapor phase are summarized in the following table:\n",
+ " y_water \t 0.023000\n",
+ " y_oxygen \t 0.205170\n",
+ " y_nitrogen \t 0.771830\n",
+ " x_water \t 0.999985\n",
+ " x_oxygen \t 5.116461e-06\n",
+ " x_nitrogen \t 9.599879e-06\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 3.4 Page: 57\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "Calculate\n",
+ "Vapour pressure of mixture.\n",
+ "Mole fraction of the benzene\n",
+ "Mole fraction of the toluene\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "x_b = 0.80\n",
+ "x_t = 0.20\n",
+ "# Here we calculate the vapour pressures of benzene and toluene at 20C umath.sing the Antoine equation\n",
+ "# math.log10(p) = A-B/(T+C)\n",
+ "# here pressure p is in torr and temperature T is in C\n",
+ "# From the reported table A.2 (page 418) in the book, the consmath.tant A,B,C in the above equation for benzene have the vaues as\n",
+ "A_b = 6.90565\n",
+ "B_b = 1211.033\n",
+ "C_b = 220.79\n",
+ "\n",
+ "# Calculations\n",
+ "# So, for benzene\n",
+ "p_b = 10**(A_b-B_b/(T+C_b))\n",
+ "# now from the reported table A.2 (page 418) in the book, the consmath.tant A,B,C in the above equation for toluene have the vaues as\n",
+ "A_t = 6.95334\n",
+ "B_t = 1343.943\n",
+ "C_t = 219.337\n",
+ "# So, for toluene\n",
+ "p_t = 10**(A_t-B_t/(T+C_t))\n",
+ "# Now we can compute that for benzene\n",
+ "# y_b*P = x_b*p_b\n",
+ "# let y_b*P = p_1 , so\n",
+ "p_1 = x_b*p_b\n",
+ "# and correspondingly for toluene\n",
+ "# y_t*P = x_t*p_t\n",
+ "# let y_t*P = p_2 , so\n",
+ "p_2 = x_t*p_t\n",
+ "# Now adding these two values of benzene and toluene, we have \n",
+ "# y_b*P+y_t*P = (y_b+y_t)*P\n",
+ "# i.e.\n",
+ "# P = (p_1+p_2)/(y_b+y_t)\n",
+ "# But we know that (y_b+y_t) must be equal to one i.e.\n",
+ "y = 1.00 # y =(y_b+y_t) sum of the mole fractions of the benzene and toluene in the gaseous phase\n",
+ "# Hence total pressure is\n",
+ "P = (p_1+p_2)/y\n",
+ "# Now the mole fraction of either species in the gaseous phase will be ratio of the partial pressure of the species to the total pressure\n",
+ "# so\n",
+ "y_b = x_b*p_b/P\n",
+ "y_t = x_t*p_t/P\n",
+ "\n",
+ "# Results\n",
+ "print \" Vapour pressure of the mixture in the gaseous phase is %f torr\"%(P)\n",
+ "print \" Mole fraction of the benzene in the vapour phase is %f\"%(y_b)\n",
+ "print \" Mole fraction of the toluene in the vapour phase is %f\"%(y_t)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Vapour pressure of the mixture in the gaseous phase is 64.518358 torr\n",
+ " Mole fraction of the benzene in the vapour phase is 0.932483\n",
+ " Mole fraction of the toluene in the vapour phase is 0.067517\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 3.5 Page: 57"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate mole fraction of the benzene in air.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "x_benzene = 1.00\n",
+ "p_i = 75.2 #[torr] vapour pressure of the benzene\n",
+ "P = 760. #[torr] Pressure of the atmosphere\n",
+ "\n",
+ "# Calculations\n",
+ "y_benzene = (x_benzene*p_i)/P\n",
+ "\n",
+ "# Results\n",
+ "print \" Mole fraction of the benzene in air that is saturated with benzene is %0.1f\"%(y_benzene)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Mole fraction of the benzene in air that is saturated with benzene is 0.1\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 3.6 Page: 58\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate temperature at which the given benzene-toluene mixture will have vapor pressure\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 760. #[mm Hg]\n",
+ "x_b = 0.8 # Mole fraction of benzene in liquid phase\n",
+ "x_t = 0.2 # Mole fraction of toluene in liquid phase\n",
+ "\n",
+ "# We will take the help of trial and error method to solve this problem\n",
+ "# From the table A.2 ( page 418 ), Antoine equation consmath.tants for benzene are\n",
+ "A_b = 6.90565\n",
+ "B_b = 1211.003\n",
+ "C_b = 220.79\n",
+ "\n",
+ "# and that for the toluene are\n",
+ "A_t = 6.95334\n",
+ "B_t = 1343.943\n",
+ "C_t = 219.337\n",
+ "T = 82. #[C]\n",
+ "err = 1.\n",
+ "\n",
+ "# Calculations\n",
+ "while err > 10**(-3):\n",
+ " p_b = 10**(6.90565 - 1211.003/(T + 220.79))\n",
+ " p_t = 10**(6.95334 - 1343.943/(T + 219.337))\n",
+ " y_b = x_b*p_b/P\n",
+ " y_t = x_t*p_t/P\n",
+ " err = abs((y_b + y_t) - 1)\n",
+ " T = T + 0.01\n",
+ "\n",
+ "# Results\n",
+ "print \" The temperature at which the given benzene-toluene mixture will have vapor pressure of 1 atm is %0.3f deg C\"%(T)\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The temperature at which the given benzene-toluene mixture will have vapor pressure of 1 atm is 84.360 deg C\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "\n",
+ "Example 3.7 Page: 60\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "Calculate\n",
+ "At equilibrium at 20 deg C the rejected amount of oxygen \n",
+ "At equilibrium at 20 deg C the rejected amount of nitrogen \n",
+ "And total amount of the air rejected from the water\n",
+ "'''\n",
+ "\n",
+ "from numpy import *\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "V = 0.25 #[L] Volume of water \n",
+ "T_1 = 0. #[C] Initial temperature of water\n",
+ "T_2 = 20. #[C] Final temperature of water\n",
+ "\n",
+ "# Calculations\n",
+ "# From the example 3.3 the mol fractions of oxygen and notrogen in water at temperature 20 deg C are\n",
+ "x_o = 5.12*10**(-6) # mole fraction of oxygen\n",
+ "x_n = 9.598*10**(-6) # mole fraction of nitrogen\n",
+ "\n",
+ "\n",
+ "# Now we will calculate the mole fraction of oxygen and nitrogen in water at 0 deg C in the same manner as in example 3.3\n",
+ "# From the table A.3( page 419), Henry's consmath.tant of oxygen and nitrogen are\n",
+ "H_o = 2.55*10**(4) #[atm]\n",
+ "H_n = 5.29*10**(4) #[atm]\n",
+ "\n",
+ "# And vapor pressure of water at 0 deg C is \n",
+ "p_w = 0.006 #[atm]\n",
+ "\n",
+ "# Now umath.sing the same set of equations as in example 3.3, by changing only H_o, H_n and p_w and solving by matrix method we have \n",
+ "\n",
+ "A = matrix([[0.006, 0, 0, -1, 0, 0],[0, 25500, 0, 0, -1, 0],[0, 0 ,52900, 0, 0, -1],[0, 0, 0, 1, 1, 1],[1, 1, 1, 0, 0, 0],[0, 0, 0, 0, 0.79, -0.21]])\n",
+ "B = matrix([[0],[0],[0],[1],[1],[0]])\n",
+ "X = linalg.inv(A)\n",
+ "X = X*B\n",
+ "\n",
+ "# Here the mole fraction of oxygen and nitrogen in water will be X(2) and X(3) respectively\n",
+ "# So oxygen rejected is\n",
+ "M_o_rej = V*( X[1] - x_o )/0.018 #[mole] oxygen\n",
+ "# Now At STP volume of the rejected oxygen is given as \n",
+ "V_o = M_o_rej*24200 #[ml] oxygen\n",
+ "\n",
+ "# And rejected nitrogen is\n",
+ "M_n_rej = V*( X[2] - x_n )/0.018 #[mole] nitrogen\n",
+ "# In terms of volume \n",
+ "V_n = M_n_rej*24200 #[ml]\n",
+ "\n",
+ "# Results\n",
+ "print \" At equilibrium at 20 deg C the rejected amount of oxygen will be %0.2f ml\"%(V_o)\n",
+ "print \" At equilibrium at 20 deg C the rejected amount of nitrogen will be %0.2f ml\"%(V_n)\n",
+ "print \" And total amount of the air rejected from the water will be %0.2f ml\"%(V_o + V_n)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " At equilibrium at 20 deg C the rejected amount of oxygen will be 1.03 ml\n",
+ " At equilibrium at 20 deg C the rejected amount of nitrogen will be 1.76 ml\n",
+ " And total amount of the air rejected from the water will be 2.79 ml\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 3.8 Page: 61"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate amount of rejected nitrogen.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "P_1 = 5. #[atm]\n",
+ "y_n = 0.79 # Mole fraction of nitrogen in atmosphere\n",
+ "P_2 = 1.0 #[atm]\n",
+ "M = 55. #[kg] Mass of the diver\n",
+ "x_w = 0.75 # Fraction of water in human body\n",
+ "T = 37 #[C] Body temperature of the diver\n",
+ "\n",
+ "# Calculations\n",
+ "# At 37 deg temperature, the Henry's consmath.tant for N2 from the table A.3 ( page 419 ) by the linear interpolation is \n",
+ "H_n = 10.05*10**(4) # [atm]\n",
+ "\n",
+ "# Now, moles of nitrogen rejected will be\n",
+ "# M_rej = (moles of body fluid)*( x_N2,5 atm - x_N2,1 atm)\n",
+ "# So\n",
+ "M_rej = (M*1000*x_w/18)*( P_1*y_n/H_n - P_2*y_n/H_n) #[mol]\n",
+ "\n",
+ "# At STP the volume of the rejected nitrogen will be\n",
+ "V_n = M_rej*24.2 #[L]\n",
+ "\n",
+ "# Results\n",
+ "print \" Amount of rejected nitrogen will be %0.2f Litre\"%(V_n)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Amount of rejected nitrogen will be 1.74 Litre\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch4.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch4.ipynb
new file mode 100644
index 00000000..a248aa47
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch4.ipynb
@@ -0,0 +1,223 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 4 : Minimization of Gibbs Free energy"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "Example 4.1 Page: 67"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find free energy change of the steam\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 671.7 #[R] Equilibrium temperature\n",
+ "m_steam = 1. #[lbm] Condenmath.sing amount of the steam\n",
+ "# Using values from the steam table [1], we find that\n",
+ "delta_h_condensation = -970.3 #[Btu/lbm] Enthalpy change of the steam\n",
+ "delta_s_condensation = -1.4446 #[Btu/(lbm*R)] Entropy change of the steam\n",
+ "\n",
+ "# Calculations\n",
+ "# Gibb's free energy change of the steam is\n",
+ "delta_g_condensation = delta_h_condensation - T*delta_s_condensation #[Btu/lbm]\n",
+ "\n",
+ "\n",
+ "# Results\n",
+ "print \"Gibb''s free energy change of the steam is %0.1f Btu/lbm\"%(delta_g_condensation)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Gibb''s free energy change of the steam is 0.0 Btu/lbm\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "\n",
+ "Example 4.2 Page: 77\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Gibb's free energy-pressure diagram for graphite-diamond system\n",
+ "\n",
+ "from numpy import *\n",
+ "from matplotlib.pyplot import *\n",
+ "import math \n",
+ "\n",
+ "%pylab inline\n",
+ "\n",
+ "# Variables\n",
+ "# let we denote graphite by 'g' and diamond by 'd' \n",
+ "# Gibb's free energies of graphite and diamond are given by\n",
+ "g_g = 0.00 #[kJ/mol] \n",
+ "g_d = 2.90 #[kJ/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Specific volumes of graphite and diamond are given by\n",
+ "v_g = 5.31*10**(-1) #[kJ/(mol*kbar)]\n",
+ "v_d = 3.42*10**(-1) #[kJ/(mol*kbar)]\n",
+ "\n",
+ "# Now from the equation 4.32 ( page 74) given in the book, we have\n",
+ "# (dg/dP) = v , at consmath.tant temperature\n",
+ "# where 'v' is specific volume\n",
+ "# let us denote (dg/dP) by 'D' ,so\n",
+ "\n",
+ "D_g = v_g #[J/(mol*Pa)] For graphite\n",
+ "D_d = v_d #[J/(mol*Pa)] For diamond\n",
+ "\n",
+ "# Now we can take our plot from P = 0( =1 ), however, total pressure is 1 atm. \n",
+ "# If we consider specific volumes of the given species to be consmath.tant with changing the pressure then g-P curve will be a straight line\n",
+ "# So the equation of the line for graphite is \n",
+ "# g = D_g*P + g_g\n",
+ "# and that for diamond\n",
+ "# g = D_d*P + g_d\n",
+ "\n",
+ "P = linspace(0,30,30).T\n",
+ "\n",
+ "plot(P, D_d*P+g_d )\n",
+ "plot(P,D_g*P+g_g )\n",
+ "xlabel(\"Pressure, P, kbar\");\n",
+ "ylabel(\"Gibb''s free energy per mol, g, kJ/mol\");\n",
+ "legend(['Diamond, slope = 0.342 (kJ/mol)/kbar','Graphite, slope = 0.532 (kJ/mol)/kbar']);\n",
+ "\n",
+ "show()\n",
+ "# Results\n",
+ "print \" Gibb's free energy-pressure diagram for graphite-diamond system at 25 degC is as shown in the graphic window. \"\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['draw_if_interactive']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\nc1lcXBzT1tZmly5dYowxtmrVKqasrMzOnz/P+Hw+W7ZsGevXr5/geMbGxuzy5cuMMcY8PT3Z5MmT\nheKxt7dn7u7uLDc3l71794716dOH7dy5U+Lnzc7OZqqqqiwxMZExxtibN29YfHw8Y4yxffv2sQED\nBjDGGPvw4QNTV1dnhw4dYsXFxczf359paGiwtLQ0xhhjgwYNYgYGBiw+Pp7l5OSwr776in377beM\nMcZSUlKYlpYWO3/+PGOMsYsXLzItLS32/v17kTGNHj2aqauri/yxs7MT+Z5Tp04xExMToefmzJnD\n5syZI3J7T09PpqamxjQ1NZmpqSnbvn27yDiUlZVZ48aN2dmzZ8X+G86bN485OTmJfV1bW5vdvn1b\n8PjKlSvM0NCQMcbY6tWrWc+ePVlqaipj7L/vSenv3/Dhw1lISAhjjPveNW/enEVFRbG8vDw2ePBg\n1qpVK3bw4EHG5/PZTz/9xGxsbBhjjBUUFLC2bduy9evXs8LCQhYaGsqaNWvGHj58yBhjbNq0aeyn\nn34SilVVVZXFxcWJPPa0adPYihUrWGpqKuvduzdbsWKFYLupU6eyZs2asYiICJafn8/mzZsn+O4w\nxtihQ4dYWloaKy4uZl5eXkxPT4/l5+czxrjvvqKiouDf+NOnT2L/LcW1GxVtTyRuvXjxYnbhwoUK\n7bSqamqjKAuSPis8IZWfijp48CDT09MTes7CwoKpq6uzxo0bs4iICMYY94WfOnXqF/c1b948tmDB\nAsbYf3/YJX98jDH2ww8/MFdXV8YY90cwbNgwwWvx8fGscePGgselO4BVq1YJGlfGuEZbSUlJ6A/n\nyJEjgobgS7Kzs5m6ujo7efIky83NFXqtdAdw4MAB1rdvX6HXLSwsmJ+fH2OMMWtra7Zs2TLBa/fv\n32eNGjVixcXF7Ndffy3TYQ0fPpzt379fYnzldeDAAaEOkzHGli9fzqZNmyZy+/v377PXr18zPp/P\nrl+/zvT19Zm/v3+Z7YqKithff/3FNDQ02LNnz8q8HhISwjQ0NNijR4/ExqaoqCj0//3KlSvMwMCA\nLViwgFlZWbGPHz8KXvu8A8jJyWFaWlqsoKCAMcY1wjNmzBBsv2XLFta5c2fB49jYWKaurs4YY+yf\nf/4p8112cnJinp6egn193gEYGBgIvuOiju3i4sK6dOnCNm3aJPS+qVOnCnWC2dnZrEGDBiwlJUXk\n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\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x2896e50>"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Gibb's free energy-pressure diagram for graphite-diamond system at 25 degC is as shown in the graphic window. \n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 4.3 Page: 80\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find mole fraction of isobutane isomer in equilibrium\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# We have the system which consists of isobumath.tane and normal bumath.tane and isomerisaation is taking place between them \n",
+ "# The equilibrium consmath.tant for this reaction is given by\n",
+ "# K = (mole fraction of isobumath.tane)/(mole fraction of n-bumath.tane) = x_iso/x_normal\n",
+ "\n",
+ "# For this reaction, at 25C, \n",
+ "K = 4.52\n",
+ "\n",
+ "# and\n",
+ "# x_iso + x_normal = 1\n",
+ "# so\n",
+ "# K = x_iso/(1-x_iso)\n",
+ "\n",
+ "# Calculations\n",
+ "# solving for x_iso\n",
+ "def f(x_iso): \n",
+ "\t return x_iso/(1-x_iso)-K\n",
+ "x_iso = fsolve(f,0)\n",
+ "\n",
+ "# Results\n",
+ "print \" Mole fraction of isobumath.tane isomer in equilibrium is %0.2f\"%(x_iso)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Mole fraction of isobumath.tane isomer in equilibrium is 0.82\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch5.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch5.ipynb
new file mode 100644
index 00000000..38473b93
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch5.ipynb
@@ -0,0 +1,358 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 5 : Vapor Pressure The Clapeyron Equation And Single Pure Chemical Species Phase Equilibrium"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.1 Page: 89"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Find the value of DP/DT.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T=212. # [F]\n",
+ "\n",
+ "#**********#\n",
+ "#From the steam table, we have \n",
+ "delta_h=970.3 #[Btu/lbm]\n",
+ "delta_v=26.78 #[ft**(3)/lbm] and\n",
+ "\n",
+ "# Calculations\n",
+ "# changing the units\n",
+ "delta_h1=delta_h*778 #[ft*lbf/lbm]\n",
+ "delta_v1=delta_v*144 #[ft*in**(2)/lbm]\n",
+ "T=671.7 #[R]\n",
+ "\n",
+ "# We have dP/dT = delta_h/(T*delta_v)\n",
+ "#Thus\n",
+ "dP_by_dT=delta_h1/(T*delta_v1) #[psi/R]\n",
+ "\n",
+ "# Results\n",
+ "print \"The value of dP/dT is %f psi/R\"%(dP_by_dT)\n",
+ "#Using the nearest adjacent steam table entries for vapour pressure, wee have \n",
+ "#dP_by_dT = delta_P_by_delta_T=(15.291-14.125)/(214-210)=0.2915 psi/R\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The value of dP/dT is 0.291432 psi/R\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.2 Page: 90\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate temperature.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "p_2=0.005 # [psia]\n",
+ "R=1.987/18. #[1/R]\n",
+ "\n",
+ "#From the steam tables at the tripple point, we find \n",
+ "T_1=460+32.018 #[R]\n",
+ "p_1=0.0887 #[psia]\n",
+ "\n",
+ "#delta_h(solid to gas) = delta_h(sublimation) = 1218.7#[Btu/lbm]\n",
+ "delta_H=1218.7 #[Btu/lbm]\n",
+ "#Assuming that the enthalpy change of vaporization is independent of temperature (a fairly good approximation in this case)\n",
+ "#we start with Eq. 5.10 and rearrange:\n",
+ "#1/T_2 = 1/T_1-(math.log(p_2/p_1))*R/delta_H\n",
+ "#So\n",
+ "\n",
+ "# Calculations\n",
+ "T_2=1/(1/T_1-(math.log(p_2/p_1))*R/delta_H) #[R]\n",
+ "#Changing the temperature in farenheit\n",
+ "T_2F=T_2-460 #[F]\n",
+ "\n",
+ "# Results\n",
+ "print \"The temperature is %.2f F\"%(T_2F)\n",
+ "#BY linear interpolation in the steam tables, one finds -23.8 F. Because of imprecision of linear interpolation, these values are approximately equal.\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The temperature is -23.88 F\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.3 Page: 91\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate vapuor pressure of water.\n",
+ "\n",
+ "\n",
+ "import math \n",
+ "from numpy import *\n",
+ "\n",
+ "# Variables\n",
+ "T_3=1155.2 #[R]\n",
+ "T_2=652.9 #[R]\n",
+ "T_1=787.5 #[R]\n",
+ "p_2=10. #[psia]\n",
+ "p_1=100. #[psia]\n",
+ "\n",
+ "# Calculations\n",
+ "#******#\n",
+ "#Here we can write Eq. 5.9 as reported in the book in the form most often seen.\n",
+ "# math.log(p)=A-B/T\n",
+ "#Where A and B are consmath.tants to be determined from the pair of T and p values above.\n",
+ "\n",
+ "#we simply write \n",
+ "#math.log(10)=A-B/652.9\n",
+ "#math.log(100)=A-B/787.5\n",
+ "# We have to solve the above two simulmath.taneous equations having two vaiables A and B.\n",
+ "\n",
+ "M = matrix([[1, -1/652.9],[1,-1/787.5]])\n",
+ "C = array([[math.log(10)],[math.log(100)]])\n",
+ "X = linalg.inv(M) * C\n",
+ "\n",
+ "A=X[0]\n",
+ "B=X[1]\n",
+ "\n",
+ "# By straightforward algebra we find the values of A and B. Thus, for 1155.2 R we have \n",
+ "p_3=math.exp(A-B/T_3)\n",
+ "\n",
+ "# Results\n",
+ "print \"Vapuor pressure of water at given temperature is %f psia\"%(p_3)\n",
+ "\n",
+ "# p_3=3499 psia. \n",
+ "# Note : \"It has been reported in the book that from table 5.1 we see that the correct value is 3000 psia. Thus there is an error of 16% in the predicted pressure.\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Vapuor pressure of water at given temperature is 3499.187053 psia\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.4 Page: 94\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find accentric factor.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# At Tr = 0.7, we read \n",
+ "Pr=0.023\n",
+ "# and thus accentric factor is given by\n",
+ "\n",
+ "# Calculations\n",
+ "w=-math.log10(0.023)-1\n",
+ "\n",
+ "# Results\n",
+ "print \"The accentric factor based on the given data is %f\"%(w)\n",
+ "#It has been reported in the book that table A.1 shows that the value based on the best data is 0.645.\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The accentric factor based on the given data is 0.638272\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.5 Page: 94\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate NBP of water using antoine equation.\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "#From Antoine equation we have \n",
+ "# math.log(p) = A-B/(T+C)\n",
+ "#Solving above equation for T, we have\n",
+ "# T = B/(A-math.log(p))-C\n",
+ "#Inserting the values of the consmath.tants for the water which are reported in the given book in the table A.2 (page 419),\n",
+ "# and the value of 1.00 atm expressed in torr, we find that \n",
+ "A=7.96681\n",
+ "B=1668.21\n",
+ "C=228.0\n",
+ "p=760. #[torr]\n",
+ "\n",
+ "# Calculations\n",
+ "#Thus\n",
+ "T=B/(A-math.log10(p))-C\n",
+ "\n",
+ "# Results\n",
+ "print \"NBP of water umath.sing antoine equation and table A.2 is %f C\"%(T)\n",
+ "\n",
+ "#This does not prove the overall accuracy of the Antoine equation, but does show that whoever fitted the consmath.tants to the experimental data for water made them represent the NBP (100C) very well. \n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "NBP of water umath.sing antoine equation and table A.2 is 100.000625 C\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 5.6 Page: 96\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate Freezing preesure of water\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T_2=-22. #[C]\n",
+ "# converting temperature in farenheit\n",
+ "T_2F=T_2*9/5+32 #[F]\n",
+ "#Expressing T_2 in Rankine\n",
+ "T_2R=460+T_2F #[R]\n",
+ "#delta_h = delta_h(fusion)\n",
+ "delta_h=143.35*778. #[ft*lbf/lbm]\n",
+ "#delta_v = v_water-v_ice\n",
+ "delta_v=0.01602-0.01747 #[ft**(3)/lbm]\n",
+ "# changing the unit \n",
+ "delta_v1=delta_v*144 #[ft*in/lbm]\n",
+ "\n",
+ "# Calculations\n",
+ "#and\n",
+ "T_1=460+32. #[R]\n",
+ "dP_by_dT=delta_h/(T_1*delta_v1) #[psi/R] at 32F\n",
+ "delta_T=T_2R-T_1\n",
+ "\n",
+ "#This gives the rigorously correct slope of the liquid-solid curve at 32F on a P-T diagram.\n",
+ "#Here we use P instead of p because neither phase is a gas, so this is not a vapour pressure. \n",
+ "#If we further assume that the solid-liquid curve is a straight line, which is equivalent to assuming that delta_h/(T*deta_v)is a consmath.tant over the region of interest, then we can estimate the pressure at -22C = -7.6F by\n",
+ "#So\n",
+ "\n",
+ "delta_P=(dP_by_dT)*delta_T #[psi]\n",
+ "\n",
+ "# From this we can estimate the final pressure as\n",
+ "delta_P=delta_P+0.09 #[psi]\n",
+ "\n",
+ "# Results\n",
+ "print \"Freezing preesure of water at given temperature is %f psi\"%(delta_P)\n",
+ "# In this case, the experimental pressure is well known, because this temperature corresponds to the tripple point between liquid and water, \n",
+ "# ice I(the common variety), and ice III, a variety that does not exist at pressure below about 30000 psia (see figure 1.10 in the book). \n",
+ "# The measured value is 30000 psia, which shows that our assumption of a straight line on a P-T plot (delta_h/(T*delta_v)=consmath.tant) is only approximately correct.\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Freezing preesure of water at given temperature is 42991.024258 psi\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch6.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch6.ipynb
new file mode 100644
index 00000000..fb02a429
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch6.ipynb
@@ -0,0 +1,499 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 6 : Partial Molal Properties"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.1 Page: 108\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "calculate\n",
+ "Partial molal volume of ethanol in water at zero molality\n",
+ "Partial molal volume of ethanol in water at unity molality \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 20. #[C]\n",
+ "m_1 = 0. #[molal]\n",
+ "m_2 = 1. #[molal]\n",
+ "\n",
+ "# Calculations\n",
+ "# The data given in the figure 6.2 , as reported in book, can be repersented with excellent accuracy by a simple data fitting equation\n",
+ "#V = 1.0019+0.054668*m-0.000418*m**(2)\n",
+ "# Where 'V' is( solution volume, liters per 1000g of water ) and 'm' is the molality of ethanol in water\n",
+ "#The partial molal volume is obtained by differentiating the expression of the 'V' with respect to 'm'\n",
+ "# v_ethanol = dV/dm = 0.054668-2*0.000418*m\n",
+ "# So that at zero molality \n",
+ "m = 0 #[molal]\n",
+ "# the partial molal volume is \n",
+ "v_1 = 0.054668-2*0.000418*m #[L/mol]\n",
+ "# and at\n",
+ "m = 1. #[molal]\n",
+ "v_2 = 0.054668-2*0.000418*m #[L/mol]\n",
+ "v_1 = v_1*1000 #[cm**(3)/mol]\n",
+ "v_2 = v_2*1000 #[cm**(3)/mol]\n",
+ "\n",
+ "# Results\n",
+ "print \"Partial molal volume of ethanol in water at zero molality is %f cm**3/mol\"%(v_1)\n",
+ "print \" Partial molal volume of ethanol in water at unity molality is %f cm**3/mol\"%(v_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Partial molal volume of ethanol in water at zero molality is 54.668000 cm**3/mol\n",
+ " Partial molal volume of ethanol in water at unity molality is 53.832000 cm**3/mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.2 Page: 109\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate Volume change on mixing etanol and water\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "n_eth = 1. #[mol]\n",
+ "W_water = 1. #[kg]\n",
+ "Temp = 20. #[C]\n",
+ "\n",
+ "# For pure ethanol at 20C\n",
+ "v_ethanol = 58.4 #[cm**(3)/mol]\n",
+ "v_ethanol = v_ethanol/1000 # [L/mol]\n",
+ "v_water = 1.0019 #[L/1000g]\n",
+ "\n",
+ "# Calculations\n",
+ "# Molality of ethanol in water is\n",
+ "m = n_eth/W_water #[molal]\n",
+ "# We have the equation used in the previous example as\n",
+ "V_final_mix = 1.0019+0.054668*m-0.000418*m**(2)\n",
+ "\n",
+ "# Where 'V' is( solution volume, liters per 1000g of water ) and 'm' is the molality of ethanol in water\n",
+ "# V is the final volume of the solution \n",
+ "# The volume expansion on moxing is \n",
+ "V_exp = V_final_mix-v_ethanol-v_water #[L]\n",
+ "V_exp = V_exp*1000 #[cm**(3)]\n",
+ "\n",
+ "# Results\n",
+ "print \"Volume change on mixing emath.tanol and water is %0.3f cubic cm\"%(V_exp)\n",
+ "# We see that there is a net contraction on mixing of the volume of the ethanol added.\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Volume change on mixing emath.tanol and water is -4.150 cubic cm\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.3 Page: 109\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Volume change on mixing etanol and water \n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# All the data are same as in the previous example \n",
+ "# The equation 6.5 reported in the book is \n",
+ "v_i_average = 0.05425 #[L/mol]\n",
+ "# and\n",
+ "v_i_0 = 0.0584 #[L/mol]\n",
+ "delta_n = 1.00 #[mol]\n",
+ "\n",
+ "# Calculations\n",
+ "delta_V_mixing = (v_i_average-v_i_0)*delta_n #[L]\n",
+ "delta_V_mixing = delta_V_mixing*1000 #[cm**(3)]\n",
+ "\n",
+ "# Results\n",
+ "print \"Volume change on mixing etanol and water is %f cm**3\"%(delta_V_mixing)\n",
+ "# Which is same as the solution in example 6.2\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Volume change on mixing etanol and water is -4.150000 cm**3\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.4 Page: 113\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "calculate\n",
+ "Partial molar volume of the ethanol \n",
+ "Partial molar volume of the water \n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "m = 1. #[molal] Molality of the solution with respect to ethanol\n",
+ "M_water = 18. #[g/mol] molecular weight of water\n",
+ "\n",
+ "# Calculations\n",
+ "# First we convert molality to mole fraction\n",
+ "x_ethanol = m/(m + 1000/M_water)\n",
+ "\n",
+ "# For the low range of data point on figure 6.5(page 112), we can fit an equation\n",
+ "# (Specific volume ) = 0.018032 + 0.037002*x_ethanol - 0.039593*x_ethanol**(2) + 0.21787*x_ethanol**(3)\n",
+ "# This is applicable for (0 < x_ethanol < 0.04 ), which is the case we have\n",
+ "\n",
+ "# So\n",
+ "v_math_tan = 0.018032 + 0.037002*x_ethanol - \\\n",
+ "0.039593*x_ethanol**(2) + 0.21787*x_ethanol**(3) #[L/mol]\n",
+ "\n",
+ "# Now we will find the derivative of the specific volume with respect to x_ethanol at the known point x_ethanol\n",
+ "# (dv/dx_ethanol) = 0.037002 - 2*0.039593*x_ethanol + 3*0.21787*x_ethanol**(2)\n",
+ "# Hence\n",
+ "v_derv_math_tan = 0.037002 - 2*0.039593*x_ethanol + 3*0.21787*x_ethanol**(2) #[L/mol]\n",
+ "\n",
+ "# By simple geometry from the figure 6.6(page 113) of the book we find\n",
+ "# a = v_math_tan + (1-x_math_tan)*(dv/dx_1)_math_tan\n",
+ "# b = v_math_tan - x_math_tan*(dv/dx_1)_math_tan\n",
+ "\n",
+ "# We have a = v_ethanol and b = v_water\n",
+ "x_math_tan = x_ethanol\n",
+ "# So\n",
+ "v_ethanol = v_math_tan + (1-x_math_tan)*(v_derv_math_tan) #[L/mol]\n",
+ "v_water = v_math_tan - x_math_tan*(v_derv_math_tan) #[L/mol]\n",
+ "\n",
+ "# Results\n",
+ "print \" Partial molar volume of the ethanol in the given solution is %f L/mol\"%(v_ethanol)\n",
+ "print \" Partial molar volume of the water in the given solution is %f L/mol\"%(v_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Partial molar volume of the ethanol in the given solution is 0.053848 L/mol\n",
+ " Partial molar volume of the water in the given solution is 0.018042 L/mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.7 Page: 117\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "calculate\n",
+ "Partial molar enthalpy of water in the mixture\n",
+ "Partial molar enthalpy of H2SO4 in the mixture\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_sulph = 0.6\n",
+ "x_water = 0.4\n",
+ "Temp = 200. #[F]\n",
+ "# In the given figure 6.8 in the book, drawing the math.tangent to the 200F curve at 60 wt% H2SO4, we find that it intersects the 0%(pure water) axis at 25 Btu/lbm, and the 100% H2SO4 axis at -100Btu/lbm. i.e.\n",
+ "h_water_per_pound = 25. #[Btu/lbm]\n",
+ "h_sulph_per_pound = -100. #[Btu/lbm]\n",
+ "# also molecular weight of water and sulphuric acid are\n",
+ "M_water = 18. #[lbm/lbmol]\n",
+ "M_sulph = 98. #[lbm/lbmol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Using equation 6.20 given in the book we have\n",
+ "h_water = h_water_per_pound*M_water #[Btu/lbmol]\n",
+ "h_sulph = h_sulph_per_pound*M_sulph #[Btu/lbmol]\n",
+ "\n",
+ "# Results\n",
+ "print \"Partial molar enthalpy of water in the mixture is %f Btu/lbmol\"%(h_water)\n",
+ "print \" Partial molar enthalpy of H2SO4 in the mixture is %f Btu/lbmol\"%(h_sulph)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Partial molar enthalpy of water in the mixture is 450.000000 Btu/lbmol\n",
+ " Partial molar enthalpy of H2SO4 in the mixture is -9800.000000 Btu/lbmol\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.8 Page: 119\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The amount of heat removed to keep the temperature constant\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_sulph = 0.6\n",
+ "x_water = 0.4\n",
+ "M_i = 18. #[lbm/lbmol]\n",
+ "Temp = 200. #[F]\n",
+ "# From Equation 6.11 as given in the book, we have \n",
+ "# dQ/dm_in = h_i-h_in\n",
+ "# where h_i is partial molal enthalpy which is taken from the example 6.7 and h_in is the pure species molar enthalpy which is read from the figure 6.8.\n",
+ "# So at 200F we have \n",
+ "h_i = 25. #[Btu/lbm]\n",
+ "h_in = 168. #[Btu/lbm]\n",
+ "\n",
+ "# Calculations\n",
+ "# hence\n",
+ "dQ_by_dm_in = h_i-h_in #[Btu/lbm]\n",
+ "# Now \n",
+ "dQ_by_dn_in = M_i*dQ_by_dm_in #[Btu/lbmol]\n",
+ "\n",
+ "# Results\n",
+ "print \"The amount of heat removed to keep the temperature consmath.tant is %f Btu/lbm of water added\"%(dQ_by_dm_in)\n",
+ "# The negative sign shows that this mixing is exothermic we must remove 143 Btu/lbm of water added.\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The amount of heat removed to keep the temperature consmath.tant is -143.000000 Btu/lbm of water added\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.9 Page: 119\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The amount of heat added or removed \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "m_sulph = 0.4\n",
+ "m_water = 0.6\n",
+ "m = m_sulph+m_water\n",
+ "Temp = 200. #[F]\n",
+ "# Here at 200F we can read the solution enthalpy h_solution and pure H2SO4 enthalpy h_sulph such that\n",
+ "h_solution = -43. #[Btu/lbm]\n",
+ "h_sulph = 168. #[Btu/lbm]\n",
+ "# By energy balance, umath.sing h_0_water from example 6.7 in the book i.e.\n",
+ "h_0_water = 53. #[Btu/lbm]\n",
+ "\n",
+ "# We find \n",
+ "# Calculations\n",
+ "delta_Q = m*h_solution-(m_sulph*h_sulph+m_water*h_0_water) #[Btu]\n",
+ "\n",
+ "# Results\n",
+ "print \"The amount of heat added or removed is %f Btu\"%(delta_Q)\n",
+ "# We must remove the given amount of to hold the temperature consmath.tant.\n",
+ "# Note However the book has some mistake in calculation and reporting -172 Btu\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The amount of heat added or removed is -142.000000 Btu\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.10 Page: 120\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate enthalpy of the solution\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_sulph = 0.6\n",
+ "x_water = 0.4\n",
+ "Temp = 200. #[F]\n",
+ "# At the 200F we have\n",
+ "h_water = 25. #[Btu/lbm]\n",
+ "h_sulph = -100. #[Btu/lbm]\n",
+ "\n",
+ "# Calculations\n",
+ "# From equation 6.16 (as reporated in the book), rewritten for masses instead of moles we have \n",
+ "h_solution = h_water*x_water+h_sulph*x_sulph # [Btu/lbm]\n",
+ "\n",
+ "# Results\n",
+ "print \"Enthalpy of the solution is %f Btu/lbm\"%(h_solution)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enthalpy of the solution is -50.000000 Btu/lbm\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 6.11 Page: 121\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Value of the dv_b/dx_a at x_b =0\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_b = 0\n",
+ "x_a = 1\n",
+ "# We have\n",
+ "#dv_a/dx_a = 3*x_b**(2)+2*x_b\n",
+ "# We have the equation \n",
+ "# dv_b/dx_a = -(dv_a/dx_a)/(x_b/x_a)\n",
+ "# So\n",
+ "# dv_b/dx_a = -(x_a/x_b)*(3*x_b**(2)+2*x_b) \n",
+ "# Calculations\n",
+ "dv_b_by_dx_a = x_a*(-3*x_b-2)\n",
+ "\n",
+ "# Results\n",
+ "print \"Value of the dv_b/dx_a at x_b =0 is %0.0f\"%(dv_b_by_dx_a)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Value of the dv_b/dx_a at x_b =0 is -2\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch7.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch7.ipynb
new file mode 100644
index 00000000..55160b19
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch7.ipynb
@@ -0,0 +1,474 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 7 : Fugacity Ideal Solutions Activity Activity Coefficient"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.1 Page: 134"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Fugacity of propane gas\n",
+ "\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "\n",
+ "# Variables\n",
+ "T = 220+459.67 #[R] Temperature in Rankine\n",
+ "P = 500. #[psia] Pressure\n",
+ "R = 10.73 #[(psi*ft**(3)/(lbmol*R))] Gas consmath.tant\n",
+ "\n",
+ "# We will follow the method 'a' as the book has given the multiple methods to solve this problem\n",
+ "# From the equation 7.10 given in the book(page 132), we have \n",
+ "# (f/P) = exp((-1/(R*T))*intgrate(a*dp)) , with intgration limits from zero to 'P'\n",
+ "# Where 'a' is known as volume residual\n",
+ "# Let us say , I = intgrate(a*dp)\n",
+ "\n",
+ "# From the table 7.A(page 134) given in the book, the average value of alpha(a) is \n",
+ "a = 4.256 #[ft**(3)/lbmol]\n",
+ "# so \n",
+ "\n",
+ "# Calculations\n",
+ "def f6(p): \n",
+ "\t return a*p**(0)\n",
+ "\n",
+ "I = quad(f6,0,P)[0]\n",
+ "\n",
+ "\n",
+ "# Now \n",
+ "f = P*math.exp((-1/(R*T))*I) #[psia]\n",
+ "\n",
+ "# Results\n",
+ "print \"Fugacity of propane gas at the given condition is %.0f psia\"%(round(f,1))\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Fugacity of propane gas at the given condition is 374 psia\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.2 Page: 138\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "calculate\n",
+ "Compresssibility factor the liquid water\n",
+ "Volume residual for the liquid water \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 100. + 460 #[R] Temperature of the system in Rankine\n",
+ "P = 1. # [psia]\n",
+ "R = 10.73 #[(psi*ft**(3)/(lbmol*R))] Gas consmath.tant\n",
+ "\n",
+ "# Calculations\n",
+ "# From the steam table, the specific volume of the water at 101.7 F, which is nearly equal to 100 F, and 1 psia is\n",
+ "v = 0.016136*18 #[ft**(3)/lbmol]\n",
+ "z = round((P*v)/(R*T),5)\n",
+ "\n",
+ "# and volume residual is given by\n",
+ "a = int(((R*T)/P))*(1-z) #[ft**(3)/lbmol]\n",
+ "\n",
+ "# Results\n",
+ "print \" Compresssibility factor the liquid water at the given condition is %.5f \"%(z)\n",
+ "print \"Volume residual for the liquid water at the given condition is %0.1f cubic feet/lbmol\"%(a)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Compresssibility factor the liquid water at the given condition is 0.00005 \n",
+ "Volume residual for the liquid water at the given condition is 6007.7 cubic feet/lbmol\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.3 Page: 138\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Fugacity of the pure liquid water\n",
+ "\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "# Variables\n",
+ "T = 100+460. #[R] Temperature\n",
+ "P = 1000. #[psia] Pressure\n",
+ "R = 10.73 #[(psi*ft**(3)/(lbmol*R))] Gas consmath.tant\n",
+ "\n",
+ "# From the figure 7.3(page 138) we see that as P tends to zero, (f/P) tends to 1, so f tends to 0. Therefore, f_a tends to zero also in the diagram\n",
+ "# fugacity at point b is calculated by the equation\n",
+ "# We have\n",
+ "f_b = 0.95 #[psia]\n",
+ "# We also can write\n",
+ "f_c = f_b #[psia]\n",
+ "# To find the value of f_d, we use the equation \n",
+ "# here 'v' is practically consmath.tant(for a liquid), and\n",
+ "v = 0.016136*18 #[ft**(3)/lbmol]\n",
+ "\n",
+ "# and from the figure 7.3, we have \n",
+ "P_d = 1000. #[psia]\n",
+ "P_c = 1. #[psia]\n",
+ "\n",
+ "# Calculations\n",
+ "# integrating the left hand side of the equation with the integration limits f_c and f_d and solving, we have\n",
+ "def f4(p): \n",
+ "\t return p**(0)\n",
+ "\n",
+ "f_d = f_c*math.exp((v/(R*T))* (quad(f4,P_c,P_d))[0])\n",
+ "\n",
+ "# Results\n",
+ "print \"Fugacity of the pure liquid water at the given condition is %0.1f psia\"%(f_d)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Fugacity of the pure liquid water at the given condition is 1.0 psia\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.4 Page: 145\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate vapor and liquid \n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 78.15 #[C]\n",
+ "P = 1.0 #[atm]\n",
+ "# Here we name ethanol as the species 'a', and water as the species 'b', and name the vapor as phase 1 and the liquid as the phase 2. \n",
+ "# Thus vapor pressures of the pure species at the given temperature are\n",
+ "p_a_0 = 0.993 #[atm] Pure ethanol vapor pressure at 78.15C\n",
+ "p_b_0 = 0.434 #[atm] Pure water vapor pressure at 78.15C\n",
+ "\n",
+ "# Also composition of the azeotrope is\n",
+ "x_a = 0.8943 # Amount of ethanol in the liquid phase \n",
+ "x_b = 0.1057 # Amount of water in liquid phase \n",
+ "\n",
+ "# Also, for an azeotrope mixture\n",
+ "y_a = x_a # Amount of ethanol in vapor phase \n",
+ "y_b = x_b # Amount of water in the vapor phase \n",
+ "\n",
+ "# For ideal gas , fugacity is equal to the total pressure of the system, i.e.\n",
+ "# f_i_0 = P , (where P is the system pressure)\n",
+ "# For pure liquid system, fugacity of a species is independent of the total pressure of the system and is equal to the pure species vapor pressure at this temprature, i.e.\n",
+ "# f_i_0 = p_i\n",
+ "\n",
+ "# Now, fugacity of each species in gaseous phase and liquid phase will be equal \n",
+ "# so, writing the expression for both liquid and gas phase fugacity and equatinh them, we have\n",
+ "# f_a_2 = f_a_1 = (y*Y*P)_a_1 = (x*Y*p)_a_2..........................................(1)\n",
+ "# f_b_2 = f_b_1 = (y*Y*P)_b_1 = (x*Y*p)_b_2..........................................(2)\n",
+ "\n",
+ "# We observe that this system has four values of 'Y', one for each of the two species in each of two phases.\n",
+ "# Mixtures of the ideal gases are all ideal solutions and the value of 'Y' for all the species in ideal gas phase are unity, so for above two equations\n",
+ "Y_a_1 = 1.0\n",
+ "Y_b_1 = 1.0\n",
+ "\n",
+ "# Calculations\n",
+ "# Now putting the values these gaseous phase 'Y's in their respective equations 1 and 2, and solving for the liquid phase 'Y's, we have\n",
+ "Y_a_2 = ((y_a*P)/(x_a*p_a_0))\n",
+ "Y_b_2 = ((y_b*P)/(x_b*p_b_0))\n",
+ "\n",
+ "# From equations 1 and 2, the fugacity of each species in each phase is given by\n",
+ "f_a_1 = (y_a*Y_a_1*P) #[atm]\n",
+ "f_b_1 = (y_b*Y_b_1*P) #[atm]\n",
+ "# and from the definition we have \n",
+ "f_a_2 = f_a_1 #[atm]\n",
+ "f_b_2 = f_b_1 #[atm]\n",
+ "\n",
+ "# As we have defined above about the pure species fugacity, so \n",
+ "# For vapor phase\n",
+ "f_a_1_0 = P #[atm]\n",
+ "f_b_1_0 = P #[atm]\n",
+ "\n",
+ "# For liquid phase\n",
+ "f_a_2_0 = p_a_0 #[atm]\n",
+ "f_b_2_0 = p_b_0 #[atm]\n",
+ "\n",
+ "# Results\n",
+ "print \" The results are summarized in the following table: \\n\\tPhase\\t\\t\\t\\t Etahnol(i=a)\\t\\t\\t\\t Water,i=b\"\n",
+ "print \" \\tVAPOR PHASE 1\"\n",
+ "print \" \\t f_i_1 atm \\t\\t\\t %.4f \\t\\t\\t\\t %.4f\"%(f_a_1,f_b_1)\n",
+ "print \" \\t f_i_1_0 atm \\t\\t\\t %.4f \\t\\t\\t\\t %.4f\"%(f_a_1,f_b_1)\n",
+ "print \" \\t Y_i_1 assumed \\t\\t %f \\t\\t\\t\\t %f\"%(Y_a_1,Y_b_1)\n",
+ "print \" \\tLIQUID PHASE 2\"\n",
+ "print \" \\t f_i_2 atm \\t\\t\\t %.4f \\t\\t\\t\\t %.4f\"%(f_a_2,f_b_2)\n",
+ "print \" \\t f_i_2_0 atm \\t\\t\\t %.4f \\t\\t\\t\\t %.4f\"%(f_a_2,f_b_2)\n",
+ "print \" \\t Y_i_2assumed \\t\\t %.4f \\t\\t\\t\\t %.4f\"%(Y_a_2,Y_b_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The results are summarized in the following table: \n",
+ "\tPhase\t\t\t\t Etahnol(i=a)\t\t\t\t Water,i=b\n",
+ " \tVAPOR PHASE 1\n",
+ " \t f_i_1 atm \t\t\t 0.8943 \t\t\t\t 0.1057\n",
+ " \t f_i_1_0 atm \t\t\t 0.8943 \t\t\t\t 0.1057\n",
+ " \t Y_i_1 assumed \t\t 1.000000 \t\t\t\t 1.000000\n",
+ " \tLIQUID PHASE 2\n",
+ " \t f_i_2 atm \t\t\t 0.8943 \t\t\t\t 0.1057\n",
+ " \t f_i_2_0 atm \t\t\t 0.8943 \t\t\t\t 0.1057\n",
+ " \t Y_i_2assumed \t\t 1.0070 \t\t\t\t 2.3041\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.5 Page: 149\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Fugacity of the methane in the gaseous mixture \n",
+ "Fugacity of the butane in the gaseous mixture\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 220+460. #[R] Temperature in rankine\n",
+ "P = 1000. #[psia] Pressure\n",
+ "y_methane = 0.784 # Mol fraction of methane in the given mixture\n",
+ "y_butane = (1-y_methane) # Mol fraction of n-bumath.tane in the given mixture\n",
+ "R = 10.73 #[(psia*ft**(3)/(lbmol*R))] gas consmath.tant\n",
+ "\n",
+ "# In this problem, we need the partial molar volume residual.\n",
+ "# We find its value at 100 psia by plotting the volume resduals at 100 psia as a function of mole fraction, as shown in figure 7.9( page 150 )\n",
+ "# drawing the math.tangent to the data points at x_methane = 0.784 and reading its intercept on the 100 mol% methane axis as 0.6 ft**(3)/lbmol\n",
+ "# similarily volume residual is determined for all other pressures and plot them vs pressure, as shown in Figure 7.10 (page 151). \n",
+ "# From this plot we find the integral we need by numerical integration ( trapazoid rule ) as 290 ft **(3)/lbmol.\n",
+ "\n",
+ "# Thus, for methane \n",
+ "# Let I = intefrate(a_i*dp)) and J = f_i/(P*y_i) , so\n",
+ "Im = 290. #[ft**(3)/lbmol]\n",
+ "\n",
+ "# Calculations\n",
+ "# and\n",
+ "Jm = math.exp((-1/(R*T))*Im)\n",
+ "\n",
+ "# hence \n",
+ "f_methane = Jm*P*y_methane #[psia] fugacity of methane\n",
+ "\n",
+ "# doing the same process for bumath.tane, we find \n",
+ "Ib = 5859. #[ft**(3)/lbmol]\n",
+ "# so, for bumath.tane we find\n",
+ "Jb = math.exp((-1/(R*T))*Ib)\n",
+ "# hence \n",
+ "f_butane = Jb*P*y_butane #[psia] fugacity of bumath.tane\n",
+ "\n",
+ "# Results\n",
+ "print \" Fugacity of the methane in the gaseous mixture is %0.0f psia\"%(f_methane)\n",
+ "print \" Fugacity of the butane in the gaseous mixture is %0.1f psia\"%(f_butane)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Fugacity of the methane in the gaseous mixture is 753 psia\n",
+ " Fugacity of the butane in the gaseous mixture is 96.8 psia\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.6 Page: 153\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The value of v_i\n",
+ "The value of Y_i\n",
+ "The value of phi_cap_i\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 220+460. #[R] Temperature in rankine\n",
+ "P = 1000. #[psia] Pressure\n",
+ "x_methane = 0.784 # Mol fraction of methane in the given mixture\n",
+ "x_bumath_tane = (1-x_methane) # Mol fraction of n-bumath_tane in the given mixture\n",
+ "\n",
+ "# From the example 7.5, we found directly from the PvT data that for methane\n",
+ "# (f_i/(P*x_i)) = 0.961 = (v_i*Y_i) = phi_cap_i\n",
+ "# So, we can write that\n",
+ "v_i_into_Y_i = 0.961\n",
+ "phi_cap_i = 0.961\n",
+ "\n",
+ "# Calculations\n",
+ "# From Starling's tables of hydrocarbon properties we read that for pure methane at this T and P,\n",
+ "# (F_i/P) = v_i = phi_i , from which it follows \n",
+ "v_i = 0.954\n",
+ "phi_i = v_i\n",
+ "Y_i = phi_cap_i/v_i\n",
+ "\n",
+ "# Results\n",
+ "print \" The value of v_i is %f\"%(v_i)\n",
+ "print \" The value of Y_i is %f\"%(Y_i)\n",
+ "print \" The value of phi_cap_i is %f\"%(phi_cap_i)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The value of v_i is 0.954000\n",
+ " The value of Y_i is 1.007338\n",
+ " The value of phi_cap_i is 0.961000\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 7.7 Page: 154\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The value of v=phi\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T_r = 0.889\n",
+ "P_r = 1.815\n",
+ "\n",
+ "# Using the properties of n-bumath.tane from appendix A.1 and the equation 7.W, we find that\n",
+ "# (f/P) = v = phi = exp((P_r/T_r)*f(T_r,w))\n",
+ "# Say, f(T_r,w) = f_f\n",
+ "f_f = -0.48553\n",
+ "\n",
+ "# Calculations\n",
+ "# so\n",
+ "v = math.exp((P_r/T_r)*f_f)\n",
+ "phi = v\n",
+ "\n",
+ "# Results\n",
+ "print \" The value of v=phi for n-bumath.tane at given condition is %f\"%(v)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The value of v=phi for n-bumath.tane at given condition is 0.371106\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch8.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch8.ipynb
new file mode 100644
index 00000000..c8a2f991
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch8.ipynb
@@ -0,0 +1,1230 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8 : Vapor Liquid Equilibrium VLE at Low Pressures"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.1 Page: 163"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The K factor of acetone\n",
+ "The K factor of water\n",
+ "The relative volatility \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_acetone = 0.05 # Mole fraction of Acetone in liquid\n",
+ "x_water = (1-x_acetone)\n",
+ "# Umath.sing the values from table 8.1(page 162) as reported in the book we have \n",
+ "y_acetone = 0.6381 # Mole fraction of Acetone in vapour\n",
+ "y_water = (1-y_acetone)\n",
+ "# We know that\n",
+ "# K_i = y_i/x_i\n",
+ "\n",
+ "# Calculations\n",
+ "# So 'K' factors are\n",
+ "K_acetone = y_acetone/x_acetone\n",
+ "K_water = y_water/x_water\n",
+ "# and relative volatility is \n",
+ "a = K_acetone/K_water\n",
+ "\n",
+ "# Results\n",
+ "print \"The K factor of acetone is %f\"%(K_acetone)\n",
+ "print \" The K factor of water is %f\"%(K_water)\n",
+ "print \" The relative volatility is %f\"%(a)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The K factor of acetone is 12.762000\n",
+ " The K factor of water is 0.380947\n",
+ " The relative volatility is 33.500691\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.2 Page: 165\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Liquid-phase activity coefficient for acetone\n",
+ "Liquid-phase activity coefficient for water\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 1. #[atm]\n",
+ "Temp = 74.8 #[C]\n",
+ "# Here we need to know the vapour pressure p_i correspondding ti the temperatures of each of the values in the table.\n",
+ "# We can estimate them umath.sing Antoine equation by the help of the values given in table A.2(page 418) in the book\n",
+ "# math.log10(p_i) = A-B/(T+C)\n",
+ "# for acetone the consmath.tants are given as\n",
+ "A_a = 7.02447\n",
+ "B_a = 1161\n",
+ "C_a = 224\n",
+ "# So p_acetone is given by\n",
+ "p_acetone = 10**(A_a-B_a/(Temp+C_a)) #[mmHg]\n",
+ "# similarily for water the consmath.tants are given as\n",
+ "A_w = 7.94917\n",
+ "B_w = 1657.462\n",
+ "C_w = 227.02\n",
+ "\n",
+ "# Calculations\n",
+ "# So p_water is given by\n",
+ "p_water = 10**(A_w-B_w/(Temp+C_w)) #[mmHg]\n",
+ "# expresmath.sing the pressures in atm\n",
+ "p_acetone = p_acetone/760 #[atm]\n",
+ "p_water = p_water/760 #[atm]\n",
+ "# Now from table 8.1 given the book\n",
+ "y_acetone = 0.6381\n",
+ "x_acetone = 0.05\n",
+ "y_water = (1-y_acetone)\n",
+ "x_water =(1-x_acetone)\n",
+ "# Hence the liquid-phase activity coefficients for acetone and water are given as\n",
+ "Y_acetone = y_acetone*P/(x_acetone*p_acetone)\n",
+ "#and\n",
+ "Y_water = y_water*P/(x_water*p_water)\n",
+ "\n",
+ "# Results\n",
+ "print \"Liquid-phase activity coefficient for acetone is %f\"%(Y_acetone)\n",
+ "print \" Liquid-phase activity coefficient for water is %f\"%(Y_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Liquid-phase activity coefficient for acetone is 7.043759\n",
+ " Liquid-phase activity coefficient for water is 1.009407\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.3 Page: 167\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "Comparison of experimental values to those computed by the ideal solution assumption\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_a = 0.05 # mole fraction of acetone in liquid phase\n",
+ "x_w = (1-x_a) # mole fraction of the water in the liquid phase\n",
+ "P = 1.00 #[atm] Total pressure in vapor phase\n",
+ "\n",
+ "# Let us assume that the solution is ideal \n",
+ "# We will take the help of trial and error methad and find a temperature at which sum of the computed ideal solution vapor phase mole fraction is 1.00\n",
+ "# For our first try let the temperatute is \n",
+ "T_1 = 80. #[C]\n",
+ "# Now from Table A.2( page 418), the Antoine equation consmath.tant for acetone are\n",
+ "A_a = 7.02447\n",
+ "B_a = 1161.\n",
+ "C_a = 224.\n",
+ "# and that for water \n",
+ "A_w = 7.94917\n",
+ "B_w = 1657.462\n",
+ "C_w = 227.02\n",
+ "\n",
+ "# Calculations\n",
+ "# Now from Antoine equation \n",
+ "# math.log10(p) = A - B/(T+C)\n",
+ "# So, vapor pressure for pure acetone at 80 C (in atm)is\n",
+ "p_a_1 = (1./760)*10**(A_a - B_a/(T_1+C_a)) #[atm]\n",
+ "# and that of water is\n",
+ "p_w_1 = (1./760)*10**(A_w - B_w/(T_1+C_w)) #[atm]\n",
+ "\n",
+ "# Now from Raoult's law \n",
+ "# y_i*P = x_i*p_i\n",
+ "# so, vapor phase composition at this temperature is\n",
+ "y_a_1 = (x_a*p_a_1)/P\n",
+ "y_w_1 = (x_w*p_w_1)/P\n",
+ "\n",
+ "# Sum of these two compostion is\n",
+ "y_1 = (y_a_1 + y_w_1)\n",
+ "# Since, y_1 is not equal to 1.00, so assumed temperature is wrong\n",
+ "\n",
+ "# Now we will assume our temperature as \n",
+ "T_2 = 96.4060 #[C]\n",
+ "\n",
+ "# Again, from Antoine equation \n",
+ "# math.log10(p) = A - B/(T+C)\n",
+ "# So, vapor pressure for pure acetone at 80 C (in atm)is\n",
+ "p_a_2 = (1./760)*10**(A_a - B_a/(T_2+C_a)) #[atm]\n",
+ "# and that of water is\n",
+ "p_w_2 = (1./760)*10**(A_w - B_w/(T_2+C_w)) #[atm]\n",
+ "\n",
+ "# Now from Raoult's law \n",
+ "# y_i*P = x_i*p_i\n",
+ "# so, vapor phase composition at this temperature is\n",
+ "y_a_2 = (x_a*p_a_2)/P\n",
+ "y_w_2 = (x_w*p_w_2)/P\n",
+ "\n",
+ "# Sum of these two compostion is\n",
+ "y_2 = (y_a_2 + y_w_2)\n",
+ "# Value of y_2 is equal to 1.00, so our assumption is right\n",
+ "# These are the values when the solution would behave as ideal, but this is not the actual scene\n",
+ "# The experimental values of the boiling point and vapor phase composition are listed in the table 8.1(page 162) given in book, which are\n",
+ "T_e = 74.8 #[C] Boiling temperature\n",
+ "y_a_e = 0.6381 # vapor phase composition of acetone\n",
+ "\n",
+ "# Results\n",
+ "print \" Comparison of experimental values to those computed by the ideal solution assumption x_acetone = 0.05 and P = 1.00 atm\"\n",
+ "print \" \\t\\t\\t Experimental Values from Table 8.1 \\t\\t\\t\\tValues calculated assuming idea solution\"\n",
+ "print \" Equilibriumboiling) \\t\\t%0.1f \\t\\t\\t\\t\\t\\t\\t\\t\\t %0.1f temperature T deg C\"%(T_e,T_2)\n",
+ "print \" Mole fraction acetone \\t\\t%f \\t\\t\\t\\t\\t\\t\\t\\t %f in the vapor phase y_a)\"%(y_a_e,y_a_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Comparison of experimental values to those computed by the ideal solution assumption x_acetone = 0.05 and P = 1.00 atm\n",
+ " \t\t\t Experimental Values from Table 8.1 \t\t\t\tValues calculated assuming idea solution\n",
+ " Equilibriumboiling) \t\t74.8 \t\t\t\t\t\t\t\t\t 96.4 temperature T deg C\n",
+ " Mole fraction acetone \t\t0.638100 \t\t\t\t\t\t\t\t 0.165615 in the vapor phase y_a)\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.4 Page: 177\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "calculate\n",
+ "Total moles of water present in the first phase\n",
+ "Total moles of water present in the second phase\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "n_water = 80. #[mol]\n",
+ "n_bumath_tanol = 20. #[mol]\n",
+ "n_total = n_water+n_bumath_tanol #[mol]\n",
+ "\n",
+ "# Here from the figure 8.12 given in the book we can find the mole fraction of the water in each phase \n",
+ "# Let x_feed be the moles of water(species a) fed/total moles fed.\n",
+ "x_feed = 0.8\n",
+ "x_a_1 = 0.65\n",
+ "x_a_2 = 0.98\n",
+ "\n",
+ "# Calculations\n",
+ "# By material balence for water\n",
+ "# n_total*x_feed = n_1*x_a_1+n_2*x_a_2, \n",
+ "# here n_1 and n_2 are no. of mole in each phase \n",
+ "# So (n_1+n_2) = n_total\n",
+ "# Thus\n",
+ "# n_total*x_feed = n_1*x_a_1+(n_total-n_1)*x_a_2\n",
+ "# solving further\n",
+ "# n_1/n_total = (x_feed-x_a_2)/(x_a_1-x_a_2)\n",
+ "# and hence\n",
+ "n_1 = (x_feed-x_a_2)/(x_a_1-x_a_2)*n_total #[mol]\n",
+ "n_2 = (n_total-n_1) #[mol]\n",
+ "# so\n",
+ "n_a_1 = 0.65*n_1 #[mol]\n",
+ "# and\n",
+ "n_a_2 = 0.98*n_2 #[mol]\n",
+ "\n",
+ "# Results\n",
+ "print \" Total moles of water present in the first phase is %f mol\"%(n_a_1)\n",
+ "print \" Total moles of water present in the second phase is %f mol\"%(n_a_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Total moles of water present in the first phase is 35.454545 mol\n",
+ " Total moles of water present in the second phase is 44.545455 mol\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.5 Page: 178\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The equilibrium amount of water in liquid at bubble-point\n",
+ "The equilibrium amount of water in liquid at bubble-point\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# At equilibrium on dew-point the conditions are given as\n",
+ "P = 1. #[atm]\n",
+ "y_water = 0.60\n",
+ "# From the figure 8.12d, if we start at 130C and 60 mol% water and cool.\n",
+ "# We meet he dew-point line at 99C, and at the same temperature the bubble-point curve shows\n",
+ "x_water_1 = 0.22\n",
+ "# Doing the same procedure with y_water = 0.90, we get the dew-point at the rightmost side at 98C \n",
+ "# In this case, the bubble-point line is the steeply sloping one at hte right, from wich we read \n",
+ "x_water_2 = 0.99\n",
+ "# Similarily with y_water = 0.73, we get that two dew-point meet at 92C.\n",
+ "# Vapour of this composition is in equilibrium with both liquid phases, as sketched in hte figure 8.12d.\n",
+ "# Vapour with any other composition is in equilibrium with only one liquid i.e.\n",
+ "# if y_water < 0.73, then\n",
+ "# x_water <0.65\n",
+ "# and if y_water > 0.73, then\n",
+ "# x_water >0.98\n",
+ "\n",
+ "# Results\n",
+ "print \" The equilibrium amount of water in liquid at bubble-point for the dew-point composition y_water=60 mol%% is %f mol%% water\"%(x_water_1)\n",
+ "print \" The equilibrium amount of water in liquid at bubble-point for the dew-point composition y_water=90 mol%% is %f mol%% water\"%(x_water_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The equilibrium amount of water in liquid at bubble-point for the dew-point composition y_water=60 mol% is 0.220000 mol% water\n",
+ " The equilibrium amount of water in liquid at bubble-point for the dew-point composition y_water=90 mol% is 0.990000 mol% water\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.6 Page: 178\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Four activity coefficients and fufacities\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 1.00 #[atm] assumed total vapor pressure\n",
+ "# In psia unit \n",
+ "P1 = 14.7 #[psia]\n",
+ "# From the figure 8.12d ( page 176 ) in book, the mole fractions of water in all the three phases and temperature are known and given as\n",
+ "x_1_water = 0.65\n",
+ "x_1_bumath_tanol = (1-x_1_water)\n",
+ "x_2_water = 0.98\n",
+ "x_2_bumath_tanol = (1-x_2_water)\n",
+ "y_water = 0.73\n",
+ "y_bumath_tanol = (1-y_water)\n",
+ "T = 92. #[C]\n",
+ "\n",
+ "# At this temperature we have to estimate the vapor pressure of pure water and n-bumath_tanol with the help of Antoine equation \n",
+ "# math.log10(p) = A - B/(T+C)\n",
+ "# From Table A.2( page 418), the Antoine equation consmath.tants for water are\n",
+ "A_w = 7.94917\n",
+ "B_w = 1657.462\n",
+ "C_w = 227.02\n",
+ "\n",
+ "# and that for n-bumath_tanol are\n",
+ "A_b = 7.838\n",
+ "B_b = 1558.190\n",
+ "C_b = 196.881\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus vapor pressure of water and n-bumath_tanol are respectively\n",
+ "p_water = (14.7/760)*10**(A_w - B_w/(T+C_w))\n",
+ "p_bumath_tanol = (14.7/760)*10**(A_b - B_b/(T+C_b))\n",
+ "\n",
+ "# fugacity of the water and n-bumath_tanol are given as\n",
+ "# f_i = (y*Y*P)_i\n",
+ "# Where Y is the gas phase activity coefficient and its value is 1.00 in ideal gas mixture, so\n",
+ "f_water = (y_water*P)\n",
+ "f_bumath_tanol = (y_bumath_tanol*P)\n",
+ "# The fugacity will be same in both the phase 1 and 2\n",
+ "\n",
+ "# Now, liquid-phase activity coefficients are given by\n",
+ "# Y_i = (y_i*P)/(x_i*p_i)\n",
+ "# so,\n",
+ "Y_water_1 = (y_water*P1)/(x_1_water*p_water)\n",
+ "Y_bumath_tanol_1 = (y_bumath_tanol*P1)/(x_1_bumath_tanol*p_bumath_tanol)\n",
+ "\n",
+ "# For phase 2\n",
+ "Y_water_2 = (y_water*P1)/(x_2_water*p_water)\n",
+ "Y_bumath_tanol_2 = (y_bumath_tanol*P1)/(x_2_bumath_tanol*p_bumath_tanol)\n",
+ "\n",
+ "# Results\n",
+ "print \" Four activity coefficients and fufacities are shown in the following table:\"\n",
+ "print \"Phase \\t x_water \\t f_wateratm \\t Y_water \\t x_butanol \\t f_butanolatm \\t\\t Y_butanol\"\n",
+ "print \" 1 \\t %f \\t %f \\t %f \\t %f \\t %f \\t\\t %f \"%(x_1_water,f_water,Y_water_1,x_1_bumath_tanol,f_bumath_tanol,Y_bumath_tanol_1)\n",
+ "print \" 2 \\t %f \\t %f \\t %0.2f \\t\\t %f \\t %f \\t\\t %f \"%(x_2_water,f_water,Y_water_2,x_2_bumath_tanol,f_bumath_tanol,Y_bumath_tanol_2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Four activity coefficients and fufacities are shown in the following table:\n",
+ "Phase \t x_water \t f_wateratm \t Y_water \t x_butanol \t f_butanolatm \t\t Y_butanol\n",
+ " 1 \t 0.650000 \t 0.730000 \t 1.504988 \t 0.350000 \t 0.270000 \t\t 2.108586 \n",
+ " 2 \t 0.980000 \t 0.730000 \t 1.00 \t\t 0.020000 \t 0.270000 \t\t 36.900247 \n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.7 Page: 179\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Boiling point of the two phase system\n",
+ "In vapor phase mole fraction of the water\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 1. #[atm] Total pressure in the vapor phase\n",
+ "\n",
+ "# Since the two liquids are not soluble in each other so Raoult's law will apply separately for these two phases.\n",
+ "# From Raoult's law we have \n",
+ "# (y_i*P) = (x_i*p_i)\n",
+ "# Here two phases are in pure stages so x_i=1 for both phases\n",
+ "# So\n",
+ "# y_i = (p_i/P)\n",
+ "# Writing this equation for each species, adding the equations, and solving for P, we find\n",
+ "# P = summation( y_i*P ) = summation( p_i/P*P ) = summation(p_i)\n",
+ "\n",
+ "# The total pressure is the sum of the individual pure species vapor pressure\n",
+ "# To find the boiling point temperature we perform a trial and error\n",
+ "# Let us assume the boiling point temperature\n",
+ "T = 89. #[C]\n",
+ "# Antoine equation consmath.tants for water is given by\n",
+ "A_w = 7.94917\n",
+ "B_w = 1657.462\n",
+ "C_w = 227.02\n",
+ "\n",
+ "# and that for n-bumath_tanol are\n",
+ "A_b = 7.838\n",
+ "B_b = 1558.190\n",
+ "C_b = 196.881\n",
+ "\n",
+ "# Calculations\n",
+ "# Antoine equation is given by\n",
+ "# math.log10(p) = A - B/(T+C)\n",
+ "# Thus vapor pressure of water and n-bumath_tanol are respectively\n",
+ "p_water = (1./760)*10**(A_w - B_w/(T+C_w))\n",
+ "p_bumath_tanol = (1./760)*10**(A_b - B_b/(T+C_b))\n",
+ "\n",
+ "# Now, vapor phase composition are \n",
+ "y_water = p_water/P\n",
+ "y_bumath_tanol = p_bumath_tanol/P\n",
+ "# summing these, we get \n",
+ "y = y_water + y_bumath_tanol\n",
+ "\n",
+ "# Value of y is nearly equal to one so our assumption of the temperature is correct\n",
+ "# So the boiling point of the mixture is 'T'\n",
+ "\n",
+ "# Results\n",
+ "print \" Boiling point of the two phase system is %0.0f deg C\"%(T)\n",
+ "print \" In vapor phase mole fraction of the water is %0.2f\"%(y_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Boiling point of the two phase system is 89 deg C\n",
+ " In vapor phase mole fraction of the water is 0.67\n"
+ ]
+ }
+ ],
+ "prompt_number": 25
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.8 Page: 184\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The value of the f/P for water vapour in the hypothetical state\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "Temp = 68. #[F]\n",
+ "P = 1. #[atm]\n",
+ "\n",
+ "# Calculations\n",
+ "# Changing the temperature in 'K' and pressure in 'bar' we have\n",
+ "Temp = 273.15+(Temp-32)*5./9 #[K]\n",
+ "P = P*1.01325 #[bar]\n",
+ "# For water from the table A.1(page 417)\n",
+ "T_c = 647.1 #[K]\n",
+ "P_c = 220.55 #[bar]\n",
+ "# Now\n",
+ "T_r = Temp/T_c\n",
+ "P_r = P/P_c\n",
+ "w = 0.345\n",
+ "#Now applying the result for the little EOS from the example 7.1(page 135 ), we have\n",
+ "# f/P = exp(P_r/T_r*f(T_r))\n",
+ "# From the chapter 2 of this book, we have \n",
+ "f_T_r = (0.083-0.422/T_r**(1.6))+w*(0.139-0.172/T_r**(4.2))\n",
+ "# So\n",
+ "f_by_P = math.exp(P_r/T_r*f_T_r)\n",
+ "\n",
+ "# Results\n",
+ "print \"The value of the f/P for water vapour in the hypothetical state is %0.2f\"%(f_by_P)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The value of the f/P for water vapour in the hypothetical state is 0.97\n"
+ ]
+ }
+ ],
+ "prompt_number": 26
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.9 Page: 189\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Boiling pressure of the liquid \n",
+ "Mole fraction of ethanaol in vapor phase\n",
+ "Mole fraction of water in the vapor phase\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# Here we will denote ethanol as species 'a' and water as the species 'b'\n",
+ "x_a = 0.1238\n",
+ "x_b = (1-x_a)\n",
+ "T = 85.3 #[C] Given boiling temperature\n",
+ "\n",
+ "# We have\n",
+ "# x_a + x_b = 1 and y_a + y_b = 1\n",
+ "# The Antoine equation consmath.tants for ethanol from the table A.2(page 418) given in the book, are \n",
+ "A_a = 8.04494\n",
+ "B_a = 1554.3\n",
+ "C_a = 222.65\n",
+ "\n",
+ "# and that for water \n",
+ "A_b = 7.96681\n",
+ "B_b = 1668.21\n",
+ "C_b = 228.0\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus vapor pressure of ethanol and water are respectively\n",
+ "p_a = (1./760)*10**(A_a - B_a/(T+C_a))\n",
+ "p_b = (1./760)*10**(A_b - B_b/(T+C_b))\n",
+ "\n",
+ "# Also the activity coefficients are given by\n",
+ "# Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2)) and\n",
+ "# Y_b = 10**((A**(2)*B*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "# here A and B are Van Laar coefficients and their values for ethanol-water system is reported in the book at page 186 (last two lines), so\n",
+ "A = 0.7292\n",
+ "B = 0.4104\n",
+ "\n",
+ "# hence\n",
+ "Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "Y_b = 10**((A**(2)*B*x_a**(2))/(A*x_a+B*x_b)**(2))\n",
+ "\n",
+ "# Now taking into account of nonideality of the gaseous phase, the modified Raoult's law gives\n",
+ "# (y_a/x_a) = (Y_a*p_a)/P and (y_b/x_b) = (Y_b*p_b)/P \n",
+ "\n",
+ "# we will take a simple method \n",
+ "# solving the above two equation for y_a and y_b and adding them, we get\n",
+ "P = (Y_a*p_a*x_a)+(Y_b*p_b*x_b) #[atm]\n",
+ "\n",
+ "# So,\n",
+ "y_a = (Y_a*p_a*x_a)/P\n",
+ "# and\n",
+ "y_b = (Y_b*p_b*x_b)/P\n",
+ "\n",
+ "# Results\n",
+ "print \" Boiling pressure of the liquid at 85.3 deg C is %0.4f atm\"%(P)\n",
+ "print \" Mole fraction of ethanaol in vapor phase is %0.4f\"%(y_a)\n",
+ "print \" Mole fraction of water in the vapor phase is %0.4f\"%(y_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Boiling pressure of the liquid at 85.3 deg C is 0.9991 atm\n",
+ " Mole fraction of ethanaol in vapor phase is 0.4741\n",
+ " Mole fraction of water in the vapor phase is 0.5259\n"
+ ]
+ }
+ ],
+ "prompt_number": 27
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.10 Page: 191\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Boiling temperature of the liquid at 1 atm pressure \n",
+ "Mole fraction of ethanaol in vapor phase \n",
+ "Mole fraction of water in the vapor phase\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# This problem is similar to the example 8.9 except that, we are provided pressure instead of temperature and different liquid composition\n",
+ "# Here again, we will denote ethanol as species 'a' and water as the species 'b'\n",
+ "x_a = 0.2608\n",
+ "x_b = (1-x_a)\n",
+ "P = 1.00 #[atm] Given boiling pressure\n",
+ "\n",
+ "# We have\n",
+ "# x_a + x_b = 1 and y_a + y_b = 1\n",
+ "\n",
+ "# The Antoine equation consmath.tants for ethanol from the table A.2(page 418) given in the book, are \n",
+ "A_a = 8.04494\n",
+ "B_a = 1554.3\n",
+ "C_a = 222.65\n",
+ "\n",
+ "# and that for water \n",
+ "A_b = 7.96681\n",
+ "B_b = 1668.21\n",
+ "C_b = 228.0\n",
+ "\n",
+ "# Thus vapor pressure of ethanol and water are respectively\n",
+ "# p_a = (1/760)*10**(A_a - B_a/(T+C_a))\n",
+ "# p_b = (1/760)*10**(A_b - B_b/(T+C_b))\n",
+ "# Adding these two equation, we get \n",
+ "# ( p_a + p_b ) = (1/760)*10**(A_a - B_a/(T+C_a)) + (1/760)*10**(A_b - B_b/(T+C_b))......................................(1)\n",
+ "\n",
+ "# Also the activity coefficients are given by\n",
+ "# Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2)) and\n",
+ "# Y_b = 10**((A**(2)*B*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "# here A and B are Van Laar coefficients and their values for ethanol-water system is reported in the book at page 186 (last two lines), so\n",
+ "A = 0.7292\n",
+ "B = 0.4104\n",
+ "\n",
+ "# Calculations\n",
+ "# hence\n",
+ "Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "Y_b = 10**((A**(2)*B*x_a**(2))/(A*x_a+B*x_b)**(2))\n",
+ "\n",
+ "# Now we will solve for T running the loop \n",
+ "# Let us assume the startup temperature\n",
+ "T = 80.\n",
+ "err = 1.\n",
+ "\n",
+ "while err > 10**(-3):\n",
+ " P_a = (10**(8.04494 - 1554.3/(222.65 + T)))/760\n",
+ " P_b = (10**(7.96681 - 1668.21/(228 + T)))/760\n",
+ " y_a = Y_a*P_a*x_a/P\n",
+ " y_b = Y_b*P_b*x_b/P\n",
+ " err = abs((y_a + y_b) - 1)\n",
+ " T = T + 0.01\n",
+ "\n",
+ "# Results\n",
+ "print \" Boiling temperature of the liquid at 1 atm pressure is %0.4f atm\"%(T)\n",
+ "print \" Mole fraction of ethanaol in vapor phase is \\t%0.4f\"%(y_a)\n",
+ "print \" Mole fraction of water in the vapor phase is \\t%0.4f\"%(y_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Boiling temperature of the liquid at 1 atm pressure is 82.0300 atm\n",
+ " Mole fraction of ethanaol in vapor phase is \t0.5680\n",
+ " Mole fraction of water in the vapor phase is \t0.4312\n"
+ ]
+ }
+ ],
+ "prompt_number": 28
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.11 Page: 192\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Boiling pressure of the liquid at 80.7 deg C\n",
+ "Mole fraction of ethanaol in liquid phase \n",
+ "Mole fraction of water in the liquid phase \n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# This problem is identical to that of the example 8.9 except difference in the boiling temperature and liquid composition\n",
+ "# Here we will again denote ethanol as species 'a' and water as the species 'b'\n",
+ "y_a = 0.6122\n",
+ "y_b = (1-y_a)\n",
+ "T = 80.7 #[C] Given boiling temperature\n",
+ "\n",
+ "# We have\n",
+ "# x_a + x_b = 1 and y_a + y_b = 1\n",
+ "\n",
+ "# The Antoine equation consmath.tants for ethanol from the table A.2(page 418) given in the book, are \n",
+ "A_a = 8.04494\n",
+ "B_a = 1554.3\n",
+ "C_a = 222.65\n",
+ "\n",
+ "# and that for water \n",
+ "A_b = 7.96681\n",
+ "B_b = 1668.21\n",
+ "C_b = 228.0\n",
+ "\n",
+ "# Calculations\n",
+ "# Thus vapor pressure of ethanol and water are respectively\n",
+ "p_a = (1./760)*10**(A_a - B_a/(T+C_a))\n",
+ "p_b = (1./760)*10**(A_b - B_b/(T+C_b))\n",
+ "\n",
+ "# Also the activity coefficients are given by\n",
+ "# Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2)) and\n",
+ "# Y_b = 10**((A**(2)*B*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "# here A and B are Van Laar coefficients and their values for ethanol-water system is reported in the book at page 186 (last two lines), so\n",
+ "A = 0.7292\n",
+ "B = 0.4104\n",
+ "\n",
+ "# Now taking into account of nonideality of the gaseous phase, the modified Raoult's law gives\n",
+ "# (y_a/x_a) = (Y_a*p_a)/P and (y_b/x_b) = (Y_b*p_b)/P \n",
+ "\n",
+ "# Now can take the help of trial and error method to solve the above equations\n",
+ "# In this method, we will assume the different values of P and will calculate the values of x_a and x_b from the above two equations, till their sum comes to unity\n",
+ "x_a = 0.6122 # Initial assumption of liquid phase composition of ethanol\n",
+ "x_b = 0.3 # Initial assumption of liquid phase composition water\n",
+ "P = 0.80 #[atm]\n",
+ "err = 1\n",
+ "\n",
+ "while err > 2* 10**(-2):\n",
+ " P = P + 0.01\n",
+ " Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ " Y_b = 10**((A**(2)*B*x_a**(2))/(A*x_a+B*x_b)**(2))\n",
+ "\n",
+ " err = abs((x_a + x_b) - 1)\n",
+ " x_a = y_a*P/(Y_a*p_a)\n",
+ " x_b = y_b*P/(Y_b*p_b)\n",
+ "\n",
+ "# Results\n",
+ "print \" Boiling pressure of the liquid at 80.7 deg C is %0.4f atm\"%(P)\n",
+ "print \" Mole fraction of ethanaol in liquid phase is %0.4f\"%(x_a)\n",
+ "print \" Mole fraction of water in the liquid phase is %0.4f\"%(x_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Boiling pressure of the liquid at 80.7 deg C is 0.9900 atm\n",
+ " Mole fraction of ethanaol in liquid phase is 0.3730\n",
+ " Mole fraction of water in the liquid phase is 0.6205\n"
+ ]
+ }
+ ],
+ "prompt_number": 29
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.12 Page: 193\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "Find\n",
+ "Equilibrium Temperature of the system\n",
+ "Mole fraction of ethanaol in liquid phase\n",
+ "Mole fraction of water in the liquid phase \n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# This problem is similar to the example 8.10 except that, we are provided vapour phase composition\n",
+ "# Here again, we will denote ethanol as species 'a' and water as the species 'b'\n",
+ "y_a = 0.1700\n",
+ "y_b = (1-y_a)\n",
+ "P = 1.00 #[atm] Given boiling pressure\n",
+ "\n",
+ "# We have\n",
+ "# x_a + x_b = 1 and y_a + y_b = 1\n",
+ "\n",
+ "# The Antoine equation consmath.tants for ethanol from the table A.2(page 418) given in the book, are \n",
+ "A_a = 8.04494\n",
+ "B_a = 1554.3\n",
+ "C_a = 222.65\n",
+ "\n",
+ "# and that for water \n",
+ "A_b = 7.96681\n",
+ "B_b = 1668.21\n",
+ "C_b = 228.0\n",
+ "\n",
+ "# Thus vapor pressure of ethanol and water are respectively\n",
+ "# p_a = (1/760)*10**(A_a - B_a/(T+C_a))\n",
+ "# p_b = (1/760)*10**(A_b - B_b/(T+C_b))\n",
+ "\n",
+ "# Also the activity coefficients are given by\n",
+ "# Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2)) and\n",
+ "# Y_b = 10**((A**(2)*B*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ "# here A and B are Van Laar coefficients and their values for ethanol-water system is reported in the book at page 186 (last two lines), so\n",
+ "A = 0.7292\n",
+ "B = 0.4104\n",
+ "\n",
+ "# Now taking into account of nonideality of the gaseous phase, the modified Raoult's law gives\n",
+ "# (y_a/x_a) = (Y_a*p_a)/P and (y_b/x_b) = (Y_b*p_b)/P \n",
+ "\n",
+ "# Now we can take the help of trial and error method to solve the above equations\n",
+ "# In this method, we will assume the different values of T and will calculate the values of x_a and x_b from the above two equations, till their sum comes to unity\n",
+ "\n",
+ "x_a = 0.0100 # Initial assumption of liquid phase composition of ethanol\n",
+ "x_b = 0.9 # Initial assumption of liquid phase composition water\n",
+ "T = 80. #[C] Initial guess of the temperature\n",
+ "err = 1\n",
+ "\n",
+ "# Calculations\n",
+ "while err > 1./16*10**(-2):\n",
+ " P_a = (10**(8.04494 - 1554.3/(222.65 + T)))/760\n",
+ " P_b = (10**(7.96681 - 1668.21/(228 + T)))/760\n",
+ " \n",
+ " Y_a = 10**((B**(2)*A*x_b**(2))/(A*x_a+B*x_b)**(2))\n",
+ " Y_b = 10**((A**(2)*B*x_a**(2))/(A*x_a+B*x_b)**(2))\n",
+ " \n",
+ " x_a = y_a*P/(Y_a*P_a)\n",
+ " x_b = y_b*P/(Y_b*P_b)\n",
+ "\n",
+ " err = abs((x_a + x_b) - 1)\n",
+ " T = T + 0.01\n",
+ "\n",
+ "\n",
+ "# Results\n",
+ "print \" Equilibrium Temperature of the system at pressure 1 atm is %0.4f atm\"%(T)\n",
+ "print \" Mole fraction of ethanaol in liquid phase is %0.4f\"%(x_a)\n",
+ "print \" Mole fraction of water in the liquid phase is %0.4f\"%(x_b)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Equilibrium Temperature of the system at pressure 1 atm is 95.3500 atm\n",
+ " Mole fraction of ethanaol in liquid phase is 0.0187\n",
+ " Mole fraction of water in the liquid phase is 0.9816\n"
+ ]
+ }
+ ],
+ "prompt_number": 30
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.13 Page: 194\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Mole fraction of the ethanol in the liquid phase in equilibrium\n",
+ "Mole fraction of the water in the liquid phase in equilibrium\n",
+ "Mole fraction of the ethanol in the vapour phase in equilibrium\n",
+ "Mole fraction of the water in the vapour phase in equilibrium\n",
+ "Vapor fraction of the given water-ethanol mixture after the flash\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# Here again, we will denote ethanol as species 'a' and water as the species 'b'\n",
+ "x_aF = 0.126\n",
+ "x_bF = (1-x_aF)\n",
+ "P = 1.00 #[atm] Given total pressure\n",
+ "T = 91.8 #[C]\n",
+ "\n",
+ "# Calculations\n",
+ "# We will go with graphical approach for solving this problem \n",
+ "# This problem requires T - x_a diagram at the given pressure i.e. 1 atm \n",
+ "# This diagram is provided on page 196( figure 8.19) in the book \n",
+ "# We will draw horizontal and vertical lines corresponding to the specified T and x_a. \n",
+ "# Drawing a horizontal line from temperature 91.8 degC and vertical line corresponding to the x_aF = 0.126, we see that these two intersect in the two phase region, which tells that our feed contains both liquid and vapour phase\n",
+ "# Now liquid phase composition in equilibrium is found by reading the x-axis where the bubble-point vs x_a curve and horizontal line corresponding to T = 91.8 degC intersect and viz.\n",
+ "x_a = 0.0401\n",
+ "x_b = (1 - x_a)\n",
+ "\n",
+ "# Similarily vapour phase composition in equilibrium is found by reading the x-axis where the dew-point vs y_a curve and horizontal line corresponding to T = 91.8 degC intersect and viz.\n",
+ "y_a = 0.2859\n",
+ "y_b = ( 1 - y_a)\n",
+ "\n",
+ "# Now vapour fraction is given by\n",
+ "V_by_F = ( x_aF - x_a )/(y_a - x_a)\n",
+ "\n",
+ "# Results\n",
+ "print \" Mole fraction of the ethanol in the liquid phase in equilibrium at the given condition is %f\"%(x_a)\n",
+ "print \" Mole fraction of the water in the liquid phase in equilibrium at the given condition is %f\"%(x_b)\n",
+ "print \" Mole fraction of the ethanol in the vapour phase in equilibrium at the given condition is %f\"%(y_a)\n",
+ "print \" Mole fraction of the water in the vapour phase in equilibrium at the given condition is %f\"%(y_b)\n",
+ "print \" Vapor fraction of the given water-ethanol mixture after the flash in equilibrium is %f\"%(V_by_F)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Mole fraction of the ethanol in the liquid phase in equilibrium at the given condition is 0.040100\n",
+ " Mole fraction of the water in the liquid phase in equilibrium at the given condition is 0.959900\n",
+ " Mole fraction of the ethanol in the vapour phase in equilibrium at the given condition is 0.285900\n",
+ " Mole fraction of the water in the vapour phase in equilibrium at the given condition is 0.714100\n",
+ " Vapor fraction of the given water-ethanol mixture after the flash in equilibrium is 0.349471\n"
+ ]
+ }
+ ],
+ "prompt_number": 31
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.14 Page: 198\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# Calculate the various assumed temperatures\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 100. #[psia]\n",
+ "# Composition in liquid phase is \n",
+ "x_a = 0.05 # Mole fraction of methane \n",
+ "x_b = 0.40 # Mole fraction of bumath.tane \n",
+ "x_c = 0.55 # mole fraction of penmath.tane\n",
+ "\n",
+ "# We have to take the help of the following equations\n",
+ "# ( x_a + x_b + x_c ) = 1 and ( y_a + y_b + y_c ) = 1\n",
+ "# ( y_a/x_a ) = K_a ( y_b/x_b ) = K_b and ( y_c/x_c ) = K_c\n",
+ "\n",
+ "# Calculations\n",
+ "# We draw a straight line across figure 8.20 from 100psia to different temperatures like 0,5,10,15,20,25,30 degF and read the three K factors \n",
+ "T = [[15.8 ,0.087, 0.024],[16,0.105, 0.026],[16.2, 0.115, 0.03],[16.8 ,0.13, 0.035],[17.2 ,0.15, 0.04],[17.8, 0.17, 0.045],[18.2, 0.175, 0.0472727]]\n",
+ "print \" Calculations for the various assumed temperatures are given in the table below\"\n",
+ "print \" Temperature \\t\\t y_a \\t\\t y_b \\t\\t\\t y_c \\t\\t\\t y \"\n",
+ "\n",
+ "T_b = 0 #[F] Bubble point\n",
+ "j=0\n",
+ "for i in range(7):\n",
+ " y_a = x_a*T[i][j]\n",
+ " y_b = x_b*T[i][j+1]\n",
+ " y_c = x_c*T[i][j+2]\n",
+ " y = y_a + y_b + y_c\n",
+ " T_b = T_b + 5\n",
+ " print \" %f \\t\\t %f \\t\\t %f \\t\\t %f \\t\\t %f \"%(T_b,y_a,y_b,y_c,y)\n",
+ "\n",
+ "# Results\n",
+ "print \" For the temperature 30 deg F the summation of the mole fractions in the vapor phase is close enough to unity so bubble point is 30 degF\"\n",
+ "print \" And compositions in the vapor phase are the values given in the above table corresonding to the temperature 30 deg F i.e.\"\n",
+ "print \" y_methane = %f y_bumath.tane = %f y_penmath.tane = %f\"%(y_a,y_b,y_c)\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Calculations for the various assumed temperatures are given in the table below\n",
+ " Temperature \t\t y_a \t\t y_b \t\t\t y_c \t\t\t y \n",
+ " 5.000000 \t\t 0.790000 \t\t 0.034800 \t\t 0.013200 \t\t 0.838000 \n",
+ " 10.000000 \t\t 0.800000 \t\t 0.042000 \t\t 0.014300 \t\t 0.856300 \n",
+ " 15.000000 \t\t 0.810000 \t\t 0.046000 \t\t 0.016500 \t\t 0.872500 \n",
+ " 20.000000 \t\t 0.840000 \t\t 0.052000 \t\t 0.019250 \t\t 0.911250 \n",
+ " 25.000000 \t\t 0.860000 \t\t 0.060000 \t\t 0.022000 \t\t 0.942000 \n",
+ " 30.000000 \t\t 0.890000 \t\t 0.068000 \t\t 0.024750 \t\t 0.982750 \n",
+ " 35.000000 \t\t 0.910000 \t\t 0.070000 \t\t 0.026000 \t\t 1.006000 \n",
+ " For the temperature 30 deg F the summation of the mole fractions in the vapor phase is close enough to unity so bubble point is 30 degF\n",
+ " And compositions in the vapor phase are the values given in the above table corresonding to the temperature 30 deg F i.e.\n",
+ " y_methane = 0.910000 y_bumath.tane = 0.070000 y_penmath.tane = 0.026000\n"
+ ]
+ }
+ ],
+ "prompt_number": 32
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.15 Page: 199\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Vapour pressure\n",
+ "The temperature\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "n_sugar = 1. #[mol]\n",
+ "n_water = 1000/18. #[mol]\n",
+ "x_sugar = n_sugar/(n_sugar+n_water)\n",
+ "x_water = n_water/(n_sugar+n_water)\n",
+ "# At 100C we have \n",
+ "p_water = 1. #[atm]\n",
+ "p_sugar = 0. #[atm]\n",
+ "# and the relation\n",
+ "\n",
+ "# Calculations\n",
+ "P = x_water*p_water+x_sugar*p_sugar #[atm]\n",
+ "# The situation is sketched in the figure 8.21 in the book[page 199].\n",
+ "# Now for the second part of the question\n",
+ "# To find the temperature at which the solution will boil, we see on the figure that we must raise the temperature to increase p_i to a value high enough that the total pressure P_1 = 1atm, with x_water calculated above.\n",
+ "P_1 = 1. #[atm]\n",
+ "p_water = P_1/x_water #[atm]\n",
+ "# Interpolating in the steam table[12] reported in the book, we find \n",
+ "T = 100.51 #[C]\n",
+ "# We may restate this that the boiling-point elevation caused by this dissolved, nonvolatile solute is\n",
+ "T_eb = T-100 #[C]\n",
+ "\n",
+ "# Results\n",
+ "print \"Vapour pressure of this solution at the 100C is %.3f atm\"%(P)\n",
+ "print \"The temperature at which this solution will boil at 1 atm is %.2f C\"%(T)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Vapour pressure of this solution at the 100C is 0.982 atm\n",
+ "The temperature at which this solution will boil at 1 atm is 100.51 C\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 8.16 Page: 201\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find Freezing-point temperature\n",
+ "\n",
+ "from scipy.optimize import fsolve \n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "n_sugar = 1. #[mol]\n",
+ "n_water = 1000/18. #[mol]\n",
+ "x_sugar = n_sugar/(n_sugar+n_water)\n",
+ "x_water = n_water/(n_sugar+n_water)\n",
+ "\n",
+ "# Here we can assert that for liquid solution and solid ice to be in equilibrium, the fugacity of water in the liquid must be same as that of water in the solid ice. \n",
+ "# Crystalline solid formed from such a solution is nearly pure H2O, with no dissolved sugar.\n",
+ "# At the low pressures involved here, these fugacities are practically equal to partial pressures, so that \n",
+ "#P = x_water*p_water+x_sugar*p_sugar = p_ice\n",
+ "\n",
+ "# but\n",
+ "p_sugar = 0\n",
+ "# so\n",
+ "p_ice_by_p_water = x_water\n",
+ "\n",
+ "# Figure 5.8 reported in the book (page 100) shows the vapour pressure of subcooled water and of ice. \n",
+ "#The values in the given table from which that figure were made can be represented by the following totally empirical data-fitting equation.\n",
+ "# p_ice/p_water = 1+0.0096686*T+4.0176*10**(-5)*T**(2)\n",
+ "# We eliminate p_ice/p_water by x_water \n",
+ "\n",
+ "# Calculations\n",
+ "def f(T): \n",
+ "\t return 1+0.0096686*T+4.0176*10**(-5)*T**(2)-p_ice_by_p_water\n",
+ "T = fsolve(f,0)\n",
+ "\n",
+ "# Results\n",
+ "print \"Freezing-point temperature of the given solution is %f C\"%(T)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Freezing-point temperature of the given solution is -1.842891 C\n"
+ ]
+ }
+ ],
+ "prompt_number": 34
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch9.ipynb b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch9.ipynb
new file mode 100644
index 00000000..1e6bece8
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/ch9.ipynb
@@ -0,0 +1,691 @@
+{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 9 : Correlating And Predicting Nonideal VLE"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.1 Page: 219"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Value of the liquid-phase activity coefficient\n",
+ "And value of the liquid-phase activity coefficient\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "x_isopropanol = 0.4720\n",
+ "x_water = 0.5280\n",
+ "# From the table A.7 (page 427) reported in the book the Van Laar coefficients for isopropanol-water system at 1atm are given by\n",
+ "A = 1.0728\n",
+ "B = 0.4750\n",
+ "\n",
+ "# Calculations\n",
+ "# Van Laar equations are given \n",
+ "# math.log10(Y_a) = A*x_b**(2)/(A/B*x_a+x_b)**(2)\n",
+ "# math.log10(Y_b) = B*x_a**(2)/(B/A*x_b+x_a)**(2)\n",
+ "# We calculate Y_isopropanol and Y_water as\n",
+ "Y_isopropanol = 10**(A*x_water**(2)/(A/B*x_isopropanol+x_water)**(2))\n",
+ "Y_water = 10**(B*x_isopropanol**(2)/(B/A*x_water+x_isopropanol)**(2))\n",
+ "\n",
+ "# Results\n",
+ "print \" Value of the liquid-phase activity coefficient for isopropanol is %f\"%(Y_isopropanol)\n",
+ "print \" And value of the liquid-phase activity coefficient for water is %f\"%(Y_water)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Value of the liquid-phase activity coefficient for isopropanol is 1.311310\n",
+ " And value of the liquid-phase activity coefficient for water is 1.630951\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.2 Page: 221\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The value of g_E/RT for acetone-water solution \n",
+ "The value of g_E/RT)/x_a*x_b) for acetone-water\n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# Recieving the VLE data from the example 8.2, we have\n",
+ "x_acetone = 0.05\n",
+ "x_water = 0.95\n",
+ "# And the activity coefficient is given by\n",
+ "y_acetone = 7.04\n",
+ "y_water = 1.01\n",
+ "# we hve the relation g_E/RT = summation(x_i*math.log(y_i))\n",
+ "# let C = g_E/RT , so\n",
+ "\n",
+ "# Calculations\n",
+ "C = (x_acetone*math.log(y_acetone)+x_water*math.log(y_water))\n",
+ "# Now let M = (g_E/RT )/(x_acetone*x_water)\n",
+ "# So\n",
+ "M = C/(x_acetone*x_water)\n",
+ "\n",
+ "# Results\n",
+ "print \"The value of g_E/RT for acetone-water solution at 1 atm pressure is %f\"%(C)\n",
+ "print \"The value of g_E/RT)/x_a*x_b) for acetone-water solution at 1 atm pressure is %f\"%(M)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The value of g_E/RT for acetone-water solution at 1 atm pressure is 0.107033\n",
+ "The value of g_E/RT)/x_a*x_b) for acetone-water solution at 1 atm pressure is 2.253331\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.5 Page: 224\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# calculate Values of the constants in Morgules equation for acetone-water\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "y_acetone_infinity = 10.\n",
+ "y_water_infinty = 5.\n",
+ "Pressure = 1. #[atm]\n",
+ "\n",
+ "# Calculations\n",
+ "# From equation 9.L and 9.M (page 224) as reported in the book, we have \n",
+ "# Constants in morgules equation b and c as\n",
+ "b = math.log(y_acetone_infinity)\n",
+ "c = math.log(y_water_infinty)\n",
+ "\n",
+ "# Results\n",
+ "print \"Values of the consmath.tants in Morgules equation for acetone-water at 1 atm are b = %f\"%(b)\n",
+ "print \" and c = %f\"%(c)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Values of the consmath.tants in Morgules equation for acetone-water at 1 atm are b = 2.302585\n",
+ " and c = 1.609438\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.6 Page: 225\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The activity coefficient of ethanol\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P_1 = 10. #[atm]\n",
+ "x_a_1 = 0.1238 # mole fraction of ethanol at 10 atm pressure\n",
+ "Temp = 273.15+85.3 # [K]\n",
+ "R = 0.08206 #[(L*atm)/(mol*K)]\n",
+ "P_0 = 1. #[atm]\n",
+ "# so\n",
+ "delta_P = (P_1-P_0) #[atm]\n",
+ "# Molecular weight of ethanol and water are respectively\n",
+ "M_ethanol = 46. #[g/mol]\n",
+ "M_water = 18. #[g/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Now changing the mol fraction of ethanol in the wt fraction \n",
+ "m_a_1 = x_a_1*M_ethanol/(x_a_1*M_ethanol+(1-x_a_1)*M_water)\n",
+ "# From example 8.9(page 188) we know that at this T and 1 atm and x_a_0, activity coefficient for ethanol \n",
+ "y_ethanol_0 = 2.9235\n",
+ "# Now from figure 6.15(page 129), we read that at 20C and m_a_1 mass fraction ethanol ,\n",
+ "v_ethanol_1 = 1.16 #[cm**(3)/g]\n",
+ "# Similarily for mass fraction corresponding to mole fraction x_a_1 \n",
+ "v_ethanol_0 = 1.27 #[cm**(3)/]\n",
+ "# Difference of thes etwo values is \n",
+ "v = v_ethanol_1-v_ethanol_0 #[cm**(3)/g]\n",
+ "v = v*46. #[L/g]\n",
+ "# If we assume that this value is more or less independent of temperature, we can use it as the corresponding value at 85.3C, and compute \n",
+ "# From equation 7.31(page 225)\n",
+ "# d(math.log(y_i))/dP = (v_1-v_0)/(R*T) at consmath.tant temperature and mole fraction \n",
+ "# Let d(math.log(y_i))/dP = C, then\n",
+ "C = (v_ethanol_1-v_ethanol_0)/(R*Temp)\n",
+ "\n",
+ "# Also we can have \n",
+ "# delta_math.log(y_i) = (d(math.log(y_i))/dP)*delta_P\n",
+ "# or \n",
+ "# delta_math.log(y_i) = C*delta_P\n",
+ "# and delta_math.log(y_i) = math.log(y_ehmath.tanol_1)-math.log(y_ethanol_0)\n",
+ "# So\n",
+ "y_ethanol_1 = math.exp(math.log(y_ethanol_0)+C*delta_P)\n",
+ "\n",
+ "# Results\n",
+ "print \"The activity coefficient of ethanol in the solution at 10 atm pressure is %f\"%(y_ethanol_1)\n",
+ "\n",
+ "# Note : Answer is different because of rouding error. Please calculate manually.\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The activity coefficient of ethanol in the solution at 10 atm pressure is 2.826741\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.7 Page: 226\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The activity coefficient of ethanol\n",
+ "\n",
+ "import math \n",
+ "from scipy.integrate import quad \n",
+ "\n",
+ "# Variables\n",
+ "x_ethanol = 0.1238\n",
+ "Temp_1 = 273.15+85.3 #[K]\n",
+ "P = 1. #[atm]\n",
+ "Temp_2 = 273.15+70 #[K]\n",
+ "R = 8.314 #[j/(mol*K)]\n",
+ "# From example 8.9, at temperature 85.3C the activity coefficient is \n",
+ "y_ethanol_1 = 2.9235\n",
+ "# From figure 9.5[4] (page 227) as reported in the book, we read the value of (h_i_average-h_i_0) at temperatures 90C and 70C for ethanol.\n",
+ "# which are respectively\n",
+ "delta_h_2 = 0.2 #[kJ/mol]\n",
+ "delta_h_1 = 1.0 #[kJ/mol]\n",
+ "\n",
+ "# Calculations\n",
+ "# Taking the average of these two values we have \n",
+ "delta_h_average = (delta_h_1+delta_h_1)/2*1000. #[J/mol]\n",
+ "# From the equation 7.32 (page 225) reported in the book \n",
+ "# d(math.log(y_i))/dT = (h_i_average-h_i_0)/(R*T**(2)) at consmath.tant pressure and mole fraction\n",
+ "# So\n",
+ "# it can be taken approximately as \n",
+ "# So\n",
+ "\n",
+ "def f7(T): \n",
+ "\t return (1/T**(2))\n",
+ "\n",
+ "y_ethanol_2 = y_ethanol_1*math.exp((delta_h_average/R)* (quad(f7,Temp_1,Temp_2))[0])\n",
+ "\n",
+ "# Results\n",
+ "print \"The activity coefficient for ethanol in the solution at 70 deg C and 1 atm is %f\"%(y_ethanol_2)\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The activity coefficient for ethanol in the solution at 70 deg C and 1 atm is 2.880086\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.8 Page: 229\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find activity coefficient of acetone\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "# In this solution we will give the identity to the three species as\n",
+ "# a- Acetone \n",
+ "# b- Methanol\n",
+ "# c- Water\n",
+ "# Given\n",
+ "x_a = 0.1200\n",
+ "x_b = 0.1280\n",
+ "x_c = 0.7520\n",
+ "Temp = 66.70 #[C]\n",
+ "P = 1. #[atm] pressure\n",
+ "# As reported in the book that from [5] we get the following values \n",
+ "# acetone-methanol(a-b)\n",
+ "A_ab = 0.2634\n",
+ "A_ba = 0.2798\n",
+ "# acetone-water(a-c)\n",
+ "A_ac = 0.9709\n",
+ "A_ca = 0.5579\n",
+ "# methanol-water(b-c)\n",
+ "A_bc = 0.3794\n",
+ "A_cb = 0.2211\n",
+ "\n",
+ "# Calculations\n",
+ "# Now consider the equation 9.10 (page 228) \n",
+ "# The first term on the right of the equation is\n",
+ "T_1 = round(x_b**(2)*(A_ab+2*x_a*(A_ba-A_ab)),5)\n",
+ "# similarily the second and third terms are given respectively as \n",
+ "T_2 = round(x_c**(2)*(A_ac+2*x_a*(A_ca-A_ac)),3)\n",
+ "T_3 = 0.0550 #x_b*x_c*(0.5*(A_ba+A_ab+A_ac-A_bc-A_cb)+x_a*(A_bc-A_ab+A_ca-A_ac)+(x_b-x_c)*(A_bc-A_cb)-(1-2*x_a)*0.00)\n",
+ "# thus whole term on the right hand side is\n",
+ "T = T_1+T_2+T_3\n",
+ "# So \n",
+ "y_a = 10**(T)\n",
+ "# for this temperature vapour pressure of the acetone is calculated as \n",
+ "p_acetone = 1.417 #[atm]\n",
+ "# So that we estimate\n",
+ "y_acetone = x_a*y_a*p_acetone\n",
+ "\n",
+ "# Results\n",
+ "print \" yacetone : %.3f\"%y_acetone\n",
+ "print \"The activity coefficient of acetone in the given mixture is %f\"%(y_a)\n",
+ "# The experimental value is y_acetone = 0.698\n",
+ "\n",
+ "# Answer is different because of rounding error."
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " yacetone : 0.607\n",
+ "The activity coefficient of acetone in the given mixture is 3.567632\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.9 Page: 234\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 85.3+273.15 #[K] Temperature\n",
+ "P = 1. #[atm] Pressure of the mixture\n",
+ "R = 8.314 #[(Pa*m(3)/(K*mol))]\n",
+ "R_1 = 0.08206 #[(L*atm)/(mol*K)]\n",
+ "y_i = 0.1238 # mole fraction of the ethanol in the vapor phase\n",
+ "y_j = (1-y_i) # mole fraction of the water vapor in the vapor phase\n",
+ "\n",
+ "# From the table A.1( table 417), the properties of water and ethanol are given as \n",
+ "# Critical temperatures are \n",
+ "T_c_ii = 513.9 #[K] Critical temperature of the ethanol\n",
+ "T_c_jj = 647.1 #[K] Criatical temperature of water\n",
+ "\n",
+ "# Critical pressure are \n",
+ "P_c_ii = 61.48 #[bar] Critical pressure of ethanol \n",
+ "P_c_jj = 220.55 #[bar] Critical pressure of water\n",
+ "\n",
+ "# A# Resultsentric factor\n",
+ "w_ii = 0.645 # accentric factor of the ethanol \n",
+ "w_jj = 0.345 # accentric factor of the water\n",
+ "\n",
+ "# Compressibility factor are\n",
+ "z_c_ii = 0.24 # compressibility factor of ethanol\n",
+ "z_c_jj = 0.229 # compressibility factor of the water\n",
+ "\n",
+ "# Calculations\n",
+ "# Critical volume are given by \n",
+ "V_c_ii = z_c_ii*R*T_c_ii/(P_c_ii*100000)*10**(6) # critical volume the ethanol\n",
+ "V_c_jj = z_c_jj*R*T_c_jj/(P_c_jj*100000)*10**(6) # critical volume the ethanol\n",
+ "\n",
+ "# Now\n",
+ "# for k_ij = 0.0\n",
+ "T_c_ij_0 = (T_c_ii*T_c_jj)**(1./2) #[K]\n",
+ "w_ij = (w_ii + w_jj)/2.\n",
+ "z_c_ij = (z_c_ii + z_c_jj)/2.\n",
+ "V_c_ij = ( (V_c_ii**(1./3) + V_c_jj**(1./3))/2.)**(3)\n",
+ "P_c_ij_0 = (z_c_ij*R*T_c_ij_0)/(V_c_ij/10.**(6.))/10.**(5) #[bar]\n",
+ "\n",
+ "# again for k_ij = 0.01\n",
+ "T_c_ij_1 = (T_c_ii*T_c_jj)**(1./2.)*(1-0.01) #[K]\n",
+ "P_c_ij_1 = (z_c_ij*R*T_c_ij_1)/(V_c_ij/10.**(6))/10**(5) #[bar]\n",
+ "\n",
+ "# Now \n",
+ "T_r_ii = T/T_c_ii\n",
+ "T_r_jj = T/T_c_jj\n",
+ "T_r_ij_0 = T/T_c_ij_0\n",
+ "T_r_ij_1 = T/T_c_ij_1\n",
+ "\n",
+ "# and\n",
+ "P_r_ii = P/P_c_ii\n",
+ "P_r_jj = P/P_c_jj\n",
+ "P_r_ij_0 = P/P_c_ij_0\n",
+ "P_r_ij_1 = P/P_c_ij_1\n",
+ "\n",
+ "# Now we will calculate f(T_r) for each component and mixture\n",
+ "f_Tr_ii = ( 0.083 - 0.422/T_r_ii**(1.6) ) + w_ii*( 0.139 - 0.172/T_r_ii**(4.2))\n",
+ "f_Tr_jj = ( 0.083 - 0.422/T_r_jj**(1.6) ) + w_jj*( 0.139 - 0.172/T_r_jj**(4.2))\n",
+ "f_Tr_ij0 = ( 0.083 - 0.422/T_r_ij_0**(1.6) ) + w_ij*( 0.139 - 0.172/T_r_ij_0**(4.2))\n",
+ "f_Tr_ij1 = ( 0.083 - 0.422/T_r_ij_1**(1.6) ) + w_ij*( 0.139 - 0.172/T_r_ij_1**(4.2))\n",
+ "\n",
+ "# Let us define A = (P_r*f(T_r)/T_r) , so\n",
+ "A_ii = P_r_ii*f_Tr_ii/T_r_ii\n",
+ "A_jj = P_r_jj*f_Tr_jj/T_r_jj\n",
+ "\n",
+ "# We are given\n",
+ "v_ii = 0.975\n",
+ "v_jj = 0.986\n",
+ "\n",
+ "# Now,\n",
+ "B_ii = ( f_Tr_ii*R*T_c_ii/P_c_ii)*(10.**(3)/10**(5)) #[L/mol]\n",
+ "B_jj = ( f_Tr_jj*R*T_c_jj/P_c_jj)*(10.**(3)/10**(5)) #[L/mol]\n",
+ "B_ij0 = ( f_Tr_ij0*R*T_c_ij_0/P_c_ij_0)*(10.**(3)/10**(5)) #[L/mol]\n",
+ "B_ij1 = ( f_Tr_ij1*R*T_c_ij_1/P_c_ij_1)*(10.**(3)/10**(5)) #[L/mol]\n",
+ "\n",
+ "# now we will calculate 'delta'\n",
+ "delta_ij0 = 2*B_ij0 - B_ii - B_jj #[L/mol]\n",
+ "delta_ij1 = 2*B_ij1 - B_ii - B_jj #[L/mol]\n",
+ "\n",
+ "# We have \n",
+ "# b_a = B_aa + y_b**(2)*delta and b_b = B_bb + y_a**(2)*delta\n",
+ "# so,\n",
+ "b_ethanol0 = B_ii + y_j**(2)*delta_ij0 #[L/mol]\n",
+ "b_water0 = B_jj + y_i**(2)*delta_ij0 #[L/mol]\n",
+ "b_ethanol1 = B_ii + y_j**(2)*delta_ij1 #[L/mol]\n",
+ "b_water1 = B_jj + y_i**(2)*delta_ij1 #[L/mol]\n",
+ "\n",
+ "# Now \n",
+ "# phi_i = exp(b_i*P/(R*T))\n",
+ "# So,\n",
+ "phi_ethanol0 = math.exp((b_ethanol0*P)/(R_1*T))\n",
+ "phi_water0 = math.exp((b_water0*P)/(R_1*T))\n",
+ "phi_ethanol1 = math.exp((b_ethanol1*P)/(R_1*T))\n",
+ "phi_water1 = math.exp((b_water1*P)/(R_1*T))\n",
+ "\n",
+ "# and\n",
+ "# Y_i = phi_i/v_i\n",
+ "# So,\n",
+ "Y_ethanol0 = phi_ethanol0/v_ii\n",
+ "Y_water0 = phi_water0/v_jj\n",
+ "Y_ethanol1 = phi_ethanol1/v_ii\n",
+ "Y_water1 = phi_water1/v_jj\n",
+ "\n",
+ "# Results\n",
+ "print \" The results are summarize in the following table\"\n",
+ "print \" Property \\t\\t\\t Mix ij Assuming k_ij = 0.0 \\t\\t\\t Mix ij Assuming k_ij = 0.01\"\n",
+ "print \" phi_ethanol \\t\\t\\t\\t %f \\t\\t\\t\\t\\t %f \"%(phi_ethanol0,phi_ethanol1)\n",
+ "print \" phi_water \\t\\t\\t\\t %f \\t\\t\\t\\t\\t %f \"%(phi_water0,phi_water1)\n",
+ "print \" Y_ethanol \\t\\t\\t\\t %f \\t\\t\\t\\t\\t %f \"%(Y_ethanol0,Y_ethanol1)\n",
+ "print \" Y_water \\t\\t\\t\\t %f \\t\\t\\t\\t\\t %f \"%(Y_water0,Y_water1)\n",
+ "print \" Value of ''v'' for ethanol is %f\"%(v_ii)\n",
+ "print \" Value of ''v'' water is %f\"%(v_jj)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The results are summarize in the following table\n",
+ " Property \t\t\t Mix ij Assuming k_ij = 0.0 \t\t\t Mix ij Assuming k_ij = 0.01\n",
+ " phi_ethanol \t\t\t\t 0.973881 \t\t\t\t\t 0.974768 \n",
+ " phi_water \t\t\t\t 0.986276 \t\t\t\t\t 0.986294 \n",
+ " Y_ethanol \t\t\t\t 0.998852 \t\t\t\t\t 0.999762 \n",
+ " Y_water \t\t\t\t 1.000280 \t\t\t\t\t 1.000298 \n",
+ " Value of ''v'' for ethanol is 0.975000\n",
+ " Value of ''v'' water is 0.986000\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.10 Page: 239\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "The infinite dilution activity coefficient of n-Hexane\n",
+ "The infinite dilution activity coefficient of diethlyketone\n",
+ "'''\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "T = 65+273.15 #[K] Temperature\n",
+ "R = 8.314 #[(m**(3)*Pa)/(mol*K)] Universal gas consmath.tant \n",
+ "# From the table 9.C ( page 239 ) given in the book the molar volumes and solubility of n-hexane and diethylketone at 25 deg C are given as \n",
+ "v_hex = 131.6 #[ml/mol] Molar volume of n-Hexane\n",
+ "v_dketone = 106.4 #[ml/mol] Molar volume of diethylketone\n",
+ "s_hex = 14.9 #[MPa**(0.5)] Solubility of n-Hexane\n",
+ "s_dketone = 18.1 #[MPa**(0.5)] Solubility of diethylketone\n",
+ "\n",
+ "# Calculations\n",
+ "# Here we will use these values with the assumption that Y_i,65C = Y_i,25C\n",
+ "# At infinite dilution, the volume fraction of the other species is 1.00, so, \n",
+ "# math.logY_a = v_a*phi_b**(2)*(delta_a - delta_b)**(2)/(R*T)\n",
+ "# so, for n-Hexane\n",
+ "Y_hex = math.exp(v_hex*1**(2)*(s_hex - s_dketone)**(2)/(R*T))\n",
+ "# And that for diethylketone\n",
+ "Y_dketone = math.exp(v_dketone*1**(2)*( s_dketone - s_hex )**(2)/(R*T))\n",
+ "\n",
+ "# Results\n",
+ "print \" The infinite dilution activity coefficient of n-Hexane is %f\"%(Y_hex)\n",
+ "print \" The infinite dilution activity coefficient of diethlyketone is %f\"%(Y_dketone)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The infinite dilution activity coefficient of n-Hexane is 1.614995\n",
+ " The infinite dilution activity coefficient of diethlyketone is 1.473359\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.11 Page: 243\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "find\n",
+ "Henry's law constant for O2\n",
+ "solubility of O2 \n",
+ "'''\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "P = 1. #[atm]\n",
+ "T = 25. #[C]\n",
+ "y_i = 1.00 # amount of the oxygen in the vapour \n",
+ "# Umath.sing the consmath.tants for O2 in table A.2 \n",
+ "A = 6.69147\n",
+ "B = 319.0117\n",
+ "C = 266.7\n",
+ "\n",
+ "# Calculations\n",
+ "# By Antoine equation \n",
+ "# log10(P_i) = A-B/(T+C)\n",
+ "P_i = 10**(A-B/(T+C)) #[mmHg]\n",
+ "P_i = P_i/760. #[atm]\n",
+ "# This is extrapolated vapour pressure of O2 at 25C\n",
+ "# We will take this value as equal to the Henry's law consmath.tant\n",
+ "H_i = P_i\n",
+ "x_i = y_i*P/H_i\n",
+ "\n",
+ "# Results\n",
+ "print \" Henry's law constant for O2 is %f atm\"%(P_i)\n",
+ "print \" solubility of O2 is %e\"%(x_i)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " Henry's law constant for O2 is 521.227107 atm\n",
+ " solubility of O2 is 1.918549e-03\n"
+ ]
+ }
+ ],
+ "prompt_number": 24
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ " Example 9.12 Page: 244\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "# find The activity coefficient of the oxygen\n",
+ "\n",
+ "import math \n",
+ "\n",
+ "# Variables\n",
+ "y_a = 1.00\n",
+ "P = 1.00 #[atm]\n",
+ "x_a = 0.231*10**(-4)\n",
+ "# Using the constants for O2 in table A.2 in the Antoine equation , we find the vapour pressure of the oxygen at 25C viz.\n",
+ "p_a = 521.15 #[atm]\n",
+ "# Thus activity coefficient is calculated by rewriting the equation 8.6 and umath.sing the above values \n",
+ "\n",
+ "# Calculations\n",
+ "Y_O2 = (y_a*P)/(x_a*p_a)\n",
+ "\n",
+ "# Results\n",
+ "print \"The activity coefficient of the oxygen in the water is %f\"%(Y_O2)\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The activity coefficient of the oxygen in the water is 83.066379\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic111.png b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic111.png
new file mode 100644
index 00000000..f6781e82
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic111.png
Binary files differ
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic222.png b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic222.png
new file mode 100644
index 00000000..b13b4e55
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic222.png
Binary files differ
diff --git a/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic333.png b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic333.png
new file mode 100644
index 00000000..46a7d555
--- /dev/null
+++ b/Physical_And_Chemical_Equilibrium_For_Chemical_Engineers/screenshots/pic333.png
Binary files differ