Advertisement
Guest User

SOchat

a guest
Feb 4th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.51 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Feb  5 01:42:06 2019
  4.  
  5. @author: paritosh
  6. """
  7.  
  8. import numpy as np
  9. from scipy.integrate import odeint
  10. import matplotlib.pyplot as plt
  11. import math as m
  12. #import thermo.mixture as tm  # Module de thermodynamique
  13.  
  14. # Constante des gaz parfaits
  15. R = 8.314  # J / (mol K)
  16.  
  17. # Réacteur multitubulaire
  18. # Catalyseur
  19. poro = 0.4  # Porosité
  20. eta_isu = 1  # efficacité
  21. dp = 0.002  # taille des particules en m
  22. # Paramètres de tubes
  23. L = 10  # longueur des tubes en m (imposée)
  24. d = 0.04  # diamètre de tube en m (à faire varier)
  25. NT = 54166  # nombre de tubes (à faire varier)
  26. S = (m.pi * d**2) / 4  # section d'un tube en m²
  27. # Paramètres du réacteur R1
  28. Stot = S * NT  # section totale de réaction en m²
  29. Ftot = 500 * 1000 / 3600  # débit massique totale kg/s
  30. # Densité du mélange à l'entrée du réacteur R1
  31. rho_0 = 12.39  # kg/m3
  32. Ftot_v = Ftot / rho_0  # Débit volumique total m3/s
  33. uv0 = Ftot_v / Stot  # vitesse en fut vide m/s
  34. n = (141.18 - 2) / 14  # Nombre moyen de carbones
  35.  
  36. # Masses molaires des différents constituants dont l'alcane moyen MW_Cn
  37. MW_CO, MW_H2, MW_N2, MW_Cn, MW_H2O = 0.028, 0.002, 0.028, 0.1412, 0.018  # masses molaires en kg/mol
  38.  
  39. # Fonction de résoluton du sytème PH1
  40.  
  41.  
  42. def FT(y, z):
  43.     # Initialisation du vecteur
  44.     dCOz = y[0]  # fraction massique
  45.     dH2z = y[1]  # fraction massique
  46.     dCNz = y[3]  # fraction massique
  47.     dH2Oz = y[4]  # fraction massique
  48.     Tmel = y[5]  # Température K
  49.     Pmel = y[6]  # Pression en Pa
  50.     uv = y[7]  # vitesse en fût vide en m/s
  51.  
  52.     # Calcul des fractions molaires de CO et H2 dans la tranche dz
  53.     Wtot = dCOz / MW_CO + dH2z / MW_H2 + 0.414 / MW_N2 + dCNz / MW_Cn + dH2Oz / MW_H2O
  54.     xCO = (dCOz / MW_CO) / Wtot
  55.     xH2 = (dH2z / MW_H2) / Wtot
  56.     xN2 = (0.414 / MW_N2) / Wtot
  57.     xCn = (dCNz / MW_Cn) / Wtot
  58.     xH2O = (dH2Oz / MW_H2O) / Wtot
  59.  
  60.     # Masse molaire moyenne
  61.     Mm = xCO * MW_CO + xH2 * MW_H2 + xN2 * MW_N2 + xCn * MW_Cn + xH2O * MW_H2O
  62.  
  63.     # Calcul de rho_melange
  64.     rho_mix = Pmel * Mm / (R * Tmel)
  65.  
  66.     # Capacité calorifique thermique du mélange gazeux
  67.     # Utilisation des fonctions du module de calcul
  68.     # Réference : https://thermo.readthedocs.io/en/latest/modules.html
  69.     Cpg_mix = 2000 #MODIFIED #tm.Mixture(['carbon monoxide', 'hydrogen', 'nitrogen', 'decane', 'water'], ws=[dCOz, dH2z, 0.414, dCNz, dH2Oz], T=Tmel, P=Pmel).Cpg
  70.  
  71.     # Calcul de la vitesse
  72.     uv = rho_0 * uv0 / rho_mix
  73.  
  74.     # Paramètres de la loi cinétique
  75.     a = 126 * m.exp(-100000 / (R * Tmel))
  76.     b = 3.7 * m.exp(-2 * 10000 / (R * Tmel))
  77.  
  78.     # Calculs des concentrations de CO et H2 dans dz pour le calcul de la cinétique
  79.     CO = Pmel * xCO / (R * Tmel)
  80.     H2 = Pmel * xH2 / (R * Tmel)
  81.  
  82.     # Loi cinétique
  83.     rFT = ((a * CO * H2) / ((1 + b * CO)**2))  # molCO/(g_Co.s)
  84.     rr = rFT * 950 * 1000  # molCO/(m3_reacteur.s) car masse volumique du cata en kg/m3_reacteur
  85.     r = 0.3 * rr / (1 - poro)  # molCO/(m3_cata_actif.s) car 30% de phase active assimilée au Co et Vreacteur = (1-poro)V_cata
  86.  
  87.     # Bilan de matière ------------------------------------------------------------------------------------
  88.     # Variation des fractions massiques en fonction de la longueur du réacteur
  89.     dCOz = - eta_isu * (1 - poro) * MW_CO / (rho_0 * uv) * r
  90.     dH2z = - ((2 * n + 1) / n) * eta_isu * (1 - poro) * MW_H2 / (rho_0 * uv) * r
  91.     dCNz = 1 / n * eta_isu * (1 - poro) * MW_Cn / (rho_0 * uv) * r
  92.     dH2Oz = eta_isu * (1 - poro) * MW_H2O / (rho_0 * uv) * r
  93.  
  94.     # Bilan thermique -------------------------------------------------------------------------------------
  95.     # Voir détails corrélations "Daniel Schweich, Genie de la réaction chimique avancée" à la fin du rapport
  96.     Tp = 201 + 273  # Temperature à la paroi K
  97.     drH = -165 * 1000  # en J / mol_CO
  98.  
  99.     em = 1  # Emissivité
  100.     lambf = 0.06  # Conductivité thermique du mélange gazeux moyen
  101.     lambs = 0.4  # cf cours Génie de la réaction chimique avancée
  102.  
  103.     # Calcul du reynolds
  104.     nu = 1.9377 * 10**(-6)  # viscosité cinématique m2 / s
  105.     mu = rho_mix * nu  # viscosité dynamique kg / (m.s)
  106.     uv = (uv0 * rho_0) / rho_mix  # vitesse du gaz en m / s
  107.     Re = rho_mix * uv * dp / mu  # Nombre de Reynolds
  108.  
  109.     # new correlation
  110.     # Calcul du lamb_sfer
  111.     lamb2 = 0.227 * 10 ** (-6) * em / (2 - em) * dp * Tmel ** 3
  112.     lamb1 = 0.227 * 10 ** (-6) * Tmel ** 3 * dp / (1 + poro / (2 * (1 - poro)) * (1 - em) / em)
  113.     lamb_sf0 = (1 - m.sqrt(1 - poro)) * (1 + poro * (lamb2 / lambf))
  114.     beta = 0.95  # hypothèse
  115.     lamb_sf0 = poro * (1 + beta * lamb1 / lambf)
  116.     Pe_tr = 8.65 * (1 + 19.4 * (dp / d) ** 2)
  117.     Pr = mu * Cpg_mix / lambf
  118.     lamb_ter = Re * Pr / Pe_tr
  119.     lamb_sfer = (lamb_sf0 + lamb_ter) * lambf
  120.  
  121.     # Calcul du h_intsf
  122.     phi_w = 2.410 * 10 ** (-3) * (d / dp) ** 1.58
  123.     h_ints = (1 - poro) * lambf / ((lambf / (3 * lambs) + phi_w) * dp)
  124.     h_intf0 = 2 * poro * (lambf / dp)
  125.     h_intt = 0.0835 * Re ** 0.91 * (lambf / dp)
  126.     h_intf = h_intf0 + h_intt
  127.     h_intsf = h_ints + h_intf
  128.  
  129.     # Calcul de h
  130.     h_int = d / (8 * lamb_sfer) + 1 / h_intsf
  131.     h = 1 / h_int
  132.     # fin new correlations
  133.  
  134.     # Variation de la température en fonction de la longueur du réacteur
  135.     dT = 4 * h / (d * rho_0 * uv0 * Cpg_mix) * (Tp - Tmel) + (1 - poro) / (rho_0 * uv0 * Cpg_mix) * (-drH) * eta_isu * r
  136.  
  137.     # Bilan de quantité de mouvement ------------------------------------------------------------------------------
  138.     # Bilan sur la pression
  139.     f = ((1 - poro) / poro ** 3) * (4.2 * ((1 - poro) / Re) ** (1 / 6) + 150 * (1 - poro) / Re)
  140.     dP = -f * (uv0 * rho_0) ** 2 / (rho_mix * dp)
  141.  
  142.     print("%.4f" % uv)
  143.     print("LOOKIE HERE {}".format(uv))
  144.     print("TEST {}".format(dCNz))
  145.  
  146.     return [dCOz, dH2z, 0.414, dCNz, dH2Oz, dT, dP, uv]
  147.  
  148.  
  149. # Résolution ------------------------------------------------------------------------------------------------------
  150. C0 = [0.516, 0.070, 0.414, 0, 0, 498, 35 * 10**5, uv0]
  151. z = np.linspace(0, L, 100)
  152. y = odeint(FT, C0, z)
  153.  
  154. # Graphiques -------------------------------------------------------------------------------------------------------
  155. CO = y[:, 0]
  156. H2 = y[:, 1]
  157. N2 = y[:, 2]
  158. CN = y[:, 3]
  159. H2O = y[:, 4]
  160.  
  161. T = y[:, 5]
  162. P = y[:, 6]
  163. uv = y[:, 7]
  164. uv = np.diff(uv) #MODIFIED
  165.  
  166. b = len(z)
  167. print('rho_0 = ', " %.2f" % rho_0, 'kg/m3')
  168. print('uv0 = ', "%.2f" % uv0, 'm/s')
  169. print('Les fractions massiques finales sont : wCO_s =' " %.3f" % y[b - 1, 0], ', wH2_s =' " %.3f" % y[b - 1, 1], ', wCN_s =' " %.3f" % y[b - 1, 3], ', wH2O_s =' " %.3f" % y[b - 1, 4])
  170. print('La conversion en CO est :', " %.2f" % (100 * (1 - y[b - 1, 0] / y[0, 0])), '%')
  171. print('La température finale est ', " %.1f" % y[b - 1, 5], 'K')
  172. print('La pression finale est ', " %.0f" % y[b - 1, 6], 'Pa')
  173. print('DeltaT_max = ', " %.0f" % abs(max(T) - T[0]), 'K')
  174.  
  175.  
  176. # Graphiques
  177. # Il faut décommenter les graphiques pour les voir, par défaut seul les fractions massiques sont visibles
  178.  
  179. # --------------------------------------------------------------------
  180. fig, ax = plt.subplots()  # Ne pas mettre cette ligne en commentaire
  181.  
  182. # ---------------------------------------------------------------------
  183. # Graphique vitesse en fût vide
  184. ax.plot(z[:-1], uv, 'r:', label='uv') #MODIFIED
  185. legend = ax.legend(loc='upper right', shadow=True, fontsize='x-large')
  186. legend.get_frame().set_facecolor('#00FFCC')
  187. plt.xlabel('Longueur du réacteur en m')
  188. plt.ylabel('Vitesse en fût vide en m/s')
  189. plt.title('Vitesse en fût vide en fonction de la longueur du réacteur R1')
  190. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement