====== Modélisation de la diffusion chimique dans un film ======
Technique de différences finies, utilisation de matplotlib
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from math import *
# pour utiliser la librairie graphique matplotlib
from pylab import *
# simulation de la diffusion chimique par différence finie
# on considère un problème à une dimension correspondant à la diffusion
# au sein d'un film mince d'un constituant (par immersion dans un
# solvant par exemple)
# cf. en.wikipedia.org/wiki/Finite_difference
#
# initialisations
ni= 101 # nombre d'abscisses
n=range(0,ni,1) # les "numéros" des abscisses
# print n
x=[] # la liste des abscisses
c=[] # la liste des concentrations
cnew=[] # une liste intermédiaire pour l'évolution des concentrations
for i in n:
x.append(float(n[i]))
c.append(0.) #concentration initiale nulle au sein du film
cnew.append(0.)
c[0]=10. # conditions aux bords : forte concentration imposée
c[ni-1]=10.
cnew[0]=10.
cnew[ni-1]=10.
# print c
t=0. # temps
ite=0 # compteur d'itérations
endt=2000. #temps final
dx=1. # intervalle spatial
dtsurdx2=0.1 # constante liée à la méthode des différences finies
dt=dx*dx*dtsurdx2 # intervalle temporel
while t < endt: # boucle temporelle
i=1
while i < ni-1: # actualisation des concentrations
cnew[i]=c[i]+dtsurdx2*(c[i-1]-2.*c[i]+c[i+1])
i=i+1
c=cnew
if ite % 250 == 0: # affichage périodique
#print t
#print x
#print c
plot(x,c) # affichage de la concentration en fonction de l'épaisseur
#show()
t=t+dt
ite=ite+1
show()
Suggestion : récrire ce programme en utilisant des directives d'importation standard des librairies Matplotlib/NumPy et des tableaux numériques (array) de NumPy
Exemple de sortie graphique :
{{ :teaching:progappchim:diffusion-1d.png?400 |}}