SharedTareas / Tarea 3.1 | Problemas de sorción y método LUB.sagews.htmlOpen in CoCalc
Soluciones a Tareas Masa 2
Problema N° 1

Problema N° 1

AuthorEsteban Richmond-Salazar
Date2019-05-11T17:56:44
Projectc8d6174e-82a9-4a2a-ba1f-b0b5a9e871b3
LocationTareas/Tarea 3.1 | Problemas de sorción y método LUB.sagews
Original fileTarea 3.1 | Problemas de sorción y método LUB.sagews

Problema N° 1

Valor: 22 puntos

Referencia: Datos del problema 12.1-1 de Geankoplis (1998)

A continuación se muestran los datos de la isoterma de adsorción de glucosa (en agua) utilizando alúmina.

cc/(g/cm³) 0.0040 0.0087 0.019 0.024 0.094 0.195
qq/(g/g) 0.026 0.053 0.075 0.082 0.123 0.129

q=mglucosa/maluˊminaq = m_{glucosa}/m_{alúmina}

  1. [4 puntos] Ajuste a el modelo de Langmuir y Freundlich y justifique cuál de los dos modelos se ajusta mejor a los datos
  2. [4 puntos] Suponga que va a realizar la purificación de 15 L de disolución 1,30 mol/L de glucosa utilizando una etapa con 20 kg de alúmina pura. ¿Cuál es la concentración final de la disolución?
  3. [4 puntos] ¿Cuál es la concentración final de la disolución si utiliza 2 etapas a flujo cruzado, en ambas utilizando 20 kg de alumina pura?
  4. [6 puntos] ¿Cuál es la cantidad de alúmina en cada etapa que minimiza la cantidad de carbón de la configuración anterior y cuánta alúmina se ahorraría usando el mínimo?
  5. [4 puntos] ¿Cuál sería la concentración de salida si se emplea la cantidad total de sólido obtenida en el punto anterior pero usando una sola etapa?
c       =  [0.004, 0.0087, 0.019, 0.024, 0.094, 0.195] # g/cm³, kg/Lq       =  [0.026, 0.053 , 0.075, 0.082, 0.123, 0.129] # g/g, kg/kghtml('<h2>Solución</h2>')datos_eq = zip(c,q)            # Combina los datos de equilibrio%var c_A, q_A_max, K_Ac, nL        =   15         # [L]c0       =    1.30      # [mol/L]     antes 1.39M        =  180.156     # [kg/kmol]S1       =   20         # [kg]q0       =    0         # [kg/kg]S2       =   20         # [kg]c0       =  c0*M/1000   # [kg/L]html('<h3>Parte a) Ajustar a el modelo de Langmuir y Freundlich</h3>')show("===== Isoterma de Langmuir =====")qA_L(c_A) =  q_A_max*K_Ac*c_A / (1+K_Ac*c_A)ajuste    =  find_fit(datos_eq, qA_L, solution_dict = True)qA_L      =  qA_L(q_A_max= numerical_approx(ajuste[q_A_max], digits = 4), K_Ac= numerical_approx(ajuste[K_Ac], digits=4))show(r"$K_{A,c} = $ ", numerical_approx(ajuste[K_Ac], digits=4), r" L/kg; $q_{A,máx} = $",  numerical_approx(ajuste[q_A_max], digits=4), " kg/kg")show("$q_{A_L} = $", qA_L)show("===== Isoterma de Freundlich =====")qA_F(c_A) =  K_Ac*c_A^(1/n)ajuste    =  find_fit(datos_eq, qA_F, solution_dict = True)qA_F      =  qA_F(n= numerical_approx(ajuste[n], digits=4), K_Ac=numerical_approx(ajuste[K_Ac], digits=4))show(r"$K_{A,c} = $ ", numerical_approx(ajuste[K_Ac], digits=4), r" L/kg; $n = $",  numerical_approx(ajuste[n], digits=4))show("$q_{A_F} = $", qA_F)# Gráficagr_datos  =  scatter_plot(datos_eq, axes_labels = ['$c_A/(\\mathrm{kg/L})$', '$q_A/(\\mathrm{kg/kg})$'])gr_Langm  =  plot(qA_L, xmin = 0, xmax = max(max(c),c0), legend_label = 'Langmuir', color = 'blue')gr_Frlch  =  plot(qA_F, xmin = 0, xmax = max(c), legend_label = 'Freundlich', color = 'green')show(gr_datos+gr_Langm+gr_Frlch)html('<h3>Parte b) Una etapa</h3>')def Calcula_etapa(W_L, W_S, c_entra, q_entra, q_isot):    R.<c_sale> = QQ[]    q_sale     = q_isot(c_sale)    f          = c_sale - (W_S/W_L * (q_entra - q_sale) + c_entra)    csale      = find_root(f, 0, c_entra)    return [csale, q_sale(c_sale=csale)]c1, q1    =  Calcula_etapa(L, S1, c0, q0, qA_L)show (r'$c_1 = %s$ kg/L; $q_1 = %s$ kg/kg' %(numerical_approx(c1, digits = 3), numerical_approx(q1, digits=3)))html('<h3>Parte c) Dos etapas a flujo cruzado, idénticas cantidades de sólido</h3>')c2, q2    =  Calcula_etapa(L, S2, c1, q0, qA_L)show (r'$c_2 = %s$ kg/L; $q_2 = %s$ kg/kg' %(numerical_approx(c2, digits = 3), numerical_approx(q2, digits=3)))gr_etapa1 =  line([(c0,q0),(c1,q1),(c1,0)], color = 'purple', legend_label = 'Etapa 1')gr_etapa2 =  line([(c1,q0),(c2,q2),(c2,0)], color = 'magenta', legend_label = 'Etapa 2')show(gr_datos+gr_Langm+gr_etapa1+gr_etapa2)html('<h3>Parte d) Dos etapas a flujo cruzado, calcular sólido mínimo</h3>')S1m       =  L*(c0-c_A)/(qA_L(c_A) + q0)    # Alúmina requerida en la etapa 1 para obtnener una concentración c_AS2m       =  L*(c_A-c2)/(qA_L(c_A=c2) + q0)     # Alúmina requerida en la etapa 2 con una concentración de entrada c_ASTm       =  S1m+S2m     # Alúmina totalS_Tm, c1  =  find_local_minimum(STm, c2, c0)show (r"$S_{T}$ /kg $=$", STm)show (r"$S_{T, mín}= %s$ kg; $c_{1}= %s$ kg/L" %(numerical_approx(S_Tm, digits=3), numerical_approx(c1, digits=3)))show (r"$Ahorro = %s $ kg" %(numerical_approx(((S1+S2)-S_Tm), digits=3)))show (r"$S_{1}= %s$ kg; $S_{2}= %s$ kg" %(numerical_approx(S1m(c1), digits=3), numerical_approx(S2m(c1), digits=3)))html('<h3>Parte e) Una etapa con total obtenido en d)</h3>')c1, q1    =  Calcula_etapa(W_L=L, W_S=S_Tm, c_entra=c0, q_entra=q0, q_isot=qA_L)show (r'$c_1 = %s$ kg/L; $q_1 = %s$ kg/kg' %(numerical_approx(c1, digits = 3), numerical_approx(q1, digits=3)))# *** Final del código ***

Solución

Parte a) Ajustar a el modelo de Langmuir y Freundlich

===== Isoterma de Langmuir =====
KA,c=K_{A,c} = 61.43\displaystyle 61.43 L/kg; qA,maˊx=q_{A,máx} = 0.1413\displaystyle 0.1413 kg/kg
qAL=q_{A_L} = 8.678cA61.43cA+1\displaystyle \frac{8.678 \, c_{A}}{61.43 \, c_{A} + 1}
===== Isoterma de Freundlich =====
KA,c=K_{A,c} = 0.2282\displaystyle 0.2282 L/kg; n=n = 3.312\displaystyle 3.312
qAF=q_{A_F} = 0.2282cA0.3019\displaystyle 0.2282 \, c_{A}^{0.3019}

Parte b) Una etapa

c1=0.0783c_1 = 0.0783 kg/L; q1=0.117q_1 = 0.117 kg/kg

Parte c) Dos etapas a flujo cruzado, idénticas cantidades de sólido

c2=0.00939c_2 = 0.00939 kg/L; q2=0.0517q_2 = 0.0517 kg/kg

Parte d) Dos etapas a flujo cruzado, calcular sólido mínimo

STS_{T} /kg == 0.1152(61.43cA+1)(15cA3.51304200000000)cA+290.3cA2.725\displaystyle -\frac{0.1152 \, {\left(61.43 \, c_{A} + 1\right)} {\left(15 \, c_{A} - 3.51304200000000\right)}}{c_{A}} + 290.3 \, c_{A} - 2.725
ST,mıˊn=37.7S_{T, mín}= 37.7 kg; c1=0.0469c_{1}= 0.0469 kg/L
Ahorro=2.32Ahorro = 2.32 kg
S1=26.8S_{1}= 26.8 kg; S2=10.9S_{2}= 10.9 kg

Parte e) Una etapa con total obtenido en d)

c1=0.0237c_1 = 0.0237 kg/L; q1=0.0838q_1 = 0.0838 kg/kg

Problema N° 2

Valor: 15 puntos

Referencia: Adaptado de Problema 12.3-2 Geankoplis (1998)

Mediante cribas moleculares se elimina vapor de agua del nitrógeno gaseoso en un lecho relleno a 28.3 °C. La altura de la columna es de 0.268 m y la densidad del lecho es 712.8 kg/m³. La concentración inicial del agua en el sólido es q0=mH2O/mS=0.01 kg/kgq_{0} = m_{\mathrm{H_{2}O}}/m_{\mathrm{S}} = 0.01 \text{ kg/kg} y la velocidad de masa del nitrógeno gaseoso es de 4052 kg/(m² h).

La concentración inicial de agua en el gas es Y0=mH2O/mN2=926106 kg/kgY_0 = m_{\mathrm{H_{2}O}}/m_{\mathrm{N_2}} = 926*10^{-6} \text{ kg/kg}.

A continuación se muestran los datos experimentales

Se desea una concentración de salida Y=0.02Y0Y = 0.02 Y_0 en el punto de ruptura. Determine:

  1. Tiempo del punto de ruptura, fracción de la capacidad total usada hasta el punto de ruptura, la altura del lecho sin utilizar, la capacidad de carga de saturación del sólido.
  2. Si la columna se aumenta a 0.4 m, determine el nuevo tiempo de ruptura.
  3. Calcule la altura que debería tener el lecho si el tiempo de ruptura se fija en 24 h pero con un flujo de nitrógeno de 6000 kg/(m² h), manteniendo diámetro constante e iguales características del sólido.
html('<h2>Solución</h2>')# Datos experimentaleslista_t  = [0  , 9  , 9.2,  9.6, 10,  10.4,  10.8,  11.25,  11.5,  12,  12.5,  12.8] # [h]#lista_t  = [0  , 4  , 4.2,  4.6,  5,   5.4,   5.8,   6.25,   6.5,   7,   7.5,   7.8] # [h]lista_Y  = [0.6, 0.6, 2.6, 21  , 91, 235  , 418  , 630   , 717  , 855, 906  , 926  ] # [*10^-6 kg/kg]datos_t_Y  = zip(lista_t, lista_Y)# Datos adicionalest       =   28.3      # [°C]g/kgP       =    1        # [atm]L       =    0.268    # [m]rho_b   =  712.8      # [kg/m^3]q_0     =    0.01     # [kg/kg]G_s     = 4052        # [kg/(m^2 h)]Y_0     =  926        # [*10^-6 kg/kg]Y_rup   =    0.02*Y_0 # [*10^-6 kg/kg]L_parte_b =    0.4  # [m]t_rupt_c  =   24    # [h]G_s_c     = 6000    # [kg/(m^2 h)]# Ajuste de datoslista_Yn    = [Y/Y_0 for Y in lista_Y]datos_t_Yn  = zip(lista_t, lista_Yn)a, b, t   = var('a, b, t')modelo(t) = Y_0/2 * (1 + erf(a*t-b))ajuste    = find_fit(datos_t_Y, modelo, initial_guess=[1, max(lista_t)], solution_dict = True)Y(t)   = modelo(a=ajuste[a], b=ajuste[b])Y(t)# Cálculo de tiempost_sat   = max(lista_t)t_ideal = numerical_approx(numerical_integral(1-Y/Y_0, 0, max(lista_t))[0], digits = 4)t_rupt  = find_root(Y(t) == Y_rup, 0, t_sat)print "t_rupt  =", numerical_approx(t_rupt, digits = 3), "h"print "t_ideal =", t_ideal.numerical_approx(digits = 3), "h"print "t_agot  =", t_sat.numerical_approx(digits = 3), "h"# Cálculo de fracción sin utilizarqA_rup = G_s*Y_0*10^-6/(L*rho_b) * numerical_integral(1-Y/Y_0, 0, t_rupt)[0] #+ q_0print "qA_rupt =", qA_rup.numerical_approx(digits = 3), "kg/kg"qA_max = G_s*Y_0*10^-6/(L*rho_b) * t_ideal + q_0print "qA_max  =", qA_max.numerical_approx(digits = 3), "kg/kg"f_util = qA_rup/qA_maxf_nout = 1-f_utilprint "Fracción utilizada =", f_util.numerical_approx(digits = 3)print "Fracción no utilizada =", f_nout.numerical_approx(digits = 3)LES = L*f_utilLUB = L*f_noutprint "LUB =", LUB.numerical_approx(digits = 3), "m"scatter_plot(datos_t_Yn, axes_labels = ["$t/(\mathrm{h})$", ""]) \    + plot(Y/Y_0, xmin = 0, xmax=15, legend_label = "$Y/Y_0$", color = 'orange') \    + plot(1-Y/Y_0, xmin = 0, xmax=15, legend_label = "$1-Y/Y_0$", color = 'purple') \    + plot(unit_step(t-t_ideal), xmax = 15, legend_label = "$1-Y_{ideal}/Y_0$")print "=== Parte b ==="LES_b = L_parte_b - LUB# LES_2/t_rup2 = LES/t_rupt_rupt_b = LES_b/LES*t_ruptprint "LES =", LES_b.numerical_approx(digits = 3), "m"print "t_rupt =", t_rupt_b.numerical_approx(digits = 3), "h"print "=== Parte c ==="LUB_c = LUB * G_s_c/G_s# Despejando LES de q_max = m_sat/m_S = (G_s * Y0 * t_ideal)/(A_c * LES * rho_b)LES_c = G_s*Y_0*10^-6*t_rupt_c/(rho_b*qA_max)L_c = LES_c + LUB_cprint "Nuevo LUB =", LUB_c.numerical_approx(digits = 3), "m"print "Nuevo LES =", LES_c.numerical_approx(digits = 3), "m"print "Nueva L =", L_c.numerical_approx(digits = 3), "m"# *** Final del código ***

Solución

463*erf(0.9522085536048622*t - 10.389243416543025) + 463
t_rupt = 9.39 h
t_ideal = 10.9 h
t_agot = 12.8 h
qA_rupt = 0.184 kg/kg
qA_max = 0.224 kg/kg
Fracción utilizada = 0.821
Fracción no utilizada = 0.179
LUB = 0.0478 m
=== Parte b ===
LES = 0.352 m
t_rupt = 15.0 h
=== Parte c ===
Nuevo LUB = 0.0708 m
Nuevo LES = 0.563 m
Nueva L = 0.634 m