Professional Documents
Culture Documents
Rigorous Distillation Calculation For A Three-Component, Five-Stage Separation Tower
Rigorous Distillation Calculation For A Three-Component, Five-Stage Separation Tower
Separation Tower
Maricarmen López Alvarez
Summary.
The following investigation consists of carrying out complete mass and energy
balances for a 3-component, 5-stage distillation tower. This balance is carried out by
means of the MESH equations to obtain the temperatures of the stages and of the
condensate, as well as the composition within the column, making use of Polymath
6.10 by means of the system of Nonlinear Equations and of Mathlab by means of the
NLEQ and FSOLVER methods.
Introduction
Until 1950, the calculations corresponding to the problems of rectification of distillation towers, had to be done
"by hand". Although rigorous methods were available, they were difficult to apply.
The final design of the multi-stage equipment requires a rigorous determination of the temperature, pressure,
flow rates and compositions of the streams and heat transfer rates for each stage. Given the high non-linearity
of the equations that describe the process, it is necessary to solve the general problem by the use of iterative
procedures and the various methods differ in the selection of the set of independent variables.
The first attempts to solve this problem were by means of a system of equations formed by the material
balances, the equilibrium relations, the summation of mole fractions and the enthalpy balances, these
balances are known as MESH equations.
The MESH equations (M = mass balance, E = equilibrium, S = sum of molar or mass fractions, and H =
enthalpy balance) are described below.
L j - 1 x i, j - 1+ F j z i, j + V j + 1 and i, j + 1 = ( L j + OR j) x i, j + ¿
and i, j = k i, j x i, j
nc
∑ and i, j = 1
i=1
nc
∑ x i, j = 1
i=1
V
( ¿¿ j + W j) H j
Q + L j - 1 h j - 1+ F j h Fj + V j + 1 H j + 1 = ( L j + OR j) h j + ¿
One of the S-equations can be replaced by the equation for the balance of total moles
L j - 1+ F j + V j + 1 = L j + OR j + V j + W j
This system of equations results from applying component by component methods. This usually results in a
matrix of coefficients in the form of a tridiagonal matrix, and they are solved using a progressive elimination
method called the Thomas algorithm.
Currently it is possible to perform more quickly and efficiently thanks to different programs capable of solving
number analysis techniques.
Next we will present a problem of a distillation tower, where we will use the MESH equations and different
methods to solve this problem. The use of 2 different programs Polymath 6 and Mathlab will be used
Methodology
A simple distillation column with 5 stages was considered to separate Propane (1). n-Butane (2), and i-Butane
(3). The supply current was considered as Z 1 = 0.10, Z 2 = 0.70, Z 3 = 0.20 respectively. The amount of heat supplied
to the boiler is 9183 BTU / h The distillate is extracted at a rate of 0.36 lbmol / h and the product from the
bottom of the column is
0.64lbmol / h.
First, the MESH equations were developed for the mole per component balance and the enthalpy balance.
The 4 component balance and energy balance equations were developed for each of the 3 components and
for each stage. The equations were entered in Nonlinear Equations, the way the equations were entered, we
can see it in Appendix A, which is at the end of the article. Here the order of the equations does not affect the
iteration of the equations.
Through the MAtlab program, 2 different methods NLEQ and FSolve were developed to solve the problem.
The development of the equations used in these two methods were exactly the same as in the Polymath
program. The only difference is that a different programming language is used here and the format needs to
be changed a bit.
The order in which the commands are appended if they affect the execution of the method, first the command
must be written according to the method to be used, then the energy balance and component equations must
be entered, at the end the equations of the implicit variables of temperature and steam flow velocity for each
stage.
The more detailed description of these commands can be seen in appendix B for the NLEQ method and
appendix C for the Fsolve method.
It is a method that performs non-linear numerical solution (NL) equations (EQ) Specially designed for
numerically sensitive problems.
A more detailed description of the commands entered and how the energy and component balances were
written are described in Appendix B.
The Fsolve method implements three different algorithms: trust region dogleg, trust region reflective, and
Levenberg-Marquardt
X = fsolve (FUN, X0) starts at matrix X0 and tries to solve the equations in FUN. FUN accepts the input X and
returns a vector (matrix) of the equation F values evaluated at X.
X = fsolve (FUN, X0, OPTIONS) solves the equations with the default optimization parameters replaced by
the option values, an argument created with the OPTIMOPTIONS function. See OPTIMOPTIONS for more
details. Use the Jacobian option to specify that fun also returns a second output argument that J is the
Jacobian matrix at point X. If FUN returns a vector F of the components of M when X has length n, then J is a
matrix of m by n where J (i, j) is the partial derivative of F (i) with respect to x (j). (Note that the Jacobian J is
the transpose of the slope of F.)
X = fsolve (PROBLEM) solves defined in the system problem. PROBLEM is a structure with the FUN
function in PROBLEM.objective, the starting point in PROBLEM.x0, the options structure in
PROBLEM.options, and the solver name 'fsolve' in PROBLEM.solver. Use this syntax to solve a problem
exported from OPTIMTOOL on the command line. The PROBLEM structure must have all the fields.
A more detailed description of the commands entered and how the energy and component balances were
written are described in Appendix C.
In this method, a notable modification was made when entering the enthalpy balance equations since with the
second technique that Fsolve uses, it was not possible to iterate the results correctly, apart from the fact that it
took a long time to execute the results. As we know, this method occupies the Jacobian option for the
representation of the data and the results of the Jacobian matrix were very large values compared to others
that were too small, so we chose to divide it by 1000, so that at the time of iteration it would not take long so
much.
Results
The results obtained by the 2 programs with the different methods Nonlinear Equations, NLEQ, FSolve
were compiled in the following tables.
x11 x21 x31 x12 x22 x32
Polymat 0.10619 0.20914 0.09053 0.70699 0.20246
0.6846589
h6 12 99 85 19 96
NLEQ 0.1062 0.6847 0.2091 0.0905 0.707 0.2025
Solver 1 0.1062 0.6847 0.2091 0.0905 0.707 0.2025
Solver 2 0.1062 0.6847 0.2091 0.0905 0.707 0.2025
Solver
3 0.1062 0.6847 0.2091 0.0905 0.707 0.2025
Table 2 Composition of the three components in the
stage 1 and 2
tf t0 t1 t2 t3 t4 t5
Polymat 681,981 680,899 683,199 684,954 687,229 690,193
668.2417
h6 5 9 9 9 4 9
681,981 680,899 683,199 684,954 687,229 690.19 9
NLEQ 5 668.2417 9 9 4 39
681,981 680,899 683,199 684,954 687,229 690.19 9
Solver 1 5 668.2417 9 9 4 39
681,981 680,899 683,199 684,954 687,229 690.19
Solver 2 5 668.2417 9 9 9 4 39
Solver 681,981 680,899 683,199 684,954 687,229 690.19
3 5 668.2417 9 9 9 4 39
Table 5. Temperature of each stage
of the column
Conclusions
As we can see in the tables of results, the values obtained by the 5 different methods were exactly the same,
so we can ensure that any of these techniques are sufficiently accurate to report the data obtained from the
temperatures and compositions of each stage.
References
P. Deuflhard:
Newton Methods for Nonlinear Problems. - Affine Invariance
and Adaptive Algorithms.
Computational Mathematics Series 35, Springer (2004)
U. Nowak, L. Weimann:
A Family of Newton Codes for Systems of Highly Nonlinear Equations - Algorithm,
Implementation, Application. ZIB, Technical Report TR 90-10 (December 1990)
APPENDIX A
# General specifications
# Enthalpy Balance
hv1 = k11 * x11 * hv11 + k21 * x21 * hv21 + k31 * x31 * hv31 hv2 = k12 * x12
* hv12 + k22 * x22 * hv22 + k32 * x32 * hv32 hv3 = k13 * x13 * hv13 + k23 *
x23 * hv23 + k33 * x33 * hv33 hv4 = k14 * x14 * hv14 + k24 * x24 * hv24 +
k34 * x34 * hv34 hv5 = k15 * x15 * hv15 + k25 * x25 * hv25 + k35 * x35 *
hv35
V1 (0) = 1.1
V2 (0) = 1.136
V3 (0) = 1.135
V4 (0) = 1.143
V5 (0) = 1.6149
tf (0) = 520
t0 (0) = 670
t1 (0) = 674
t2 (0) = 678
t3 (0) = 682
t4 (0) = 686
t5 (0) = 690
APPENDIX B
Matlab
% assignment of variables
x11 = xin (1);
x21 = xin (2);
x31 = xin (3);
V1 = xin (16);
V2 = xin (17);
V3 = xin (18);
V4 = xin (19);
V5 = xin (20);
tf = xin (21);
t0 = xin (22);
t1 = xin (23);
t2 = xin (24);
t3 = xin (25);
t4 = xin (26);
t5 = xin (27);
%
k1f = tf * (-14.512474e-2 + 53.638924e-5 * tf 12 * tf ^ 3) ^ 3; - 5.3051604e-8 * tf ^ 2 - 173.58329e-
x10 = k 11 * x11;
x20 = k 21 * x21;
x30 = k 31 * x31;
L0 = V1 - D;
L1 = V2 - D;
L2 = V3 + F-D; L3 = V4 +
F-D; L4 = V5 + F-D; L5 = B;
fun (4) = L1 * x11 - (V2 * k12 + L2) * x12 + V3 * k13 * x13 + z1 * F; fun (5) = L1 * x21 - (V2 * k22 + L2) * x22 + V3 *
k23 * x23 + z2 * F;
fun (6) = L1 * x31 - (V2 * k32 + L2) * x32 + V3 * k33 * x33 + z3 * F;
fun (7) = L2 * x12 - (V3 * k13 + L3) * x13 + V4 * k14 * x14; fun (8) = L2 * x22 - (V3 * k23 + L3) * x23
+ V4 * k24 * x24; fun (9) = L2 * x32 - (V3 * k33 + L3) * x33 + V4 * k34 * x34;
fun (10) = L3 * x13 - (V4 * k14 + L4) * x14 + V5 * k15 * x15; fun (11) = L3 * x23 - (V4 * k24 + L4) * x24
+ V5 * k25 * x25; fun (12) = L3 * x33 - (V4 * k34 + L4) * x34 + V5 * k35 * x35;
fun (13) = L4 * x14 - (V5 * k15 + B) * x15; fun (14) = L4 * x24 - (V5 * k25
+ B) * x25; fun (15) = L4 * x34 - (V5 * k35 + B) * x35;
APPENDIX C
%
function tresycincofsolve
% three components five phases fsolve
xin = [0.2; 0.6; 0.2; 0.15; 0.15; 0.15; 0.15; 0.5177; 0.177; ...
0.085, 0.61912; 0.12912; 0.05; 0.76; 0.2; ...
1.1; 1,136; 1,135; 1,143; 1.6149; 520; 670; 674; 678; 682; 686; 690];
% Make a starting guess at the solution
options = optimset ( 'Display' , 'iter' , 'Algorithm' , 'Levenberg-Marquardt' ); [x, ~, exitflag, ~, ~] = fsolve (@ myfun, xin, options)
end
% separating variables
F = 1; z1 = 0.10; z2 = 0.70; z3 = 0.20; B = 0.64; D = 0.36; Q = 9183;
% assignment of variables
x11 = xin (1);
x21 = xin (2);
x31 = xin (3);
V1 = xin (16);
V2 = xin (17);
V3 = xin (18);
V4 = xin (19);
V5 = xin (20);
tf = xin (21);
t0 = xin (22);
t1 = xin (23);
t2 = xin (24);
t3 = xin (25);
t4 = xin (26);
t5 = xin (27);
%
k1f = tf * (-14.512474e-2 + 53.638924e-5 * tf k10 = t0 * - 5.3051604e-8 * tf ^ 2 - 173.58329e-12 * tf ^ 3) ^ 3;
(-14.512474e-2 + 53.638924e-5 * t0 k11 = t1 * (-14.512474e-2 + - 5.3051604e-8 * t0 ^ 2 - 173.58329e-12 * t0 ^ 3) ^ 3;
53.638924e-5 * t1 k12 = t2 * (-14.512474e-2 + 53.638924e-5 * t2 k13 - 5.3051604e-8 * t1 ^ 2 - 173.58329e-12 * t1 ^ 3) ^ 3;
= t3 * (-14.512474e-2 + 53.638924e-5 * t3 k14 = t4 * (-14.512474e-2 - 5.3051604e-8 * t2 ^ 2 - 173.58329e-12 * t2 ^ 3) ^ 3;
+ 53.638924e-5 * t4 k15 = t5 * (-14.512474e-2 + 53.638924e-5 * t5 - 5.3051604e-8 * t3 ^ 2 - 173.58329e-12 * t3 ^ 3) ^ 3;
- 5.3051604e-8 * t4 ^ 2 - 173.58329e-12 * t4 ^ 3) ^ 3;
- 5.3051604e-8 * t5 ^ 2 - 173.58329e-12 * t5 ^ 3) ^ 3;
k2f = tf * (-14.181715e-2 + 36.866353e-5 * tf k20 = t0 * + 16.521412e-8 * tf ^ 2 - 248.23843e-12 * tf ^ 3) ^ 3;
(-14.181715e-2 + 36.866353e-5 * t0 k21 = t1 * (-14.181715e-2 + + 16.521412e-8 * t0 ^ 2 - 248.23843e-12 * t0 ^ 3) ^ 3;
36.866353e-5 * t1 k22 = t2 * (-14.181715e-2 + 36.866353e-5 * t2 k23 + 16.521412e-8 * t1 ^ 2 - 248.23843e-12 * t1 ^ 3) ^ 3;
= t3 * (-14.181715e-2 + 36.866353e-5 * t3 k24 = t4 * (-14.181715e-2 + 16.521412e-8 * t2 ^ 2 - 248.23843e-12 * t2 ^ 3) ^ 3;
+ 36.866353e-5 * t4 k25 = t5 * (-14.181715e-2 + 36.866353e-5 * t5 + 16.521412e-8 * t3 ^ 2 - 248.23843e-12 * t3 ^ 3) ^ 3;
+ 16.521412e-8 * t4 ^ 2 - 248.23843e-12 * t4 ^ 3) ^ 3;
+ 16.521412e-8 * t5 ^ 2 - 248.23843e-12 * t5 ^ 3) ^ 3;
L0 = V1 - D;
L1 = V2 - D;
L2 = V3 + F-D; L3 = V4 +
F-D; L4 = V5 + F-D; L5 = B;
fun (4) = L1 * x11 - (V2 fun (5) = L1 * * k12 + L2) * x12 + V3 * k13 * x13 + z1 * F;
x21 - (V2 fun (6) = L1 * x31 - (V2 * k22 + L2) * x22 + V3 * k23 * x23 + z2 * F;
* k32 + L2) * x32 + V3 * k33 * x33 + z3 * F;
fun (7) = L2 * x12 - (V3 fun (8) = L2 * * k13 + L3) * x13 + V4 * k14 * x14;
x22 - (V3 fun (9) = L2 * x32 - (V3 * k23 + L3) * x23 + V4 * k24 * x24;
* k33 + L3) * x33 + V4 * k34 * x34;
fun (10) = L3 * x13 - (V4 fun (11) = L3 * * k14 + L4) * x14 + V5 * k15 * x15;
x23 - (V4 fun (12) = L3 * x33 - (V4 * k24 + L4) * x24 + V5 * k25 * x25;
* k34 + L4) * x34 + V5 * k35 * x35;
fun (16) = (-V1 * hv1 + fun (17) = (-V2 * V2 * hv2 - L1 * hl1 + L0 * h0) / 1e4;
hv2 + V fun (18) = (-V3 * hv3 + V fun (19)3 * hv3 + L1 * hl1 - L2 * hl2 + hf * F) / 1e4;
= (-V4 * hv4 + V fun (20) ) = (-V5 * hv5 + 4 * hv4 + L2 * hl2 - L3 * hl3) / 1e4;
5 * hv5 + L3 * hl3 - L4 * hl4) / 1e4;
Q + L4 * hl4 - L5 * hl5) / 1e4;