Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Soluciones a Tareas Masa 2

Views: 20869

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/L q = [0.026, 0.053 , 0.075, 0.082, 0.123, 0.129] # g/g, kg/kg html('<h2>Solución</h2>') datos_eq = zip(c,q) # Combina los datos de equilibrio %var c_A, q_A_max, K_Ac, n L = 15 # [L] c0 = 1.30 # [mol/L] antes 1.39 M = 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áfica gr_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_A S2m = L*(c_A-c2)/(qA_L(c_A=c2) + q0) # Alúmina requerida en la etapa 2 con una concentración de entrada c_A STm = S1m+S2m # Alúmina total S_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 experimentales lista_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 adicionales t = 28.3 # [°C]g/kg P = 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 datos lista_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 tiempos t_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 utilizar qA_rup = G_s*Y_0*10^-6/(L*rho_b) * numerical_integral(1-Y/Y_0, 0, t_rupt)[0] #+ q_0 print "qA_rupt =", qA_rup.numerical_approx(digits = 3), "kg/kg" qA_max = G_s*Y_0*10^-6/(L*rho_b) * t_ideal + q_0 print "qA_max =", qA_max.numerical_approx(digits = 3), "kg/kg" f_util = qA_rup/qA_max f_nout = 1-f_util print "Fracción utilizada =", f_util.numerical_approx(digits = 3) print "Fracción no utilizada =", f_nout.numerical_approx(digits = 3) LES = L*f_util LUB = L*f_nout print "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_rup t_rupt_b = LES_b/LES*t_rupt print "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_c print "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