====== 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 |}}