CoCalc Public FilesOptimización.sagewsOpen with one click!
Authors: Luis Arrieta, Jose Valverde
Views : 37
Description: -
#Mezcla Ternaria (0)-N-Pentano (1)-N-Heptano (2)-Benceno import math import matplotlib.pyplot as plt z_i=[0.3,0.3,0.4] #mol_i/mol M_i=[72.15,100.21,78.11] #kg/kmol Antoine = [[13.7667, 2451.88, 232.014], [13.8622, 2910.26, 216.432], [13.7819, 2726.81, 217.572]] T=70 #/°C p_isat=[] #kPa p_b=0 #kPa p_r=0 #kPa for i in range(len(Antoine)): p_isat.append(round(math.exp((Antoine[i][0])-((Antoine[i][1])/(T+(Antoine[i][2])))),4)) for i in range(len(z_i)): p_b+=z_i[i]*p_isat[i] p_r+=(z_i[i]/p_isat[i]) p_r=(1/p_r) print(p_r,p_b)
(71.9959892590972, 126.767690000000)
# Inicialmente se va a variar la presión para ver como se comportan V, y1 y su producto (v*y1) # La presión solo puede variar entre los valores de presión de rocío y de burbuja, pues: # por debajo de la presión de rocío solo se obtiene un vapor sobrecalentado lo que generaría que la composición de salida sea igual a la de la entrada # y por encima de la presión de burbuja solo se obtiene líquido comprimido, por lo cual no se consigue lo que intereza, lo cual es el vapor P = p_r %var F,L,V,x1,x2,x3,y1,y2,y3 x_i=[x1,x2,x3] y_i=[y1,y2,y3] v_array = [] y1_array = [] p_array = [] while P <= p_b: eq=[] for i in range(len(z_i)): eq.append(0==-0.95*y_i[i]*V-z_i[i]*F+x_i[i]*L+y_i[i]*V) for i in range(len(p_isat)): eq.append(0==x_i[i]*p_isat[i]-y_i[i]*P) eq.append(0==-0.95*V+L+V-F) eq.append(1==x1+x2+x3) eq.append(1==y1+y2+y3) eq.append(F==100) soluciones=solve([eq[0],eq[1],eq[2],eq[3],eq[4],eq[5],eq[6],eq[7],eq[8],eq[9]],F,L,V,x1,x2,x3,y1,y2,y3,solution_dict=True) p_array.append(P) y1_aux = [[s[y1].n(20)] for s in soluciones] y1_array.append(y1_aux[0][0]) v_aux = [[s[V].n(20)] for s in soluciones] v_array.append(v_aux[0][0]) P+=5 print (p_array) print (v_array) print (y1_array)
[71.9959892590972, 76.9959892590972, 81.9959892590972, 86.9959892590972, 91.9959892590972, 96.9959892590972, 101.995989259097, 106.995989259097, 111.995989259097, 116.995989259097, 121.995989259097] [2000.0, 1646.9, 1365.9, 1135.5, 941.09, 772.36, 621.84, 484.15, 355.30, 232.27, 112.68] [0.30000, 0.34429, 0.38733, 0.42842, 0.46716, 0.50338, 0.53708, 0.56837, 0.59740, 0.62434, 0.64937]
plt.plot(p_array, y1_array, 'go-') plt.axis([65,p_b , 0.25, 0.7]) plt.xlabel('P / kPa') plt.ylabel('y1') plt.show() # En la gráfica se observa que, como ya se mencionó, a la presión de rocío, la fracción y1 es igual a z1 # además, y1 aumenta con el aumento de la presión hasta llegar a un valor máximo justo antes de la presión de burbuja # este valor máximo es aproximadamente y1 = 0,64937
[<matplotlib.lines.Line2D object at 0x7fbee5669850>] [65, 126.767690000000, 0.250000000000000, 0.700000000000000] Text(0.5,0,'P / kPa') Text(0,0.5,'y1')
plt.plot(p_array,v_array, 'r^-') plt.xlabel('P / kPa') plt.ylabel('V') plt.show() # De la grafica de la cantidad de vapor contra la presión se observa que la cantidad de vapor disminuye conforme aumenta la presión, # hasta eventualmente ser cero cuando la presión es igual a la de burbuja
[<matplotlib.lines.Line2D object at 0x7fbee54d2590>] Text(0.5,0,'P / kPa') Text(0,0.5,'V')
n_pentano = [] for i in range(len(p_array)): n_pentano.append(y1_array[i]*v_array[i]) plt.plot(p_array,n_pentano, 'yD-') plt.xlabel('P / kPa') plt.ylabel('N-pentano / kg') plt.show() # De la gráfica de la cantidad de masa del componente más volátil vs la presión, se nota que el producto v*y1 se comporta similar a V ante los cambios de presión
[<matplotlib.lines.Line2D object at 0x7fbee54aec10>] Text(0.5,0,'P / kPa') Text(0,0.5,'N-pentano / kg')
# Como se necesita maximizar tal que y1 sea un 80% de su valor máximo y y1 toma su valor máximo justo antes de la presión de rocío, # ahora se va a fijar la presión de 122 KPa mientras se varía la relación del reciclo, esto para encontrar el valor máximo de y1 en función tanto de p como de la cantidad del reciclo P = 122 Rr = 0 %var F,L,V,x1,x2,x3,y1,y2,y3 x_i=[x1,x2,x3] y_i=[y1,y2,y3] v_array = [] y1_array = [] Rr_array = [] while Rr <= 1: eq=[] for i in range(len(z_i)): eq.append(0==-Rr*y_i[i]*V-z_i[i]*F+x_i[i]*L+y_i[i]*V) for i in range(len(p_isat)): eq.append(0==x_i[i]*p_isat[i]-y_i[i]*P) eq.append(0==-Rr*V+L+V-F) eq.append(1==x1+x2+x3) eq.append(1==y1+y2+y3) eq.append(F==100) soluciones=solve([eq[0],eq[1],eq[2],eq[3],eq[4],eq[5],eq[6],eq[7],eq[8],eq[9]],F,L,V,x1,x2,x3,y1,y2,y3,solution_dict=True) Rr_array.append(Rr) y1_aux = [[s[y1].n(20)] for s in soluciones] y1_array.append(y1_aux[0][0]) Rr+=0.1 print (Rr_array) print (y1_array) # A partir de la salida se concluye que las composiciones y el balance de masa de todo el sistema es independiente del reciclo, #esto se puede comprobar para otras presiones obteniendo el mismo resultado ante distintos reciclos
[0, 0.100000000000000, 0.200000000000000, 0.300000000000000, 0.400000000000000, 0.500000000000000, 0.600000000000000, 0.700000000000000, 0.800000000000000, 0.900000000000000, 1.00000000000000] [0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939, 0.64939]
# Ahora, para definir la presión de operación que nos produzca al menos el 80% de y1, maximizando también la cantidad de vapor, # se busca la presión para la cual y1 = y1_max*0.8 y1_op = 0.64939*0.80 %var F,L,V,x1,x2,x3,y2,y3,P x_i=[x1,x2,x3] y_i=[y1_op,y2,y3] eq=[] for i in range(len(z_i)): eq.append(0==-0.95*y_i[i]*V-z_i[i]*F+x_i[i]*L+y_i[i]*V) for i in range(len(p_isat)): eq.append(0==x_i[i]*p_isat[i]-y_i[i]*P) eq.append(0==-0.95*V+L+V-F) eq.append(1==x1+x2+x3) eq.append(1==y1_op+y2+y3) eq.append(F==100) soluciones=solve([eq[0],eq[1],eq[2],eq[3],eq[4],eq[5],eq[6],eq[7],eq[8],eq[9]],F,L,V,x1,x2,x3,y2,y3,P,solution_dict=True) [[s[P].n(20)] for s in soluciones]
[[99.343], [-126.58]]
# Por lo tanto la presión ideal de operación es 99.34 kPa
y=x
plot(y,x,0,1)