Descente polarisation de concentration
Analyse de la polarisation de concentration
La filtration d'une solution de PVP a été réalisée sur une membrane plane (voir video). L'opérateur réalise des expériences en mettant dans le réservoir une solution de PVP (90 kDa) concentrée (fiche CAS et exemple d'utilisation en agroalimentaire). La masse molaire de la PVP est bien plus grande que le seuil de coupure de la membrane (15kDa) : la PVP est donc totalement retenu par la membrane et la concentration en PVP dans le perméat est nulle.
L'opérateur a noté les valeurs mesurées sur les papiers ci-contre. Un stagiaire de licence a ensuite consigné l'ensemble des mesures dans des tableaux Python (voir code ci-dessous) et il a tracé les courbes ci-contre.
Code Python avec les valeurs mesurées à l'eau (pour le calcul de la perméabilité)
import numpy as np
import matplotlib.pyplot as plt
#Valeurs de pression transmembranaire
PTM_bar_alim=np.array([0,0.24,0.53,1.02,1.52,2.02])
PTM_bar_ret=np.array([0,0.22,0.51,1.,1.5,2.0])
PTM = 1e5*(PTM_bar_alim + PTM_bar_ret)/2 #calcul de la PTM en Pa
#Valeurs de volume filtré en ml
V=np.array([0,2,5,10,14,18])
#Valeurs de temps en s correspondant aux volumes
t=np.array([1,105,120,125,120,120])
#Equations permettant de calculer le débit de permeation, Q, puis le flux de permeation, J
Q=V*1e-6/t #m3/s
S=106.*2. #cm2
J=Q/(S*1e-4) #m/s
'''#Vérifier les valeurs
print('Pression transmembranaire en Pa')
print(PTM)
print('Flux de permation en m/s')
print(J)'''
plt.plot(PTM, J, marker='x')
plt.title('Flux de permeation, J, en fonction de la pression transmembranaire, PTM')
plt.xlabel('PTM (Pa)')
plt.ylabel('J (m/s)')
#regression lineaire pour la determination de la resistance hydraulique
reglin_perm= np.polyfit(PTM,J,1)
pente_perm=reglin_perm[0]
oo_perm=reglin_perm[1]
plt.plot(PTM, pente_perm*PTM+oo_perm, 'g--')
#calcul de la résistance hydraulique
mu=0.001 #Pa.s ou kg m-1 s-1
Rm=1/(mu*pente_perm)
print('Permeabilité de la membrane, Lp=', pente_perm*1000*3600*1e5,' L/(h.m2.bar)')
print('Resistance hydraulique de la membrane, Rm=', Rm,'m-1')
import numpy as np import matplotlib.pyplot as plt #Valeurs de pression transmembranaire PTM_bar_alim=np.array([0,0.24,0.53,1.02,1.52,2.02]) PTM_bar_ret=np.array([0,0.22,0.51,1.,1.5,2.0]) PTM = 1e5*(PTM_bar_alim + PTM_bar_ret)/2 #calcul de la PTM en Pa #Valeurs de volume filtré en ml V=np.array([0,2,5,10,14,18]) #Valeurs de temps en s correspondant aux volumes t=np.array([1,105,120,125,120,120]) #Equations permettant de calculer le débit de permeation, Q, puis le flux de permeation, J Q=V*1e-6/t #m3/s S=106.*2. #cm2 J=Q/(S*1e-4) #m/s '''#Vérifier les valeurs print('Pression transmembranaire en Pa') print(PTM) print('Flux de permation en m/s') print(J)''' plt.plot(PTM, J, marker='x') plt.title('Flux de permeation, J, en fonction de la pression transmembranaire, PTM') plt.xlabel('PTM (Pa)') plt.ylabel('J (m/s)') #regression lineaire pour la determination de la resistance hydraulique reglin_perm= np.polyfit(PTM,J,1) pente_perm=reglin_perm[0] oo_perm=reglin_perm[1] plt.plot(PTM, pente_perm*PTM+oo_perm, 'g--') #calcul de la résistance hydraulique mu=0.001 #Pa.s ou kg m-1 s-1 Rm=1/(mu*pente_perm) print('Permeabilité de la membrane, Lp=', pente_perm*1000*3600*1e5,' L/(h.m2.bar)') print('Resistance hydraulique de la membrane, Rm=', Rm,'m-1')
Code Python avec les valeurs mesurées lors de filtration de PVP
#Tableaux de PTM
PTM_bar_2gl=np.array([0.14,0.51,0.995,1.51,2.03])
PTM_bar_5gl=np.array([0.15,0.505,1,1.495,2.005])
PTM_bar_10gl=np.array([0.16,0.535,1.005,1.5,2.03])
#Tableaux de volume en ml
V_2gl=np.array([1.8,6.3,11.6,13.5,14])
V_5gl=np.array([1.8,6.,10.4,11.2,11.5])
V_10gl=np.array([1.8,5.8,9,9.3,9.5])
#Tableau de temps en s correspondant
t_2gl=np.array([180,182,180,181,181])
t_5gl=np.array([180,180,181,182,183])
t_10gl=np.array([180,179,180,181,182])
#Calcul des PTM en Pa
PTM_2gl=1e5*PTM_bar_2gl
PTM_5gl=1e5*PTM_bar_5gl
PTM_10gl=1e5*PTM_bar_10gl
#Calculs des flux de perméation
J_2gl=(V_2gl*1e-6/t_2gl)/(S*1e-4) #m/s
J_5gl=(V_5gl*1e-6/t_5gl)/(S*1e-4) #m/s
J_10gl=(V_10gl*1e-6/t_10gl)/(S*1e-4) #m/s
'''print('J 2gl',J_2gl)
print('J 5gl',J_5gl)
print('J 10gl',J_10gl)'''
#Tracé des flux de permeation
plt.plot(PTM, J, marker='x', label='Eau')
plt.plot(PTM_2gl, J_2gl, marker='x', color='r', label='2 g/L')
plt.plot(PTM_5gl, J_5gl, marker='x', color='g', label='5 g/L')
plt.plot(PTM_10gl, J_10gl, marker='x', color='b', label='10 g/L')
plt.legend(loc='best')
plt.title('Flux de permeation, J, en fonction de la pression transmembranaire, PTM')
plt.xlabel('PTM (Pa)')
plt.ylabel('J (m/s)')
plt.show()
#Tableaux de PTM PTM_bar_2gl=np.array([0.14,0.51,0.995,1.51,2.03]) PTM_bar_5gl=np.array([0.15,0.505,1,1.495,2.005]) PTM_bar_10gl=np.array([0.16,0.535,1.005,1.5,2.03]) #Tableaux de volume en ml V_2gl=np.array([1.8,6.3,11.6,13.5,14]) V_5gl=np.array([1.8,6.,10.4,11.2,11.5]) V_10gl=np.array([1.8,5.8,9,9.3,9.5]) #Tableau de temps en s correspondant t_2gl=np.array([180,182,180,181,181]) t_5gl=np.array([180,180,181,182,183]) t_10gl=np.array([180,179,180,181,182]) #Calcul des PTM en Pa PTM_2gl=1e5*PTM_bar_2gl PTM_5gl=1e5*PTM_bar_5gl PTM_10gl=1e5*PTM_bar_10gl #Calculs des flux de perméation J_2gl=(V_2gl*1e-6/t_2gl)/(S*1e-4) #m/s J_5gl=(V_5gl*1e-6/t_5gl)/(S*1e-4) #m/s J_10gl=(V_10gl*1e-6/t_10gl)/(S*1e-4) #m/s '''print('J 2gl',J_2gl) print('J 5gl',J_5gl) print('J 10gl',J_10gl)''' #Tracé des flux de permeation plt.plot(PTM, J, marker='x', label='Eau') plt.plot(PTM_2gl, J_2gl, marker='x', color='r', label='2 g/L') plt.plot(PTM_5gl, J_5gl, marker='x', color='g', label='5 g/L') plt.plot(PTM_10gl, J_10gl, marker='x', color='b', label='10 g/L') plt.legend(loc='best') plt.title('Flux de permeation, J, en fonction de la pression transmembranaire, PTM') plt.xlabel('PTM (Pa)') plt.ylabel('J (m/s)') plt.show()
Donner la contre pression osmotique correspondant à la solution de 10 g/L filtrée à une pression de 1,5 bar. Le bout de code suivant devrait vous aider (1,5 bar est la quatrième mesure et vous devez utiliser donc l'index 3 pour la récupérer dans le tableau Python puisque la numérotation dans les tableaux commence à 0 [0, 1, 2 , 3 ...])
Pi_cm_10gl=PTM_10gl-(J_10gl*mu*Rm)
print ('Contre pression osmotique à 1,5 bar : ', Pi_cm_10gl[3]/1e5, ' bar')
Pi_cm_10gl=PTM_10gl-(J_10gl*mu*Rm) print ('Contre pression osmotique à 1,5 bar : ', Pi_cm_10gl[3]/1e5, ' bar')
Analyse de la polarisation de concentration
En déduire la concentration à la membrane en g/L ?
(vous aurez besoin de suivre le tuto Python "résolution d'une équation à 1 inconnu" au Bar "Jus de fruit pour avoir la pression osmotique")
#Fonction devant être égale à zero pour trouver la concentration en PVP, c (en g/L)
#correspondant à une pression osmotique, pi (en Pa)
def pic(c,pi):
c=c/1000. #concentration en g/cm3
pic=0.210*c+16.05*c*c+163.8*c**3 #Pression osmotique en bar
return pic*1e5-pi #écart entre calcul et valeur souhaitée
cm=fsolve(pic,2, args=Pi_cm_10gl[3])
print ('La concentration à la membrane est :',cm , ' g/L')
#Fonction devant être égale à zero pour trouver la concentration en PVP, c (en g/L) #correspondant à une pression osmotique, pi (en Pa) def pic(c,pi): c=c/1000. #concentration en g/cm3 pic=0.210*c+16.05*c*c+163.8*c**3 #Pression osmotique en bar return pic*1e5-pi #écart entre calcul et valeur souhaitée cm=fsolve(pic,2, args=Pi_cm_10gl[3]) print ('La concentration à la membrane est :',cm , ' g/L')
Analyse de la polarisation de concentration
Utilisez cette dernière valeur pour estimer le coefficient de transfert de matière en m/s à l'aide de la loi du film.
k_10gl=J_10gl[3]/((np.log(cm))-(np.log(10)))
k_10gl=J_10gl[3]/((np.log(cm))-(np.log(10)))
Analyse de la polarisation de concentration
Utilisez le modèle du gel pour estimer le coefficient de transfert de matière et la concentration de gel. Donnez la concentration de gel obtenue.
#Tableaux des valeurs de concentration, C0
c0=np.array([2,5,10]) #g/L
lnc0=np.log(c0)
#Tableaux des valeurs de flux limite (l'indice -1 permet de trouver la dernière valeur d'un tableau)
Jlim=np.array([J_2gl[-1],J_5gl[-1],J_10gl[-1]]) #m/s
#regression lineaire
reg= np.polyfit(lnc0,Jlim,1)
pente_k=reg[0]
oo_klncg=reg[1]
plt.plot(lnc0, Jlim, 'x')
plt.plot(lnc0, pente_k*lnc0+oo_klncg, 'r--')
plt.title('Flux limite, Jlim, en fonction du log de la concentration')
plt.xlabel('ln(c0) (-)')
plt.ylabel('Jlim (m/s)')
#INSERER L'EQUATION POUR CALCULER LA CONCENTRATION DE GEL
print('Coefficient de transfert de matière, k=',-pente_k, 'm/s')
cg= SNOW NEIGE SNOW NEIGE ZUT
print('La concentration de gel est de ', cg, 'g/L')
#Tableaux des valeurs de concentration, C0 c0=np.array([2,5,10]) #g/L lnc0=np.log(c0) #Tableaux des valeurs de flux limite (l'indice -1 permet de trouver la dernière valeur d'un tableau) Jlim=np.array([J_2gl[-1],J_5gl[-1],J_10gl[-1]]) #m/s #regression lineaire reg= np.polyfit(lnc0,Jlim,1) pente_k=reg[0] oo_klncg=reg[1] plt.plot(lnc0, Jlim, 'x') plt.plot(lnc0, pente_k*lnc0+oo_klncg, 'r--') plt.title('Flux limite, Jlim, en fonction du log de la concentration') plt.xlabel('ln(c0) (-)') plt.ylabel('Jlim (m/s)') #INSERER L'EQUATION POUR CALCULER LA CONCENTRATION DE GEL print('Coefficient de transfert de matière, k=',-pente_k, 'm/s') cg= SNOW NEIGE SNOW NEIGE ZUT print('La concentration de gel est de ', cg, 'g/L')
Vous avez tenté plus de 100 fois cet exercice, veuillez poursuivre le parcours.