# Chapter 10: Stage and Contineous Gas-Liquid Seaparation Procesess¶

## Example 10.2-1 Page Number 587¶

In [1]:
#Dissolved Oxygen Concentration in Water

#Variable Declaration
H = 4.38e4                   #Henry's law constant atm/mol fraction
yO2 = 0.21                   #mol fraction

#Calculations
#y = Hx
xO2 = yO2/H

#Results
print 'Mol fraction of oxygen in water, xA: %5.3e'%xO2

Mol fraction of oxygen in water, xA: 4.795e-06


## Example 10.3-1 Page Number 589¶

In [2]:
#Equilibrium Stage Contact for CO2-Air-Water
from scipy.optimize import root

#Variable Declaration
P = 1.            #Absolute pressure of gas mixture (atm)
yA2 = 0.2         #Mole fraction of CO2
Vm = 100.         #Feed inlet
Lm = 300.         #Flowarte of liquid entering (kg mol water/hr)
xC0 = 1.
xB0 = 0.
xA0 = 0
H = 0.142e4       #Henry's law constant from appendix A.3 in atm/mol frac

#Calculations
Lmd = Lm
Vmd = (1-yA2)*Vm
Hd = H/P
#Lmd*xA0/(1-xA0) + Vmd*yA2/(1-yA2) = Lmd*xA1/(1-xA1) + Vmd*yA1/(1-yA1)
#yA1 = Hd* xA1
RHS = (Vmd*yA2)/(1-yA2)
f = lambda xA1: Lmd*xA1/(1-xA1) + Vmd*Hd*xA1/(1-Hd*xA1)-Vmd*yA2/(1-yA2)
sol = root(f, 0.0001)
xA1 = sol.x[0]
#Results
yA1 = Hd*xA1
L1 = Lmd/(1-xA1)
V1 = Vmd/(1-yA1)

print 'Outlet liquid and vapor phase compositions are xA1: %5.2e and yA1: %4.2f'%(xA1,yA1)
print 'Liquid and vapor rates from colums are L1:%4.1f kgmol/h V1: %4.1f kgmol/h respectively'%(L1,V1)

Outlet liquid and vapor phase compositions are  xA1: 1.41e-04 and yA1: 0.20
Liquid and vapor rates from colums are L1:300.0 V1: 100.0 respectively


## Example 10.3-2 Page Number 591¶

In [14]:
#Absorption of Acetone in a Countercurrent Stage Tower
import numpy as np
import matplotlib.pyplot as plt

#Variable Declaration
VN1 = 30.       #Inlet Gas Flow Rate, kg mol/hr
L0 = 90.        #Inlet Liquid Flow Rate, kg mol/hr
xA0 = 0.0       #Mole fraction of Acetone in entering Water
yAN1 = 0.01     #Mole fraction of Acetone in entering Air
AAAds = 90.     #Percent of acetone absorbed
H = 2.53

#Calculations
# moles of acetone entering

AVi = yAN1*VN1
Ai = (1-yAN1)*VN1
V1 = AVo + Ai
yA1 = AVo/Ai
LN = L0 + ALo
xAN = ALo/LN

y = np.arange(0,0.012,0.0005)
x = y/H

plt.plot(x,y)
plt.text(.0035, .007, r'Equilibrium Curve')
plt.text(.001, .009, r'Operating Line')
plt.plot(xAN,yAN1,'ro')
plt.annotate('$(x_{AN},y_{AN+1})$', xy=(xAN,yAN1), xytext=(xAN,yAN1))
plt.plot(xA0,yA1,'ro')
plt.annotate('$(x_{A0},y_{A1})$', xy=(xA0,yA1), xytext=(xA0,yA1+0.001))

m = (yAN1-yA1)/(xAN-xA0)

def ypos(xop):
return m*xop + yA1

def xpos(yop):
return yop/H

yy = m*x + yA1
plt.plot(x,yy,'r-')
plt.xlabel('Mole fraction of acetone in water, $x_A$')
plt.ylabel('Mole fraction of acetone in air, $y_A$')
plt.plot([xAN,xAN],[0.0,yAN1],'b--')
plt.plot([0.0,xAN],[yAN1,yAN1],'b--')
x1 = xA0
y1 = yA1
n = 0
while x1 <= xAN:
x2 = xpos(y1)
y2 = y1
if x2 > xAN:
plot([x1,x2], [y1,y2], 'k-', lw=1)  #Draw Horizontal line to equilibrium curve
dxt = x2-x1
dx = xAN-x1
dxbydxt = dx/dxt
n = n + dxbydxt
break
plt.text(x2, y2-0.0007, str(n+1))
plot([x1,x2], [y1,y2], 'k-', lw=1)      #Draw Horizontal line to equilibrium curve
x1 = x2
y1 = y2
y2 = ypos(x1)
plot([x1, x2], [y1, y2], 'k-', lw=1)    #Draw a vertical line to operating line
n = n+1
x1 = x2
y1 = y2

print "Acetone laden air rate from the absorber:",V1, "kgmol air/hr"
print "Acetone concentration in leaving stream", round(yA1,6)
print "Acetone + Water rate from the absorber:", LN, "kmol/hr"
print "Acetone concentrqtion in liquid leaving absorber:",round(xAN,5)
print "Amount of acetone etering with air", round(AVi,4),"kmol acetone/hr"
print "Amount of air entering ", round(Ai,4), " kgmol air/hr"
print "Amount of acetone leaving with treated air", round(AVo,4), "kgmol/hr"
print "Amount of acetone leaving with Water", round(ALo,4), "kgmol/hr"
print "Number of Stages:", round(n,1)

Acetone laden air rate from the absorber: 29.73 kgmol air/hr
Acetone concentration in leaving stream 0.00101
Acetone + Water rate from the absorber: 90.27 kmol/hr
Acetone concentrqtion in liquid leaving absorber: 0.00299
Amount of acetone etering with air 0.3 kmol acetone/hr
Amount of air entering  29.7  kgmol air/hr
Amount of acetone leaving with treated air 0.03 kgmol/hr
Amount of acetone leaving with Water 0.27 kgmol/hr
Number of Stages:  5.1


## Example 10.3-3 Page Number 593¶

In [7]:
#Number of Stages by Analytical Equation

import numpy as np

#Variable Declaration
VN1 = 30.       #Inlet Gas Flow Rate, kg mol/hr
L0 = 90.        #Inlet Liquid Flow Rate, kg mol/hr
xA0 = 0.0       #Mole fraction of Acetone in entering Water
yAN1 = 0.01     #Mole fraction of Acetone in entering Air
AAAds = 90.     #Percent of acetone absorbed
m = 2.53

#Calculations
# moles of acetone entering
AVi = yAN1*VN1
Ai = (1-yAN1)*VN1
V1 = AVo + Ai
yA1 = AVo/Ai
LN = L0 + ALo
xAN = ALo/LN

A1 = L0/(m*V1)
AN = LN/(m*VN1)
Agm = sqrt(A1*AN)

N = log((yAN1-m*xA0)/(yA1-m*xA0)*(1-1/Agm)+1/Agm)/log(Agm)

#Results
print "Geometric mean Absorption Factor:", round(Agm,3)
print "Number of stages required for separation:", round(N,2)

Geometric mean Absorption Factor: 1.193
Number of stages required for separation: 5.05


## Example 10.4-1 Page Number 597¶

In [8]:
#Number of Stages by Analytical Equation

import numpy as np
from scipy.interpolate import interp1d
from scipy.optimize import root

#Variable Declaration
yAG = 0.380       #Inlet Gas Flow Rate, kg mol/hr
xAL = 0.100       #Inlet Liquid Flow Rate, kg mol/hr
ky = 1.465e-3     #Gas phase mass transfer coefficient, kmol/(m2.s)
kx = 1.967e-3     #Gas phase mass transfer coefficient, kmol/(m2.s)
xA = np.array([0.00,0.05,0.10,0.15,0.20,0.25,0.30,0.35])
yA = np.array([0.00,0.022,0.052,0.087,0.131,0.187,0.265,0.385])

#Calculations
f = interp1d(xA, yA, kind='cubic')
y = f(xA)
plot(xA,yA,'ro-')
#(1-xA)iM = 1., (1-yA)iM = 1.
#Slope of operating line -(kxd/(1-xA)iM )/(kyd/(1-yA)iM)
m = -kx/ky
c = yAG - m*xAL
plot(xAL, yAG,'bo')
xlabel('$mol\ fraction\ in\ liquid\ phase,\ x_A$')
ylabel('$mol\ fraction\ in\ gas\ phase,\ y_A$')
ff = lambda x: f(x) - (m*x+c)
def lm(a,b):
return ((1-a)-(1-b))/log((1-a)/(1-b))

def flux(k,a,b):
return k*(a-b)/lm(a,b)

n = 4
er = 1.0
i=0
while er>= 0.065:
i+=1
sol = root(ff, 0.002)
xAi = sol.x[0]
yAi = f(xAi)
plot(xAi, yAi,'o-',label=str(i))
plot([xAL,xAi], [yAG, yAi], lw=0.3)
ylm = lm(yAi,yAG)
xlm = lm(xAi,xAL)
mc = -kx/xlm/(ky/ylm)
NAy = flux(ky,yAG,yAi)
NAx = flux(kx,xAi,xAL)
#er = abs((NAx-NAy)/NAx)
er = abs((m-mc)/m)
m = (n*m + mc)/(n+1)
legend(loc='lower right')
#Results
print "Liquid phase Interphase concentration:", round(xAi,3)
print "Gas  phase  Interphase  concentration:", round(yAi,3)
print 'Flux  in  Gas  phase: %4.2e'%(NAy)
print 'Flux in Liquid phase: %4.2e'%(NAx)

Liquid phase Interphase concentration: 0.257
Gas  phase  Interphase  concentration: 0.196
Flux  in  Gas  phase: 3.80e-04
Flux in Liquid phase: 3.78e-04


## Example 10.4-2 Page Number 601¶

In [9]:
#Overall Mass Transfer Coefficients from Film Coefficients
import numpy as np
from scipy.interpolate import interp1d
from scipy.optimize import root

#Variable Declarion
yAG = 0.380       #Inlet Gas Flow Rate, kg mol/hr
xAL = 0.100       #Inlet Liquid Flow Rate, kg mol/hr
ky = 1.465e-3     #Gas phase mass transfer coefficient, kmol/(m2.s)
kx = 1.967e-3     #Gas phase mass transfer coefficient, kmol/(m2.s)
xA = np.array([0.00,0.05,0.10,0.15,0.20,0.25,0.30,0.35])
yA = np.array([0.00,0.022,0.052,0.087,0.131,0.187,0.265,0.385])
xAi = 0.2572
yAi = 0.1964

f = interp1d(xA, yA, bounds_error=False, fill_value=-10)

def flux(k,a,b):
return k*(a-b)/lm(a,b)

def lm(a,b):
return ((1-a)-(1-b))/log((1-a)/(1-b))

#f2 = lambda x: f(x)- yAG #sol = root(f2, 0.3, method='hybr') xAs = sol.x[0] print xAs
yAs = f(xAL)
md = (yAi-yAs)/(xAi-xAL)
yLMs = lm(yAs,yAG)
yLM = lm(yAi,yAG)
xLM = lm(xAi,xAL)
InvKydby_yLMsGas = 1/(ky/yLM)
InvKydby_yLMsLiquid =  md/(kx/xLM)
InvKydby_yLMs = InvKydby_yLMsGas + InvKydby_yLMsLiquid
Kyd = (1/InvKydby_yLMs)*yLMs
Rgasper = InvKydby_yLMsGas*100/InvKydby_yLMs
Rliquidper = InvKydby_yLMsLiquid*100/InvKydby_yLMs
NA = Kyd*(yAG-yAs)/yLMs
#Results
print "Individual Film resistances for Gas and Liquid film are:", round(InvKydby_yLMsGas,2),round(InvKydby_yLMsLiquid,2), "respectively"
print 'Overall Mass Transfer Coefficient: %5.3e'%(Kyd), "kgmol/(m2.s)"
print "Percentage Resistance in Gas and Liquid film is:", round(Rgasper,1),"&", round(Rliquidper,1),"respectively"
print 'The Flux of A is: %5.3e'%(NA), "kgmol/(m2.s)"

Individual Film resistances for Gas and Liquid film are: 483.16 382.41 respectively
Overall Mass Transfer Coefficient: 8.924e-04 kgmol/(m2.s)
Percentage Resistance in Gas and Liquid film is: 55.8 & 44.2 respectively
The Flux of A is: 3.789e-04 kgmol/(m2.s)


## Example 10.5-1 Page Number 608¶

In [10]:
#Design of Water-Cooling Tower Using Film Coefficients
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
from scipy.optimize import root
import scipy.integrate as integrate

#Variable Declarion
P = 101325      #Atmospheric pressure
G = 1.356       #Inlet Gas Flow Rate, kg mol/hr
L = 1.356       #Inlet Liquid Flow Rate, kg mol/hr
TL1 = 29.4      #Initial temperature of water in °C
TL2 = 43.3      #Final temperature of water in °C
TG1 = 29.4      #Inlet air temperature of air in °C
Tw  = 23.9      #Wet bulb temperature of air in °C
kGa = 1.207e-7  #Mass Transfer Coefficient, kmol/(m2.s.Pa)
K = 4.187e4     #J/(kg.K)
cL = 4187.       #J/(kg.K)
T0 = 0.0
H1 = 0.0165     #Humidity of entering air, kgWater/kgDryAir
Mb = 29.

#Calculation
t = np.array([15.6,26.7,29.6,32.2,35.0,37.8,40.6,43.3,46.1])
H  = np.array([43.68e3,84.0e3,97.2e3,112.1e3,128.9e3,148.2e3,172.1e3,197.2e3,224.5e3])

f = interp1d(t,H,kind='cubic',bounds_error=False)
T = np.arange(28.,46.,1)
Hy = f(T)

Hy1 = (1.005+1.88*H1)*1e3*(TG1-0.0)+2.501e6*H1
Hy2 = L*cL*(TL2-TL1)/G + Hy1
plt.figure(1)
plt.plot(t,H,'k-',T,Hy,'k-')
plt.plot([TL1,TL2],[Hy1,Hy2],'ro-')
plt.xlabel('$Liquid Temperature, C$')
plt.ylabel('$Enthalpy Hy, J/kg$')

m1=(Hy2-Hy1)/(TL2-TL1)
c1=Hy1-m1*TL1
m2 = K
TT = linspace(TL1,TL2,11)
plt.xlim(25,45)
plt.ylim(40000,200000)
Hyi = ()
Hy = ()
cnt = 0
for i in TT:
y1 = m1*i+c1
c2 = y1-m2*i
ff = lambda xx: f(xx)-y1+K*(xx-i)
sol = root(ff,40)
x2 = sol.x[0]
y2 = f(x2)
Hy = np.append(Hy,y1)
Hyi = np.append(Hyi,y2)
cnt = cnt + 1
plt.plot([i,x2],[y1,y2],'o-')
InvHyimHy = 1/(Hyi-Hy)

z = (G/(Mb*kGa*P))*integrate.simps(InvHyimHy,Hy)
plt.figure(2)
plt.plot(Hy,InvHyimHy)
plt.fill_between(Hy,InvHyimHy,0,color='0.6')
plt.text(90000, 0.00002, 'Area = '+str(round(z,2))+' m')
plt.xlabel('$Hy$')
plt.ylabel('$1/(Hyi-Hy)$')
plt.show()
#Results
print "Height of packed cooling tower:", round(z,2),"m"

Height of packed cooling tower: 7.01 m


## Example 10.6-1 Page Number 614¶

In [17]:
#Absorption of SO2 in Plate Tray
from scipy.optimize import root
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import numpy as np

#Variable Declaration
ysiP = 0.20   #Mole fraction of SO2 entering
ysoP = 0.02   #Mole fraction of SO2 leaving
P = 101325.   #Total pressure at which SO2 is leaving in Pa
Fair = 150    #Flowrate of air in kg/hrm2
Fwat = 6000   #Flowrate of water in kg/hrm2
effP = 0.25   #Fractional efficiency
MWair = 29    #Molecular weight of air
MWW = 18      #Molecular weight of water
x = np.array([0.0000,0.0005,0.001,0.0015,0.002,0.0025,0.003,0.0035,0.004,0.0045,0.005,0.0055,0.006])
y = np.array([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.])
xe = np.array([0.0,0.0000562,0.0001403,0.000280,0.000422,0.000564,0.000842,0.001403,0.001965,0.00279,0.00420,0.00698])
ye = np.array([0.0,0.000658,0.00158,0.00421,0.00763,0.0112,0.01855,0.0342,0.0513,0.0775,0.121,0.212])

#Calculations
Vd = Fair/MWair
Ld = Fwat/MWW
k1 = Vd*ysiP/(1-ysiP)
k2 = Vd*ysoP/(1-ysoP)
f = lambda x: k1 -( Ld*(x/(1-x)) + k2)
sol = root(f,0.002)
xn = sol.x[0]

for i in range(len(y)):
k1 = Vd*ysoP/(1-ysoP) + Ld*(x[i]/(1-x[i]))
ff = lambda yy: Vd*(yy/(1-yy))-k1
sol  = root(ff,.1)
y[i] = sol.x[0]

f1 = interp1d(x,y, bounds_error=False)
f11 = interp1d(y,x, bounds_error=False)
f2 = interp1d(ye,xe, bounds_error=False)
plt.plot(x,y,'r-',xe,ye,'b-')

plt.text(.0037, .1, 'Equilibrium Curve')
plt.text(.0025, .22, 'Operating Line')
plt.annotate('$(x_N,y_{N+1})$', xy=(xn,ysiP), xytext=(0.004,0.2))
plt.annotate('$(x_0,y_1)$', xy=(0,ysoP), xytext=(0.0003,0.12))
def ypos(xop):
return f1(xop)

def xpos(yop):
return f2(yop)

xmax = f11(ysiP)
x1 = x[0]
y1 = y[0]
plot(x[0],y[0],'ro-')
plot([0.,xn], [ysiP,ysiP], 'k--', lw=1)
plot([xn,xn], [ysiP,0.], 'k--', lw=1)
plot(xn,ysiP,'bo-')
xlabel("Liquid phase mole fraction")
ylabel("Vapor phase mole fraction")
n = 0
while x1 <= xmax:
x2 = xpos(y1)
y2 = y1
plt.text(x2, y2-0.013, str(n+1))
plot([x1,x2], [y1,y2], 'k-', lw=1)      #Draw Horizontal line to equilibrium curve
if x2 > xmax:
dxt = x2-x1
dx = xmax-x1
dxbydxt = dx/dxt
n = n + dxbydxt
break
x1 = x2
y1 = y2
y2 = ypos(x1)
plot([x1, x2], [y1, y2], 'r-', lw=1)    #Draw a vertical line to operating line
n = n+1
x1 = x2
y1 = y2

print 'Number of Stages for separation', round(n,2)
print 'Actual Number of stages', round(n/effP,1)

Number of Stages for separation 2.26
Actual Number of stages 9.0


## Example 10.6-2 Page Number 621¶

In [20]:
#Absorption of Acetone in a PAcked Tower
from scipy.optimize import root
import numpy as np
import matplotlib.pyplot as plt

#Variable Declaration
P, T= 101325., 293.   #column pressure and temperature
y1, y2 = 0.026, 0.005 #Compositions in gas phase
x2 = 0.0              #Composition of fresh solvent feed
V, L = 13.65, 45.36   #Vapor and liquid rates to the coloumn
kyd, kxd = 3.78e-2, 6.16e-2  #Film coefficient for gas and liquid phase, (kmol/(s.m3.mol frac))
xA, pA, PmmHg = 0.0333, 30., 760.   #liquid equilibrium mole frac at partial presure
A = 0.186              #Tower cross sectional area
#Calculations
def func1(s1,c1,s2,c2,s3,x0,y0):
c3 = c1 - (s3-s1)*x0
x = (c3 - c2)/(s2 - s3)
y = s2*x + c2
return [x,y]

def lm(a,b,c,d):
return ((a-b)-(c-d))/log((a-b)/(c-d))

S = (pA/PmmHg)/xA
k1 = V*y1/(1-y1)-V*y2/(1-y2)
k1 = k1/L
x1 = k1/(1+k1)
yA = pA/PmmHg
me = yA/xA
ce = 0.0
mop = (y2-y1)/(x2-x1)
cop = y2 - mop*x2
xe = np.arange(0.,0.015,0.001)
ye = me*xe
plt.plot(xe,ye,'b-')
plt.plot([x1,x2], [y1,y2], 'ko-', lw=0.5)
m1  = -(kxd/(1-x1))/(kyd/(1-y1))
m2  = -(kxd/(1-x2))/(kyd/(1-y2))
[xi1,yi1]=func1(mop,cop,me,ce,m1,x1,y1)
plt.plot([x1,xi1], [y1,yi1], 'ko-', lw=0.5)
[xi2,yi2]=func1(mop,cop,me,ce,m2,x2,y2)
plt.plot([x2,xi2], [y2,yi2], 'ko-', lw=0.5)

plt.text(.006, .006, 'Equilibrium Curve')
plt.text(.001, .02, 'Operating Line')

plt.annotate('$(x_1,y_1)$', xy=(x1,y1), xytext=(x1,y1+0.002),
arrowprops=dict(facecolor='black', shrink=0.05),
)

plt.annotate('$(x_2,y_2)$', xy=(0,y2), xytext=(0.0005,y2),
arrowprops=dict(facecolor='black', shrink=0.05),
)
plt.xlabel("Liquid phase mole fraction, $x$")
plt.ylabel("Vapor phase mole fraction, $y$")
plt.plot([0,x1,x1], [y1,y1,0], 'ko-', lw=0.5)
plt.plot([0,xi1,xi1], [yi1,yi1,0], 'ko-', lw=0.5)
plt.plot([0,xi2,xi2], [yi2,yi2,0], 'ko-', lw=0.5)
V1 = V/(1-y1)
V2 = V/(1-y2)
V = (V1+V2)*.5/3600.
L = L/3600.
dyyilm = lm(y1,yi1,y2,yi2)
zy = V*(y1-y2)/(kyd*dyyilm*A)
dxxilm = lm(xi1,x1,xi2,x2)
zx = L*(x1-x2)/(kxd*dxxilm*A)
y1s = me*x1
y2s = me*x2
plt.plot([0,x1,x1], [y1s,y1s,0], 'ko-', lw=0.5)
d1yilm1 = lm(1.,yi1,1.,y1)
d1yilm2 = lm(1.,yi2,1.,y2)
d1yilm = (d1yilm1 + d1yilm2)/2.
d1xilm = lm(1.,x1,1.,xi1)
d1ys1lm = lm(1.,y1s,1.,y1)
d1ys2lm = lm(1.,y2s,1.,y2)
d1yslm = (d1ys1lm + d1ys2lm)/2.
Kya = 1./(d1yslm*(1/(kyd/d1yilm) + me/(kxd/d1xilm)))
dyyslm = lm(y1,y1s,y2,y2s)
z = V*(y1-y2)/(A*Kya*dyyslm)
#Results
print "The values of kya, kxa, Kya are:", round(kyd,4),round(kxd,4),round(Kya,4)," kgmol/(s.m2. mol frac) respectively"
print "Tower Height calculated using kya:", round(zy,4),'m'
print "Tower Height calculated using kxa:", round(zx,4),'m'
print "Tower Height calculated using Kya:", round(z,4),'m'

The values of kya, kxa, Kya are: 0.0378 0.0616 0.0223  kgmol/(s.m2. mol frac) respectively
Tower Height calculated using kya: 1.9489 m
Tower Height calculated using kxa: 1.9394 m
Tower Height calculated using Kya: 1.8973 m


## Example 10.6-3 Page Number 625¶

In [21]:
#Use of Transfer Unit for Packed Tower

#Variable Declaration
kyd = 0.0378        #Film coefficient in kmol/s.m3
kxd = 0.0616        #Film coefficient in kmol/s.m3
Kya = 0.022523      #Overall mass transfer coefficient
V = 3.852e-3        #Molar flowrate kmol/s
A = 0.186           #Cross sectional area of the tower m2
y1 = 0.026
y2 = 0.005
yi1 = 0.0154
yi2 = 0.0020
d1yilm = 0.97925
d1yilm1 = 0.979249088369
d1yilm2 = 0.996443506323
d1xilm = 0.99023
d1yslm = 0.98313
dyyilm = 0.00590
d1yslm = 0.983131759622
d1ys2m = 0.997497911442
dyyslm = 0.0102576937583

#Calculations
#PART A
HG = V/(kyd*A)
NG1 = (d1yilm1/(1-y1) + d1yilm2/(1-y2) )/2.
NG2 = (y1-y2)/dyyilm
NG = NG1*NG2
z = HG*NG
#Results
print "Height of gas transfer unit",round(HG,3)
print "Number of gas transfer unit",round(NG,3)
print "Total Height of tower", round(z,4),'m'

#PART B
HoG = V/(Kya*A)
NoG1 = (d1ys1lm/(1-y1) + d1ys2lm/(1-y2))/2.
NoG2 = (y1-y2)/dyyslm
NoG = NoG1*NoG2
z = HoG*NoG

#Results
print "Height of Overall gas transfer unit",round(HoG,3)
print "Number of Overall gas transfer unit",round(NoG,3)
print "Total Height of tower", round(z,4),'m'

Answers to Part A
Height of gas transfer unit 0.548
Number of gas transfer unit 3.571
Total Height of tower 1.9567
Height of Overall gas transfer unit 0.919
Number of Overall gas transfer unit 2.059
Total Height of tower 1.8936


## Example 10.7-1 Page Number 628¶

In [22]:
#Desing of an Absorption Tower with Concentrated Gas Mixture
from scipy.interpolate import interp1d
import numpy as np
import scipy.integrate as integrate

#Variable Declaration
dp = 0.0254       #Diameter of the rings ,m
x2 = 0.0
P = 101325        #Total pressure ,Pa
y1 = 0.20         #Inlet Mole fraction of SO2
y2 = 0.02         #Outlet Mole fraction of SO2
Vd = 6.53e-4      #Molar flowrate of air ,kmol/s
Ld = 4.20e-2      #Molar flowrate of water ,kmol/s
AT = 0.0929       #Tower cross sectional area,m2
xe = np.array([0.0,0.0000562,0.0001403,0.000280,0.000422,0.000564,0.000842,0.001403,0.001965,0.00279,0.00420,0.00698])
ye = np.array([0.0,0.000658,0.00158,0.00421,0.00763,0.0112,0.01855,0.0342,0.0513,0.0775,0.121,0.212])
yop = np.array([0.02,0.04,0.07,0.13,0.20])
xop = np.zeros(len(yop))
Gy = np.zeros(len(yop))
Gx = np.zeros(len(yop))
V = np.zeros(len(yop))
L = np.zeros(len(yop))
kyda = np.zeros(len(yop))
kxda = np.zeros(len(yop))
xi = np.array([0.00046,0.00103,0.00185,0.00355,0.00565])
yi = np.array([0.0090,0.0235,0.0476,0.1015,0.1685])
d1y = 1.-yop
dyyi = yop-yi
d1yyilm = ((1.-yop)-(1.-yi))/log((1.-yop)/(1.-yi))

#Calcualations
def funkxda(gx):
return 0.152*gx**0.82

def funkyda(gx,gy):
return 0.0594*gx**0.25*gy**0.7

k1 = (Ld*x2/(1.-x2)+Vd*(y1/(1.-y1)-y2/(1.-y2)))/Ld
x1 = k1/(1.+k1)

for j in range(len(yop)):
k1 = (Ld*x1/(1.-x1)+Vd*(-y1/(1.-y1)+yop[j]/(1.-yop[j])))/Ld
xop[j] = k1/(1+k1)
Gy[j] = (Vd*29.+Vd*yop[j]*64.1/(1.-yop[j]))/AT
Gx[j] = (Ld*18.+Ld*xop[j]*64.1/(1.-xop[j]))/AT
V[j] = Vd/(1.-yop[j])
L[j] = Ld/(1.-xop[j])
kxda[j] = funkxda(Gx[j])
kyda[j] = funkyda(Gx[j],Gy[j])

fyop = V/((kyda*AT/d1yyilm)*d1y*dyyi)
Height = integrate.simps(fyop,yop)

#Results
print "Height of the tower:",round(Height,3), "m"

Height of the tower: 1.574 m


## Example 10.8-1 Page Number 633¶

In [25]:
#Prediction of Film Coefficients for Ammonia Absorption

#Variable Declaration
T = 303            #Temperature of the tower in K
dp = .0254         #Diameter of the ring m
P = 101325         #Total pressure in Pa
Gx = 2.543         #Flowrate in kg/s.m2
Gy = 0.339         #Flowrate in kg/s.m2
m = 1.2
mua = 1.86e-5      #Viscosity of air in Pa.s
rhoa = 1.168       #Density of air in kg/m3
DAB = 2.379e-5     #Diffusivity of NH3 in water , m2/s
alpha = 0.557      #Constant in correlation for gas phase mass transfer coefficient
beta = 0.32        #Constant in correlation for gas phase mass transfer coefficient
gama = -0.51       #Constant in correlation for gas phase mass transfer coefficient
muw15 = 1.1404e-3  #Viscosity of water at 15°C
muw30 = 0.8007e-3  #Viscosity of water at 30°C
DABw15 = 1.77e-9   #Diffusivity of NH3 in water at 15°C
rhow = 996.        #Desity of water in kg/m3
theta = 2.35e-3    #Constant in correlation for liquid phase mass transfer coefficient
eta = 0.22         #Constant in correlation for liquid phase mass transfer coefficient
#Calcualations
V = Gy/(29.0)
L = Gx/18.0
Sca = mua/(rhoa*DAB)
HG = alpha*Gy**beta*Gx**gama*Sca**0.5
DABw = muw15*303/(muw30*288)*DABw15
Scw = muw30/(rhow*DABw)
HL = theta*(Gx/muw30)**eta*Scw**0.5
kyda = V/HG
kxda = L/HL
Kyda = 1./(1./kyda + m/kxda)
ResGf = (1./kyda)/(1./Kyda)*100

#Results
print "Predicted film coefficients are as follows "
print "Gas phase film cofficient ",round(kyda,4),"kmol/(s.m3.mol frac)"
print "Liquid phase film cofficient ",round(kxda,3),"kmol/(s.m3.mol frac)"
print "Overall Gas phase film cofficient ",round(Kyda,4),"kmol/(s.m3.mol frac)"
print "Percentage resistance in gas film is ",round(ResGf,1), "%"

Predicted film coefficients are as follows
Gas phase film cofficient  0.0584 kmol/(s.m3.mol frac)
Liquid phase film cofficient  0.586 kmol/(s.m3.mol frac)
Overall Gas phase film cofficient  0.0521 kmol/(s.m3.mol frac)
Percentage resistance in gas film is  89.3 %