<jupyter_start><jupyter_text>| |<NAME>, ing, professeur||:---|:---||Département de génie chimique et de génie biotechnologique |** GCH200-Phénomènes d'échanges I **|  Section 18-2, diffusion binaire dans un milieu stagnantVoir les hypothèses dans le livre de Transport Phenomena.<jupyter_code>#
# <NAME>
#
#
# Préparation de l'affichage et des outils de calcul symbolique
#
import sympy as sp
from IPython.display import *
sp.init_printing(use_latex=True)
%matplotlib inline
# Paramètres, variables et fonctions

z_1,z_2,z,D_AB,X_A1,X_A2,S,delta_z,C1,C2=sp.symbols('z_1,z_2,z,D_AB,X_A1,X_A2,S,delta_z,C1,C2')                                                            
N_A=sp.symbols('N_A')
X_A=sp.Function('X_A')(z)     
#
# Bilan sur la colonne de diffusion
#
eq=(S*N_A(z)-S*N_A(z+delta_z))/(S*delta_z)
display(eq)
eq=sp.limit(eq,delta_z,0).doit()
display(eq)
fick=-D_AB/(1-X_A)*sp.diff(X_A,z)
eq=eq.subs(N_A(z),fick)
display(eq)
X_A=sp.dsolve(eq,X_A)
display(X_A)
X_A=X_A.rhs
# Pose et solution des 2 équations de conditions aux limites pour C1 et C2
condition_1=sp.Eq(X_A.subs(z,z_1)-X_A1,0)
condition_2=sp.Eq(X_A.subs(z,z_2)-X_A2,0)
constantes=sp.solve([condition_1,condition_2],sp.symbols('C1,C2'),dict=True) # C1 et C2
constantes=constantes[0]         # ramener la liste contenant le dictionnaire des constantes
display(constantes)              # sous forme de dictionnaire
X_A=X_A.subs(constantes)             #
display(X_A.simplify())
#
# La forme de l'équation est lourde, voir plus bas pour formuler de façon plus simple.
#
#
# Tracons avec des valeurs réalistes
#
dico={'z_1':0.00,'z_2':0.2,'X_A1':0.5,'X_A2':0.1}
X_Aplot=X_A.subs(dico)
display(X_Aplot)
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize']=10,8
sp.plot(X_Aplot,(z,0.0,0.2),ylabel='X_A',ylim=[0,1],adaptive=False)
### Ici on peut regarder le profil de concentration en choisissant une géométrie
### un peu simplifiée, par exemple z1=0 et z2=L. Regardons si le profil serait plus simple
### à lire
X_As=X_A.subs(sp.symbols('z_1'),0)
X_As=X_As.subs(sp.symbols('z_2'),sp.symbols('L'))
display(X_As)
### De plus, on pourrait utiliser XB=XA-1
X_As=X_As.subs(sp.symbols('X_A1'),1-sp.symbols('X_B1'))
X_As=X_As.subs(sp.symbols('X_A2'),1-sp.symbols('X_B2'))
display(X_As.simplify())
### en effet, on aurait intérêt à utiliser une notation simplifiée ou z2-z1=L et z1=0.<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15510718789407313, 'fraction_numerical': 0.032366540563261874, 'mean_word_length': 5.16580310880829, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '197094', 'license': 'MIT', 'n_tokens_mistral': 1071, 'n_tokens_neox': 1067, 'n_words': 193, 'path': 'Chap-18-Section-18-2.ipynb', 'repo_name': 'Spationaute/GCH200', 'size': '2393'}