Corrigé TP 9
Corrigé TP 9
Corrigé TP 9
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Expériences Numériques pour la Physique :<br />
Agrégation Limitée par Diffusion<br />
Ce script reprend le plan du sujet de <strong>TP</strong> numéro 9, où l’on cherche à étudier<br />
le phénomène d’agrégation limitée par diffusion, qui combine le mouvement<br />
aléatoire de particules microscopiques et leur agrégation progressive sur un substrat.<br />
Sommaire<br />
close all<br />
clear all<br />
9.a un seul marcheur<br />
9.b M marcheurs<br />
9.c Questions Physiques<br />
9.a un seul marcheur<br />
Nous considérons dans un premier temps le cas d’un seul marcheur afin de<br />
développer et tester la fonction matlab ”DLA1march”, qui va calculer et renvoyer<br />
la visualisation des coordonnées succesivement explorées par une particule<br />
ayant un mouvement aléatoire dans la boîte de simulation de taille N × N. Les<br />
conditions aux limites sont périodiques sur les côtés de la boîte : si une particule<br />
sort à droite elle entrera à gauche, et inversement. En haut de la boîte, la particule<br />
sera réfléchie, alors qu’en bas elle viendra directement se fixer à l’agrégat<br />
dont une première ligne est déjà occupée.<br />
% visualisation d’un marcheur<br />
N = 25 ; % taille de la grille<br />
% on appelle la fonction affichant la trajectoire d’un marcheur<br />
figure ;<br />
DLA1march(N) ;<br />
1
25<br />
20<br />
15<br />
10<br />
5<br />
mouvement aléatoire d‘un marcheur<br />
5 10 15 20 25<br />
On retrouve bien un mouvement aléatoire de la particule sur la grille, jusqu’à<br />
son agrégation sur le substrat situé en y = 1. Nous remarquons que même en<br />
ayant choisi un taille modeste pour la boîte de simulation (25 points), le temps<br />
de calcul et de visualisation peut être très important. En fait, ce sont les tracés<br />
successifs que nous demandons dans la boucle qui sont très coûteux en temps<br />
de calcul. Nous les supprimerons dans la suite quand nous passerons à un grand<br />
nombre de marcheurs.<br />
La fonction permettant de calculer la trajectoire d’un marcheur jusqu’à l’agrégat<br />
s’écrit comme suit :<br />
type DLA1march<br />
function DLA1march(N)<br />
% initialisation de l agregat<br />
Nx = N ; Ny = N ;<br />
AGR = zeros(Nx,Ny) ;<br />
AGR(:,1) = ones(1,Ny) ;<br />
% initialisation de la position actuelle x,y du marcheur<br />
xnew = randi(Nx) ; ynew = Ny ; % n importe ou en haut<br />
% Boucle : faire une marche jusqu’a ce qu’on touche l’agregat<br />
while AGR(xnew,ynew) == 0<br />
% on memorise la position pour actualiser l’agregat le cas echeant<br />
xold = xnew ;<br />
yold = ynew ;<br />
2
%definir les nouvelles positions xnew,ynew<br />
p = randi(4) ; % tirage au sort parmi 4 possibilit\’es :<br />
if p == 1<br />
xnew = xnew - 1 ; % aller a gauche<br />
elseif p == 2<br />
xnew = xnew + 1 ; % aller a droite<br />
elseif p == 3<br />
ynew = ynew - 1 ; % descendre<br />
else<br />
ynew = ynew + 1 ; % monter<br />
end<br />
%corriger les nouvelles positions xnew,ynew si necessaire<br />
if xnew == Nx + 1<br />
xnew = 1 ;<br />
elseif xnew == 0<br />
xnew = Nx ;<br />
elseif ynew == Ny + 1<br />
ynew = Ny - 1 ;<br />
end<br />
%animation<br />
plot(xnew,ynew,’o’),axis([1 Nx 1 Ny]),hold on,...<br />
title(’mouvement aleatoire d‘un marcheur’)<br />
drawnow<br />
end % fin d’une marche<br />
% on attache la position precedente a l’agregat<br />
AGR(xold,yold) = 1 ;<br />
end % fin de la fonction<br />
9.b M marcheurs<br />
Afin de mettre en évidence le phénomène d’agrégation limitée par diffusion,<br />
nous étudions maintenant un grand nombre de marcheurs, sur une grille plus<br />
grande.<br />
N = 100 ;<br />
M = 1000 ;<br />
On applique la fonction DLAMmarch, qui généralise la précédente à M particules,<br />
au cas de 1000 marcheurs sur une grille 100x100, en minimisant donc<br />
les représentations graphiques gourmandes en temps de calcul :<br />
figure ;<br />
DLAMmarch(N,M) ;<br />
3
100<br />
90<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
agrégation limitée par diffusion<br />
10 20 30 40 50 60 70 80 90 100<br />
On observe la formation de structures fractales à partir du substrat,<br />
caractéristiques du processus d’agrégation limitée par diffusion étudié ici.<br />
Ces structures se forment progressivement et sont la combinaison du caractère<br />
aléatoire du déplacement des marcheurs successifs, et du phénomène<br />
d’agrégation où les marcheurs arrivant sur le substrat viennent s’y fixer et ainsi<br />
en augmenter progressivement la taille.<br />
La fonction validée pour un marcheur a été modifiée comme suit :<br />
type DLAMmarch<br />
function DLAMmarch(N,M)<br />
% initialisation de l agregat<br />
Nx = N ;<br />
Ny = N ;<br />
AGR = zeros(Nx,Ny) ;<br />
AGR(:,1) = ones(1,Ny) ;<br />
%nAGR = Ny ;<br />
% boucle sur les marcheurs<br />
cpt = 0 ; % compteur pour repr\’esentation<br />
for i = 1 : M<br />
% initialisation de la position actuelle x,y du marcheur<br />
xnew = randi(Nx) ;<br />
ynew = Ny ;<br />
% Boucle : faire une marche jusqu?a ce qu?on touche l?agregat<br />
4
while AGR(xnew,ynew) == 0<br />
% on m\’emorise la position pour actualiser l’agr\’egat le cas \’ech\’eant<br />
xold = xnew ;<br />
yold = ynew ;<br />
%definir les nouvelles positions xnew,ynew<br />
p = randi(4) ; % tirage au sort parmi 4 possibilit\’es (gauche droite haut bas)<br />
if p == 1<br />
xnew = xnew - 1 ; % aller gauche<br />
elseif p == 2<br />
xnew = xnew + 1 ; % aller droite<br />
elseif p == 3<br />
ynew = ynew - 1 ; % monter<br />
else<br />
ynew = ynew + 1 ; % descendre<br />
end<br />
%corriger les nouvelles positions xnew,ynew si necessaire<br />
if xnew == Nx + 1<br />
xnew = 1 ;<br />
end<br />
if xnew == 0<br />
xnew = Nx ;<br />
end<br />
if ynew == Ny + 1<br />
ynew = Ny - 1 ;<br />
end<br />
end % fin d’une marche<br />
% disp(’bravo vous avez r\’eussi l‘agregation’)<br />
AGR(xold,yold) = 1 ;<br />
cpt = cpt + 1 ;<br />
if cpt == fix(N/10)<br />
[indx,indy] = find(AGR == 1) ;<br />
plot(indx,indy,’o’),axis([1 N 1 N]),...<br />
title(’agr\’egation limit\’ee par diffusion’),...<br />
drawnow<br />
cpt = 0 ;<br />
end<br />
end % fin de la boucle sur les marcheurs<br />
end<br />
9.c Questions Physiques<br />
1 - Pourquoi des arborescences ?<br />
5
Du fait du caractère aléatoire du mouvement des marcheurs, ces derniers peuvent<br />
se fixer à partir de n’importe quelle position au voisinage de l’agrégat. De<br />
plus, la croissance étant orientée par le substrat initial, les dépôts successifs<br />
vont se former en montant, et l’on obtient ainsi ces structures arborescentes<br />
caractéristiques.<br />
2 - Où est la diffusion ?<br />
Le mécanisme de diffusion résulte de mouvements microscopiques aléatoires des<br />
particules (mouvement Brownien), sans direction privilégiée. Si on ajoute une<br />
source d’anisotropie, par exemple la gravitation, on va observer un dépôt plus<br />
homogène de matière.<br />
Pour tester cette hypothèse, nous modifions la fonction à M marcheurs (fonction<br />
”DLA mg Mmarch”), en augmentant la probabilité de descendre par rapport<br />
aux trois autres directions : nous donnons ainsi une direction privilégiée au<br />
mouvement aléatoire, qui modélise ainsi la gravité.<br />
% fonction M marcheurs, avec la gravite :<br />
figure;<br />
DLA_mg_Mmarch(N,M) ;<br />
100<br />
90<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
agrégation limitée par diffusion et gravité<br />
10 20 30 40 50 60 70 80 90 100<br />
La fonction modifiée, faisant intervenir la gravité, s’écrit comme suit :<br />
type DLA_mg_Mmarch.m<br />
Dans la figure ci-dessus, nous observons bien un dépôt plus dense, avec beaucoup<br />
moins de structures arborescentes.<br />
6
function DLA_mg_Mmarch(N,M)<br />
% initialisation de l agregat<br />
Nx = N ;<br />
Ny = N ;<br />
AGR = zeros(Nx,Ny) ;<br />
AGR(:,1) = ones(1,Ny) ;<br />
%nAGR = Ny ;<br />
% boucle sur les marcheurs<br />
cpt = 0 ; % compteur pour repr\’esentation<br />
for k = 1 : M<br />
% initialisation de la position actuelle x,y du marcheur<br />
xnew = randi(Nx) ;<br />
ynew = Ny ;<br />
% Boucle : faire une marche jusqu?a ce qu?on touche l?agregat<br />
while AGR(xnew,ynew) == 0<br />
% on m\’emorise la position pour actualiser l’agr\’egat le cas \’ech\’eant<br />
xold = xnew ;<br />
yold = ynew ;<br />
%definir les nouvelles positions xnew,ynew<br />
p = randi(6) ; % tirage au sort parmi 6 possibilit\’es (gauche droite haut bas)<br />
if p == 1<br />
xnew = xnew - 1 ; % aller gauche<br />
elseif p == 2<br />
xnew = xnew + 1 ; % aller droite<br />
elseif p == 3<br />
ynew = ynew + 1 ; % monter<br />
else<br />
ynew = ynew - 1 ; % descendre<br />
% probabilite plus forte de descendre<br />
% pour modeliser la gravite<br />
end<br />
%corriger les nouvelles positions xnew,ynew si necessaire<br />
if xnew == Nx + 1 % sort a droite<br />
xnew = 1 ;<br />
elseif xnew == 0 % sort a gauche<br />
xnew = Nx ;<br />
elseif ynew == Ny + 1 % sort en haut<br />
ynew = Ny ;<br />
end<br />
end % fin d’une marche<br />
% disp(’bravo vous avez r\’eussi l‘agregation’)<br />
AGR(xold,yold) = 1 ;<br />
cpt = cpt + 1 ;<br />
7
if cpt == fix(N/10)<br />
[indx,indy] = find(AGR == 1) ;<br />
plot(indx,indy,’o’),axis([1 N 1 N]),...<br />
title(’agr\’egation limit\’ee par diffusion et gravit\’e’),...<br />
drawnow<br />
cpt = 0 ;<br />
end<br />
end % fin de la boucle sur les marcheurs<br />
end<br />
3 - Exemples d’application<br />
Les structures arborescentes systématiquement observées se retrouvent dans des<br />
domaines variés :<br />
- la formation des flocons de neige par agrégation de particules d’eau en<br />
suspension dans l’air,<br />
- la structure des réseau de transport dans les agglomérations urbaines, et<br />
la structure des agglomérations elles-mêmes,<br />
- les éclairs pour lesquels la propagation de l’arc électrique se fait par diffusion<br />
de proche en proche,<br />
- la formation par calcification progressive des arborescences coralliennes,<br />
par exemple du corail rouge.<br />
8