Technique de différences finies, utilisation de matplotlib
<sxh python; title : Diffusion-chimique-finitediff-01.py> #!/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() </sxh>