• Aucun résultat trouvé

Une ≪ grosse ≫ simulation : les anneaux de Saturne

Dans le document Licence de physique L3 PHYTEM (Page 131-135)

9.2 Quelques exemples

9.2.5 Une ≪ grosse ≫ simulation : les anneaux de Saturne

Les sondes interplan´etaires am´ericaines Voyager (http://voyager.jpl.nasa.gov/) ont pris des pho-tos magnifiques des anneaux de Saturne montrant des structurations complexes qui ont plong´e les astronomes (et les non-astronomes aussi) dans l’´emerveillement (voir, par exemple http://pds.jpl.nasa.gov/planets/

welcome/saturn.htm ). Le probl`eme physique sous-jacent est, du moins dans le principe, d’une simplicit´e biblique ! Il y a n ast´ero¨ıdes en interaction gravitationnelle avec Saturne et entre eux. En supposant que Saturne est beaucoup plus lourd que les ast´ero¨ıdes, les ´equations du mouvement s’´ecrivent sans complication majeure :

mi~r¨i=−Gmsmi

ri2i− X

j (j6=i)

Gmimj

r2ijij, i, j∈[1, n]

avec des notations banales4, et o`u l’on n’a introduit que des interactions gravitationnelles. Ce syst`eme n’est

´evidemment pas ais´e `a r´esoudre analytiquement : il s’agit de 3n ´equations diff´erentielles du second ordre, non-lin´eaires, coupl´ees. . . mais l’algorithme de Verlet peut traiter ce genre de probl`eme sans difficult´e.

9.2.5.1 Un programme de simulation.

Dans l’exemple de programme qui suit (´ecrit en for-tran77) on a consid´er´e 500 ast´ero¨ıdes dans le champ de gravitation de Saturne (consid´er´e comme beaucoup plus lourd que les ast´ero¨ıdes et immobile). Les conditions ini-tiales sont fix´ees dans un fichier ditde configuration ini-tiale produit par un autre programme d’initialisation ; on a d’ailleurs pr´evu de tester l’existence de ce fichier (in-struction inquire). De mˆeme, un fichier de param`etres de simulation (nombre de pas d’int´egration, intervalle d’´ecriture des r´esultats, valeurs du pas d’int´egration) est ´egalement lu : on n’a aucune information `a fournir au clavier ; pour un programme susceptible de tourner plusieurs heures d’affil´ee, voire plusieurs jours, il n’est pas inutile de conserver sous forme de fichiers, une m´emoire des param`etres de la simulation.

program saturn

!

4. la notation ˆresigne le vecteur unitaire parall`ele `a~r.

! programme pour calculer les trajectoires de n

! asteroides qui tournent autour d’une planete,

! par exemple, Saturne

!

implicit none

integer :: n, i, j, step, nstep, iprint parameter( n = 500 ) ! nombre d’asteroides

! positions, vitesses & masses double precision :: r(n,3), vr(n,3), m(n)

logical :: ok ! variable logique multi-usage double precision :: xij, yij, zij, rijsq, fijr, &

fijx, fijy, fijz, f(n,3), fij, g, v, k, ms, dt, rij

!

parameter( g = 1.0, ms = 1.0 ) ! constante de

! gravitation & masse de la planete

!

! initialisations

!

! verifier le fichier de config

inquire(file=’saturn.cnf’,exist=ok) if( .not. ok ) stop &

’Il faut d’’abord creer le fichier de configuration’

!

! lire la configuration initiale

open(1,file=’saturn.cnf’) read(1,*) r, vr, m close(1)

!

! verifier le fichier de parametres inquire(file=’saturn.inp’,exist=ok)

if( .not. ok ) stop &

’Il faut d’’abord creer le fichier de parametres’

!

! lire les parametres de simulation open(1,file=’saturn.inp’)

! nombre de pas, intervalle d’impression read(1,*) nstep, iprint

read(1,*) dt ! pas de temps

close(1)

Il faut ensuite pr´evoir des fichiers pour stocker les r´esultats de la simulation : un fichier de positions o`u seront inscrits les~ri(t), la liste des positions des ast´ero¨ıdes au cours du temps ; c’est a priori un fichier qui risque de se r´ev´eler assez volumineux, donc pour gagner du temps il sera binaire5. Un autre fichier sert `a garder l’´energie : celle-ci ´etant un invariant du mouvement, il sera prudent de v´erifier apr`es coup qu’il en est bien ainsi !

!

! fichier de positions (binaire)

open(1,file=’saturn.pos’,form=’unformatted’)

!

open(2,file=’saturn.ener’) ! fichier d’energie puis on d´emarre la simulation `a proprement parler. Il y a une boucle sur le temps, ´evidemment, et `a chaque pas de temps, on doit calculer les forces qui s’appliquent `a chaque ast´ero¨ıde : d’abord la force exerc´ee par Saturne, puis les forces exerc´ees par tous les autres ast´ero¨ıdes, compte tenu, bien sˆur, du principe de l’action et de la r´eaction ! On notera au passage, l’introduction d’une interaction r´epulsive en r12 `a tr`es courte port´ee des-tin´ee `a tenir compte tr`es approximativement des collisions entre ast´ero¨ıdes : ces collisions sont consid´er´ees comme

´elastiques dans ce cas, ce qui est d’un r´ealisme douteux, mais on pourrait choisir autre chose.

5. cela fait gagner le temps de conversion binaire (en machine) vers ASCII et r´eciproquement `a la lecture.

132 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

!

! simulation

!

! la grande boucle commence ici

do step = 1, nstep

! forces & energie potentielle

!

v = 0. ! initialisation de l’energie potentielle

!

! d’abord s’occuper de Saturne

do i = 1, n

xij = r(i,1); yij = r(i,2) ; zij = r(i,3) rijsq = xij*xij + yij*yij + zij*zij

! fijr est fij/rij

fijr = -g*m(i)*ms/(rijsq*sqrt(rijsq)) f(i,1) = fijr*xij

f(i,2) = fijr*yij f(i,3) = fijr*zij v = v + fijr*rijsq enddo

!

! calculer les forces inter-asteroide et sommer

! les bornes des boucles tiennent compte de ce

! que fji = -fij (action et reaction), donc

! on ne prend que les j > i do i = 1, n-1

do j = i+1, n

xij = r(i,1)-r(j,1) yij = r(i,2)-r(j,2) zij = r(i,3)-r(j,3)

rijsq = xij*xij + yij*yij + zij*zij rij = sqrt(rijsq)

! forces gravitationnelles & terme repulsif fij = -g*m(i)*m(j)/rijsq + 1.e-30*rij**-13 fijr = fij/rij

fijx = fijr*xij fijy = fijr*yij fijz = fijr*zij

!

f(i,1) = f(i,1) + fijx f(i,2) = f(i,2) + fijy f(i,3) = f(i,3) + fijz

! le principe d’action et de reaction s’applique f(j,1) = f(j,1) - fijx ! ici f(j,2) = f(j,2) - fijy

f(j,3) = f(j,3) - fijz

! energie potentielle

v = v - g*m(i)*m(j)/rij &

+ 0.083333333333333d-30*rij**-12 enddo

enddo

!

! fin du calcul des forces et

! de l’energie potentielle

!

! verlet commence ici

do j = 1, 3 do i = 1, n

vr(i,j) = vr(i,j) + f(i,j)*dt/m(i) r(i,j) = r(i,j) + vr(i,j)*dt enddo

enddo

! verlet finit ici

k = 0. ! energie cinetique

do i = 1, n k = k + &

m(i)*(vr(i,1)**2 + vr(i,2)**2 + vr(i,3)**2) enddo

k = 0.5*k

! ecrire tous les IPRINT pas les positions

! et l’energie du systeme

if (mod(step,iprint) == 0 ) then write(1) r

! pour pouvoir verifier l’invariance de l’energie write(2,*) step*dt, v, k, v+k

endif enddo

! la grande boucle s’arrete ici

!

close(1); close(2) end

Il n’y a rien de bien exotique dans ce programme. . . et l’on notera qu’il suffit de changer une instruction pour aug-menter ou diminuer le nombres d’ast´ero¨ıdes concern´es :

¸ca ne changera gu`ere que le temps d’ex´ecution et le vol-ume occup´e par les fichiers de r´esultats ! Comme il s’agit d’un programme tr`es simple, il n’est pas divis´e en sous-programmes : l’usage en la mati`ere est plutˆot d’isoler la partie Verlet dans un sous-programme, le calcul des forces et de l’´energie potentielle dans un autre, etc.

9.2.5.2 La conservation de l’´energie.

La figure 9.4 montre l’int´erˆet qu’il peut y avoir `a surveiller l’´energie du syst`eme. . . qui ne se conserve pas, contrairement `a ce que voudraient les lois de la m´ecanique newtonienne !

Figure9.4 – Energies potentielle (en rouge), cin´etique (en vert) et totale (en bleu) dans la simulation des anneaux de Saturne.

Les unit´es de temps et d’´energie de cette figure sont des unit´es r´eduites donn´ees par le choix de G et de la masse de Saturne, l’un et l’autre fix´es `a un. Dans ce syst`eme d’unit´es, le pas d’int´egration temporel est de δt= 104, et il y a 10000 pas pour ce run d’essai.

La dur´ee d’ex´ecution d´epend ´evidemment de la puissance de l’ordinateur utilis´e : sur un PC `a 500MHz, il a fallu 15mn, or le syst`eme n’a gu`ere eu le temps, dans ses unit´es de temps `a lui, d’´evoluer sensiblement (on le voit par la faible variation de l’´energie potentielle), il faudra faire des simulations beaucoup plus longues. . . (voir la table 9.1).

Il faut toutefois d’abord r´egler cette question de la (non)conservation de l’´energie : une simulation qui vi-ole ainsi un principe fondamental de la physique doit obligatoirement avoir une raison valable pour le faire ! La premi`ere hypoth`ese qui vient `a l’esprit est que le

Table9.1 – Comment faire tourner des programmes qui durent longtemps ?

Lorsqu’on fait de grosses simulations, il peut ˆetre gˆenant de mo-biliser un ordinateur plusieurs heures, voire plusieurs jours d’af-fil´ee : on peut avoir envie de consulter son courier ´electronique,

´editer un texte, tracer une courbe. . . Le syst`eme Unix/Linux permet de faire tourner des programmes longs en tˆache de fond, sans gˆene pour les autres activit´es. Il s’agit de lancer une tˆache avec une faible priorit´e tout engardant la mainpour faire autre chose en mˆeme temps ; or Unix est un syst`eme d’ex-ploitation multitˆache, c’est-`a-dire que le temps du processeur est hˆach´e en petites s´equences tr`es courtes et les diff´erents pro-grammes en cours d’ex´ecution se partagent ce temps. Ainsi, par exemple, lorsqu’un programme mouline tranquillement des nombres en tˆache de fond, si on appuie sur une touche du clavier, le programme est interrompu afin que le processeur puisse traiter ce nouvel ´ev´enement, puis red´emarre ensuite.

Il y a plusieurs fa¸cons de d’y prendre : 1. mogroprog &

o`u le symbole & rend la main sur la fenˆetre concern´ee.

C’est exactement comme lorsqu’on tape une instruction comme emacs machin.f &, la fenˆetre n’est pas monopo-lis´ee paremacs.

2. nohup mogroprog &

donne le mˆeme r´esultat sinon que nohup (no hang up) empˆeche l’arrˆet de l’ex´ecution du programme si l’on se d´eloggue. Ainsi, on peut lancer le programme, puis clore la session, rentrer chez soi et revenir le lendemain pour voir ce que le programme a fait pendant ce temps. . . Un autre utilisateur qui aurait ouvert une autre session entre-temps peut tr`es bien ne pas s’apercevoir qu’il y a quelque chose qui tourne en mˆeme temps que ses propres applications ! 3. at 2

mongroprog

^D

c’est l’ex´ecution diff´er´ee : dans l’exemple ci-dessus, le pro-gramme mongroprogd´emarrera `a 2 heures du matin. Le symbole ^D repr´esente la touche contrˆole (Ctrl) main-tenue enfonc´ee en mˆeme temps que la touche d : cela permet de marquer la fin de la s´equence d’instructions concern´ees par le lancement diff´er´e.

4. batch mongroprog

^D

le r´esultat est similaire `anohup, mais c’est plus commode si l’on veut faire faire plusieurs choses `a la suite : batch

mongroprog traite result

rm -f temp junk file*

grocalcul

^D

pas d’int´egration choisi est trop grand : il faudrait donc le r´eduire. Cependant, r´eduire le pas d’int´egration est coˆuteux en temps de calcul (puisque, plus le pas est pe-tit, plus il faut faire de pas pour une mˆeme longueur de simulation) et les variations de l’´energie n’interviennent que de temps en temps : quelques ´ev´enements rares per-turbent le d´eroulement de la simulation et il paraˆıt dom-mage d’augmenter sensiblement le temps de calcul pour quelques ´ev´enements indisciplin´es.

Il faut se rappeler que l’interaction gravitationnelle

di-verge pour r→ 0 et que donc, lorsque deux objets s’ap-prochent de tr`es pr`es, on peut s’attendre `a une brusque acc´el´eration de leur mouvement n´ecessitant alors un pas d’int´egration sensiblement plus court. On a d´ej`a par-tiellement trait´e cette difficult´e en ajoutant un poten-tiel r´epulsif en r112 qui repr´esente le cœur dur des ast´ero¨ıdes (figure 9.5). Reste donc `a traiter de la mˆeme fa¸con les interactions entre la plan`ete Saturne elle-mˆeme et les ast´ero¨ıdes, compte tenu du fait que la plan`ete est beaucoup plus grosse.

Figure 9.5 – Energie potentielle gravitationnelle en −1r

(en rouge), et celle en −1r + 10r−3012 (en vert). Il est ais´e de calculer qu’avec 500 ast´ero¨ıdes et un rayon d’orbite moyenr = 1, la distance moyenne entre deux ast´ero¨ıdes est un peu plus grande que la distance `a laquelle le terme r´epulsif commence `a intervenir : les ast´ero¨ıdes sont donc

presqueau contact, du moins au d´ebut de la simula-tion si on les place sur un cercle.

On obtient ainsi un r´esultat assez satisfaisant (figure 9.6) : les ´energies potentielles et cin´etiques varient en sens oppos´es, la somme restant constante. Il faudrait ensuite bien sˆur optimiser le pas d’int´egration afin de conserver la constance de l’´energie totale tout en r´eduisant autant que possible le nombre de pas d’int´egration n´ecessaire pour obtenir les ´ev´enements recherch´es.

Figure9.6 – ´Evolution temporelle des ´energies apr`es in-troduction du terme r´epulsif.

134 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

9.2.5.3 Utilisation des r´esultats.

Lorsqu’on a fait une simulation comme celle-ci et que l’on a v´erifi´e qu’elle se comportait de telle fa¸con que l’on puisse ˆetre raisonnablement convaincu que¸ca marche, le plus gros travail reste `a faire. Il faut en effet commencer

`a faire de la physique avec l’outil que l’on a fabriqu´e : la premi`ere id´ee est de faire un film, repr´esenter `a l’aide d’outils graphiques appropri´es l’´evolution temporelle du syst`eme, les trajectoires des particules au cours du temps.

Mais comment suivre 500 trajectoires (ou plus) simul-tan´ement ? Il y a alors un travail de r´eflexion th´eorique `a faire du typedans ce probl`eme quelles sont les grandeurs physiques pertinentes ? . Ici, on peut, par exemple, cal-culer la distribution des distances des ast´ero¨ıdes `a Sat-urne, ceci en fonction du temps. Si des anneaux se for-ment, cette distribution doit pr´esenter des pics marqu´es pour les rayons des anneaux.

De fait, dans la simulation pr´esent´ee ici, cette distribu-tion devient tr`es rapidement continue sans asp´erit´e remar-quable : pas d’anneaux, donc. Que faudrait-il faire pour en obtenir ? Il semblerait qu’`a ce jour (chercher le mot-clef saturn sur internet ou voir J. Burns, D. Hamilton et M. Showalter, Pour la science, Avril 2002, p. 78) la dy-namique des anneaux reste encore un peu myst´erieuse : on invoque l’effet des satellites plus massifs de Saturne ou celui des chocs in´elastiques entre ast´ero¨ıdes et encore le champ magn´etique de la plan`ete. . . Il y a donc l`a des d´ecouvertes `a faire !

9.3 Que peut-on en conclure ?

La diversit´e des probl`emes que l’on peut traiter par des moyens num´eriques est ´enorme, il n’y a donc pas de r´eponse unique `a cette question. En outre les habitudes des chercheurs sont tr`es variables : deux personnes diff´erentes attaqueront sans doute le mˆeme probl`eme diff´eremment, sans que l’on puisse toujours dire a priori lequel a rai-son. Le meilleur outil est d’abord celui que l’on maˆıtrise et dans bien des cas,fortran,C, Maple ouOctave sont interchangeables, autant utiliser alors le plus simple.

Les cas extrˆemes sont d’une part le calcul qui a une so-lution analytique : le logiciel de calcul formel est alors irrempla¸cable ; de l’autre, la grosse simulation du type

anneaux de Saturne lourdement consommatrice de temps de calcul : les logiciels sophistiqu´es (et gourmands en ressources, CPU et m´emoire) ne feront que rendre le probl`eme infaisable, alors qu’un langage de programma-tion simple permet de limiter les d´egˆats. Entre les deux, r`egne un continuum : `a chacun de tenter de s’y retrouver !

Le but du pr´esent cours est donc de donner quelques points de rep`eres pour tenter de permettre `a chacun de faire des choix inform´es : joyeuses computations `a tous. . .

Chapitre 10

Bibliographie.

1. J. Bass,Cours de math´ematiques, Masson (1956) 2. B. P. Demidovich, I. A. Maron,Computational

Math-ematics, MIR (1973), trad. angl. G. Yankovsky, MIR (1987)

3. W. H. Press, S. A. Teukolsky, W. T. Vetterling, B. P. Flannery, Numerical Recipes in Fortran Cam-bridge University Press (1986, 1992, . . .)

4. D. Taupin, Probabilities data reduction and error analysis in the physical sciences, les Editions de Physique (1988)

5. M.P. Allen, D.J. Tildesley, Computer simulation of liquids Oxford (1990)

6. J. F. Kerrigan, Migrating to Fortran90, O’Reilly (1993)

7. J. R. Shewchuk, An Introduction to the conju-gate gradient method without the agonizing pain, www.cs.cmu.edu/~jrs/jrspapers.html(1994)

8. L. Sainsaulieu,Calcul scientifique Masson (1996) 9. T. Pang,An introduction to Computational Physics,

Cambridge University Press (1997)

10. B. W. Kernighan, D. M. Ritchie,Le langage C, Mas-son (1997)

11. Ph. Depondt,Physique num´erique, Vuibert (1998) 12. J. M. Thijssen, Computational Physics, Cambridge

University Press (1999)

13. Ch. Guilpin, Manuel de calcul num´erique appliqu´e, EDP Sciences (1999)

14. Y. Epelboin,Cours de m´ethodes num´eriques pour la physique,http://physp6www.cicrp.jussieu.fr(2001) 15. J.-J. Chattot, Computational Aerodynamics and

Fluid Dynamics, Springer (2002)

16. K. Protassov, Analyse statistique des donn´ees exp´erimentales, EDP Sciences (2002)

17. I. Danaila, F. Hecht, O. Pironneau, Simulation num´erique en C++, Dunod (2003)

18. M. Metcalf, J. Reid, M. Cohen,Fortran 95/2003 ex-plained, Oxford University Press (2004)

19. J.-P. Demailly,Analyse num´erique et ´equations diff´e-rentielles, EDP Sciences (2006)

20. Collectif,Dossier Pour la Science La mod´elisation in-formatique, exploration du r´eel, (juillet/septembre 2006), voir ´egalementhttp://interstices.fr 21. W. Krauth Statistical mechanics : Algorithms and

Computations, Oxford University Press (2006)

135

Dans le document Licence de physique L3 PHYTEM (Page 131-135)