Professional Documents
Culture Documents
MASS TRANSFER
INTEGRATED DESIGN
DISTILLATION
GROUP NUMBER: 17
GROUP MEMBERS:1)
2)
3)
4)
5)
115841
117890
117893
115877
S-JD0015/15 (R)
Contents
Problem Statement................................................................................................ 3
Operating data:..................................................................................................... 3
Minimum reflux ratio, Rmin................................................................................5
Graphical Method............................................................................................ 5
Number of theoretical stages. *Each group has a different reflux ratio, R..........6
The column of your choice either packed column or tray column....................11
APPENDIX............................................................................................................. 12
Problem Statement
In EKC 157 Chemical Engineering Drawing you were asked to prepare a block
diagram and PFD of a plant producing ethylene through catalytic dehydration of
ethanol based on the process description. Subsequently in the EKC 111 Mass
Balance and EKC 214 Energy Balance, you were asked to perform the material
and energy balance of that plant. The current Integrated Design project for
EKC217, you are requested to perform a calculation/design of distillation column
(T-102). Given the operating data as shown below:-
Operating data:
Mass
Flowrate(ton/hr)
Ethanol
Water
Total mass
flowrate
Feed
Distillate
Condensate
111.2
12.35
123.55
108.81
0.12
108.93
0.10
14.52
14.62
Feed
Distillate
Condensate
2456183
697121.1
3153304.1
2403393
6773.646
2410166.646
2208.798
819611.2
821820.2
Molar Fraction
Ethanol
Water
Total
Feed
0.778924
0.221076
1
Distillate
0.99719
0.00281
1
Condensate
0.002688
0.997312
1
Assumption:
Design calculation
Basic design calculation can be done via several methods, most famous method
employ graphical approach as explained in Mc Cabe Thiele graphical method.
For Ethanol-water system the thermodynamic properties are as follows
Volatility
x, ethanol mole y, Relative
ethanol mole
fraction in liquid fraction of
in Ethanol
gas
phase
phase
0
0
0.04
0.08
0.08
0.16
0.12
0.23
0.16
0.3
0.2
0.36
0.24
0.41
0.28
0.47
0.32
0.51
0.36
0.56
0.4
0.6
0.44
0.64
0.48
0.68
0.52
0.71
0.56
0.74
0.6
0.77
0.64
0.8
0.68
0.83
0.72
0.85
0.76
0.88
0.8
0.9
0.84
0.92
0.88
0.94
0.92
0.96
0.96
0.98
1
1
x, ethanol mole
fraction in liquid
phase
0.04
2.08695652
0.08
2.19047619
0.12
2.19047619
0.16
2.25
0.2
2.25
0.24
2.20056497
0.28
2.28032345
0.32
0.36
0.4
0.44
0.48
0.52
0.56
0.6
0.64
0.68
0.72
0.76
0.8
0.84
0.88
0.92
0.96
2.21173469
2.26262626
2.25
2.26262626
2.30208333
2.25994695
2.23626374
2.23188406
2.25
2.29757785
2.2037037
2.31578947
2.25
2.19047619
2.13636364
2.08695652
2.04166667
Rmin =
1
( 1)
)(
x D ( 1x D )
zF
1z F
= n n
n
Rmin =1.028627
Graphical Method
Graphical Method was obtained by using Matlab software the following result are
as follows
yx y
D
x x x
Rmin
R min +1
Rmin =1.028713
R=1.56
Number Of Stages
Winn Underwood Gilliland (FUG) Method
Fenske Equation
log
N min =
[( )( )]
xD
1x D
log
1x B
xB
N min =15.199
Based on Gilliland correlation
N N min
RRmin 0.002743
=0.5458270.591422
+
N +1
R+1
RRmin
R+ 1
N=27.6998
N ' =25.6998
Optimal Feed stage
Using Krikbride equation
log
N F 1
'
N N F
=0.206
[( )(
1z F
zf
xB
1x D
() DB )]
2
N F =10.8
Optimum feed stage location is at 11th stage
y n+1=
R
1
xn+
x
R+1
R+1 D
y n+1=0.61 x n +0.3887
Assuming the feed condition is at bubble point,
Therefore q=1
Constructing operating line
y=
y=
q
1
x+
z
q1
1q F
1
0.7719
x+
11
11
q1
The construction of rectifying line and feed line are shown in diagram below
The graphical method as shown below with staging number by using Matlab ;
Comparing Result
Method
Calculation
Mc Cabe
Thiele
ASPEN
Rmin
N min
N Actual
N Feed
1.028627
1.028713
15.199
14.84
28
25
11
13
1.01603
14.4388
25
14
5.
If periodic cleaning is required, man holes
will be provided for cleaning.
In packed columns packing must be removed before cleaning.
6.
For large column heights, weight of the packed column is more than plate
column.
7.
Design information for plate column is more readily available and more
reliable than that for packed column.
8.
Inter stage cooling can be provided to remove heat of reaction or solution in
plate column.
9.
10. Random-packed columns generally are not designed with diameters larger
than 1.5 m, and diameters of commercial tray column are seldom less than
0.67m.
o
o
This is because based from the Aspen software result, the average
temperature for the distillation column is higher and almost
approximately same to 98C.
The mixture between ethanol and water is not foaming, hence it is
very suitable to use tray column.
Since the number of stages is around 25, the usage of tray column
is better for the contact of vapor and liquid of the ethanol-water
mixture.
APPENDIX
Calculation using MatLab
function mccabethiele
close all
clc
set(0,'DefaultFigureWindowStyle','docked')
f = figure;
set(f,'name','Specified Parameters','numbertitle','off')
minstep = 1;
maxstep = 1;
column = 1;
fprintf('Enter the following codes to specify given parameters: \n')
fprintf('==============================================================\n')
fprintf('Enter "0" to specify reflux and feed condition \n')
fprintf('Enter "1" to specify reflux and boilup \n')
fprintf('Enter "2" to specify boilup and feed condition \n')
fprintf('==============================================================\n')
M = input('Input Code (see above): ');
fprintf('==============================================================\n')
fprintf('Enter "1" to show stage steps or "0" to not show stage steps \n')
fprintf('==============================================================\n')
stages = input('Stage by Stage? :
');
fprintf('==============================================================\n')
if stages ~= 1
stages = 0;
minstep = 0;
maxstep = 0;
end
VLE = input('Enter VLE Data [x y] or alpha12:
');
if M == 0 || M == 1
reflux = input('Enter External Reflux Ratio:
');
end
if M == 1 || M == 2
boilup = input('Enter External Boilup Ratio:
');
end
if M == 0 || M == 2
q1 = input('Enter the value of q (feed condition): ');
if q1 ~= 1
q = q1;
else
q = 0.999;
end
end
F = input('Enter the feed flow rate [kmol/hr]:
');
comps = input('Enter Xd Xb and Z [Xd Xb Z]:
');
Xd
Xb
Z
if
= comps(1, 1);
= comps(1, 2);
= comps(1, 3);
length(VLE) > 1
xVLE = VLE(1:size(VLE), 1);
yVLE = VLE(1:size(VLE), 2);
if stages == 1
curve = 1;
p = polyfit(xVLE,yVLE,10);
syms K
VLE_EQ = p(1)*K.^10 + p(2)*K.^9 + p(3)*K.^8 + p(4)*K.^7 + p(5)*K.^6
+ p(6)*K.^5 + p(7)*K.^4 + p(8)*K.^3 + p(9)*K.^2 + p(10)*K+ p(11);
end
else
curve = 2;
Alpha12 = VLE;
xVLE = 0:0.001:1;
yVLE = zeros(length(xVLE));
for kk = 1:length(xVLE);
yVLE(kk) = (Alpha12*xVLE(kk))/(1 + xVLE(kk)*(Alpha12 - 1));
end
end
B = F * (Xd - Z)/(Xd - Xb);
D = F - B;
if M == 0;
slopeTOL
= reflux/(reflux + 1);
interceptTOL = (1/(reflux + 1)) * Xd;
slopeFOL
= q/(q - 1);
interceptFOL = (1/(1 - q)) * Z;
Xx = (interceptFOL - interceptTOL) /(slopeTOL - slopeFOL);
if q1 == 1
Xx = Z;
end
Yy = slopeTOL * Xx + interceptTOL;
xTOL = Xx:0.001:Xd;
yTOL = slopeTOL * xTOL + interceptTOL;
if Xx < Z
xFOL = Xx:0.001:Z;
yFOL = slopeFOL * xFOL + interceptFOL;
elseif Xx > Z
xFOL = Z:0.001:Xx;
yFOL = slopeFOL * xFOL + interceptFOL;
else
xFOL = [Xx Xx];
yFOL = [Z Yy];
end
slopeBOL
= (Yy - Xb)/(Xx - Xb);
interceptBOL = Xb - Xb * slopeBOL;
xBOL
= Xb:0.001:Xx;
yBOL
= slopeBOL * xBOL + interceptBOL;
boilup
= 1/(slopeBOL - 1);
elseif M == 1
slopeTOL
= reflux / (reflux + 1);
interceptTOL = (1 / (reflux + 1)) * Xd;
slopeBOL
= (boilup + 1) / boilup;
interceptBOL = - Xb / boilup;
Xx = (interceptBOL - interceptTOL) /(slopeTOL - slopeBOL);
Yy = slopeTOL * Xx + interceptTOL;
xTOL = Xx:0.001:Xd;
yTOL = slopeTOL * xTOL + interceptTOL;
if Xx < Z
xFOL
= Xx:0.001:Z;
slopeFOL
= (Yy - Z) / (Xx - Z);
interceptFOL = Yy - slopeFOL * Xx;
q
= slopeFOL / (slopeFOL - 1);
yFOL
= slopeFOL * xFOL + interceptFOL;
elseif Xx > Z
xFOL = Z:0.001:Xx;
slopeFOL
= (Yy - Z) / (Xx - Z);
interceptFOL = Yy - slopeFOL * Xx;
q
= slopeFOL / (slopeFOL - 1);
yFOL
= slopeFOL * xFOL + interceptFOL;
else
xFOL = [Xx Xx];
yFOL = [Z Yy];
q
= 1;
end
xBOL = Xb:0.01:Xx;
yBOL = slopeBOL * xBOL + interceptBOL;
elseif M == 2
slopeFOL
= q/(q - 1);
interceptFOL = (1/(1 - q)) * Z;
slopeBOL
= (boilup + 1) / boilup;
interceptBOL = - Xb / boilup;
Xx = (interceptFOL - interceptBOL) /(slopeBOL - slopeFOL);
if q1 == 1
Xx = Z;
end
Yy = slopeBOL * Xx + interceptBOL;
xBOL = Xb:0.001:Xx;
yBOL = slopeBOL * xBOL + interceptBOL;
if Xx < Z
xFOL = Xx:0.001:Z;
yFOL = slopeFOL * xFOL + interceptFOL;
elseif Xx > Z
xFOL = Z:0.001:Xx;
yFOL = slopeFOL * xFOL + interceptFOL;
else
xFOL = [Xx Xx];
yFOL = [Z Yy];
end
slopeTOL
= (Yy - Xd)/(Xx - Xd);
interceptTOL = Xd - Xd * slopeTOL;
xTOL
= Xx:0.001:Xd;
yTOL
= slopeTOL * xTOL + interceptTOL;
reflux
= slopeTOL /(1 - slopeTOL);
end
hold off
hold on
title('McCabe-Thiele Diagram at Specified Parameters')
xlabel('Liquid Phase Mole Fraction [x1]')
ylabel('Vapor Phase Mole Fraction [y1]')
axis([0 1 0 1]);
xyx = 0:0.001:1;
xyy = 0:0.001:1;
plot(xyx, xyy, 'k')
plot(xVLE, yVLE, 'k')
plot(xTOL, yTOL, 'g')
plot(xBOL, yBOL, 'r')
plot(xFOL, yFOL, 'c')
if stages == 1
pause
X = Xd;
Y = Xd;
zz = 1;
pinch = 0;
step_over = Xx;
while X(zz) >= step_over && pinch < 40
zz
= zz + 1;
pinch = pinch + 1;
if curve ~= 1;
X(zz) = Y(zz - 1) / (Alpha12*(1 - Y(zz-1)) + Y(zz-1));
else
EQ = VLE_EQ - Y(zz - 1);
S = solve(EQ, K);
for jj = 1:length(S)
if S(jj) > 0 && S(jj) < 1 && isreal(S(jj))
X(zz) = double(S(jj));
end
end
end
Y(zz) = slopeTOL * X(zz - 1) + interceptTOL;
end
if pinch >= 40
error('Pinch point or impossible parameters');
end
FeedLoc = length(X)/2;
while Xb <= X(zz)
zz
= zz + 1;
if curve ~= 1;
X(zz) = Y(zz - 1) / (Alpha12*(1 - Y(zz-1)) + Y(zz-1));
else
EQ = VLE_EQ - Y(zz - 1);
S = solve(EQ, K);
for jj = 1:length(S)
if S(jj) > 0 && S(jj) < 1 && isreal(S(jj))
X(zz) = double(S(jj));
end
end
end
Y(zz) = slopeBOL * X(zz - 1) + interceptBOL;
end
X(length(X)+1) = X(length(X));
Y(length(Y)+1) = X(length(X));
Xlength = length(X);
parStage = (X(Xlength-2) - Xb)/(X(Xlength - 2) - X(Xlength - 1));
stage_tot = floor(length(X)/2);
if parStage >= 0.01
stage_theo = stage_tot - 1 + parStage;
else
stage_theo = stage_tot;
end
Xbottoms
= X(length(X));
Xdistillate = Xd;
for vv = 2:(length(X))
stepx = [X(vv-1) X(vv)];
stepy = [Y(vv-1) Y(vv)];
plot(stepx, stepy, 'b')
end
Xmin = Xd;
Ymin = Xd;
ww = 1;
while Xmin(ww) >= 1.01*Xb
ww = ww + 1;
if curve ~= 1;
Xmin(ww) = Ymin(ww - 1) / (Alpha12*(1 - Ymin(ww-1)) + Ymin(ww1));
else
EQ = VLE_EQ - Ymin(ww - 1);
S = solve(EQ, K);
for jj = 1:length(S)
if S(jj) > 0 && S(jj) < 1 && isreal(S(jj))
Xmin(ww) = double(S(jj));
end
end
end
Ymin(ww) = Xmin(ww - 1);
end
Nmin = length(Xmin)/2;
par_stage_min = (Xmin(length(Xmin)-1)-Xb) / (Xmin(length(Xmin)-1)Xmin(length(Xmin)));
if par_stage_min >= 0.01
Nmin_theo = Nmin - 1 + par_stage_min;
else
Nmin_theo = Nmin;
end
end
if q1 == 1
pinch_x = Z;
if curve == 2
pinch_y = (Alpha12*pinch_x)/(1+pinch_x*(Alpha12 - 1));
else
pinch_y = p(1)*pinch_x^10 + p(2)*pinch_x^9 + p(3)*pinch_x^8 +
p(4)*pinch_x^7 + p(5)*pinch_x^6 + p(6)*pinch_x^5 + p(7)*pinch_x^4 +
p(8)*pinch_x^3 + p(9)*pinch_x^2 + p(10)*pinch_x+ p(11);
end
elseif q1 ~= 1 && curve == 2
syms K2
slopeFOLmin = (Yy - Z)/(Xx - Z);
interceptFOLmin = Z - slopeFOLmin * Z;
PinchEQ = (Alpha12*K2)/(1+K2*(Alpha12 - 1)) - (slopeFOLmin * K2) interceptFOLmin;
S1 = solve(PinchEQ, K2);
for jjj = 1:length(S1)
if S1(jjj) > 0 && S1(jjj) < 1 && isreal(S1(jjj))
pinch_x = double(S1(jjj));
end
end
pinch_y = slopeFOLmin * pinch_x + interceptFOLmin;
else
syms K2
slopeFOLmin = (Yy - Z)/(Xx - Z);
interceptFOLmin = Z - slopeFOLmin * Z;
VLE_EQ2 = p(1)*K2.^10 + p(2)*K2.^9 + p(3)*K2.^8 + p(4)*K2.^7 +
p(5)*K2.^6 + p(6)*K2.^5 + p(7)*K2.^4 + p(8)*K2.^3 + p(9)*K2.^2 + p(10)*K2+
p(11)-slopeFOLmin*K2 - interceptFOLmin;
S2 = solve(VLE_EQ2, K2);
for jjj = 1:length(S2)
end
pinch_y = slopeFOLmin * pinch_x + interceptFOLmin;
end
if pinch_x <= Xb
pinch_x = Xb;
end
if pinch_y >= Xd
pinch_y = Xd;
end
slopeTOLmin = (pinch_y - Xd) / (pinch_x - Xd);
min_reflux = slopeTOLmin / (1 - slopeTOLmin);
slopeBOLmin = (pinch_y - Xb) / (pinch_x - Xb);
min_boilup = 1 / (slopeBOLmin - 1);
fprintf('\n')
fprintf('==============================================================\n')
fprintf('==============================================================\n')
if stages == 1
fprintf('Actual Distillate Concentration : %6.2f\n', Xdistillate)
fprintf('Actual Bottoms Concentration
: %6.2f\n', Xbottoms)
fprintf('==============================================================\n')
fprintf('Number of Equilibrium Stages
: %6.0f\n', stage_tot)
fprintf('Number of Theoretical Stages
: %6.2f\n', stage_theo)
fprintf('==============================================================\n')
fprintf('Minimum Number of Stages [Nmin] : %6.0f\n', Nmin)
fprintf('Theoretical Minimum Stages
: %6.2f\n', Nmin_theo)
fprintf('==============================================================\n')
fprintf('Minimum Reflux Ratio [L/D]min
: %6.2f\n', min_reflux)
fprintf('Minimum Boilup Ratio [Vbar/B]min : %6.2f\n', min_boilup)
fprintf('==============================================================\n')
fprintf('Feed Stage
: %6.0f\n', FeedLoc)
fprintf('==============================================================\n')
end
fprintf('Feed Condition [q]
: %6.2f\n', q)
fprintf('==============================================================\n')
fprintf('External Reflux Ratio [L/D]
: %6.2f\n', reflux)
fprintf('External Boilup Ratio [Vbar/B]
: %6.2f\n', boilup)
fprintf('==============================================================\n')
fprintf('Overhead Flow Rate [D]
: %6.2f kmol/hr \n', D)
fprintf('Bottoms Flow Rate [B]
: %6.2f kmol/hr \n', B)
fprintf('==============================================================\n')
fprintf('==============================================================\n')
fprintf('\n\n\n\n\n\n\n')
if stages ~= 1
fprintf('\n\n\n\n\n\n\n\n\n\n\n\n\n')
end
if minstep == 1
pause
g = figure;
set(g,'name','Infinte Reflux','numbertitle','off')
hold on
title('McCabe-Thiele Diagram at Infinte Reflux')
xlabel('Liquid Phase Mole Fraction [x1]')
end
if minstep == 1 && maxstep == 1
pause
q = figure;
set(q,'name','Minimum Reflux','numbertitle','off')
hold on
title('McCabe-Thiele Diagram at Minimum Reflux for Given Feed')
xlabel('Liquid Phase Mole Fraction [x1]')
ylabel('Vapor Phase Mole Fraction [y1]')
axis([0 1 0 1]);
plot(xyx, xyy, 'k')
plot(xVLE, yVLE, 'k')
plot(Xd, Xd, 'mo')
plot(Xb, Xb, 'mo')
minTOLx = [pinch_x Xd];
minTOLy = [pinch_y Xd];
minBOLx = [Xb pinch_x];
minBOLy = [Xb pinch_y];
if pinch_x < Z
minFOLx = [pinch_x Z];
minFOLy = [pinch_y Z];
elseif pinch_x > Z
minFOLx = [Z pinch_x];
minFOLy = [Z pinch_y];
else
minFOLx = [Z Z];
minFOLy = [Z pinch_y];
end
plot(minTOLx , minTOLy, 'g')
plot(minBOLx , minBOLy, 'r')
plot(minFOLx , minFOLy, 'c')
end
pause
if column == 1;
c = figure;
set(c, 'name', 'Column Diagram', 'numbertitle', 'off')
hold on
title('Column at Specs [assuming total condenser and partial reboiler')
axis([0 100 0 100])
col_base = 20;
col_height = col_base + 60;
col_width = col_base + 20;
trays = stage_tot;
feed_tray = FeedLoc;
tray_height = (col_height - col_base) / (trays - 1);
tray_point = col_height - 0.5*tray_height;
bottoms_point = col_base + 0.5*tray_height;
xp1=r*cos(angles);
yp1=r*sin(angles);
downlinex = [reboiler_centerx reboiler_centerx];
downliney = [(reboiler_centery + r) bottoms_point];
horizontal_linex = [col_width reboiler_centerx];
horizontal_liney = [bottoms_point bottoms_point];
arrow3x = [col_width col_width+3];
arrow5x = [(reboiler_centerx + r) (reboiler_centerx + 10)];
arrow5y = [reboiler_centery reboiler_centery];
arrow3y = [bottoms_point (bottoms_point+2)];
arrow3y2 = [bottoms_point (bottoms_point-2)];
arrow7x = [reboiler_centerx+r-1.5 reboiler_centerx+r];
arrow7x2 = [arrow7x(2) arrow7x(2)];
arrow7y1 = [upslash_y(2) upslash_y(2)];
arrow7y2 = [upslash_y(2) (upslash_y(2)-2.5)];
arrow6x = [arrow5x(2)-2 arrow5x(2)];
arrow6y1 = [arrow5y(1)+2 arrow5y(1)];
arrow6y2 = [arrow5y(1)-2 arrow5y(1)];
arrow8x = [(reboiler_centerx-r-2) (reboiler_centerx-r)];
arrow8y1 = [(reboiler_centery+2) reboiler_centery];
arrow8y2 = [(reboiler_centery-2) reboiler_centery];
arrow9x = [(condenser_centerx-r-2) (condenser_centerx-r)];
arrow9y1 = [(condenser_centery+2) condenser_centery];
arrow9y2 = [(condenser_centery-2) condenser_centery];
plot(arrow8x, arrow8y1,'k')
plot(arrow8x, arrow8y2,'k')
plot(arrow9x, arrow9y1,'k')
plot(arrow9x, arrow9y2,'k')
plot(arrow6x, arrow6y1,'k')
plot(arrow6x, arrow6y2,'k')
plot(arrow7x, arrow7y1,'k')
plot(arrow7x2, arrow7y2,'k')
plot(arrow5x, arrow5y,'k')
plot(arrow3x, arrow3y2,'k')
plot(arrow3x, arrow3y,'k')
plot(horizontal_linex, horizontal_liney,'k')
plot(downlinex, downliney, 'k')
plot(reboiler_centerx+xp1,reboiler_centery+yp1, 'k');
plot(upslash_x, upslash_y, 'k');
plot(rightline3, rightline4, 'k')
plot(upline_x1, upline_y1, 'k')
tray = col_height;
tray_x = [col_base col_width];
note_position = 0.5*(col_width - col_base);
for nn = 1:(trays-1)
tray = tray - tray_height;
tray_y = [tray tray];
plot(tray_x, tray_y, 'b') ;
if nn == feed_tray && nn ~= trays
feed_x = [10 20];
feed_y = [(0.5*tray_height + tray) (0.5*tray_height + tray)];
plot(feed_x, feed_y, 'r')
arrow_x = [17 20];
arrow_y_top = [(2+feed_y(1)) feed_y(1)];
arrow_y_bot = [(feed_y(1)-2) feed_y(1)];
plot(arrow_x, arrow_y_top, 'r')
plot(arrow_x, arrow_y_bot, 'r')
end
end
if feed_tray == trays
end
end
end
plot(LWx,
plot(RWx,
plot(TWx,
plot(BWx,
LWy,
RWy,
TWy,
BWy,
'k')
'k')
'k')
'k')