Modélisation de la diffusion chimique dans un film

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>

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 :