Institut Galilée, MACS Langage C : programmation avancée pour le calcul scientifique, petit sujet d’étude Petit sujet d’étude : étude d’une marche aléatoire sur réseau monodimensionnel, simulation du mouvement brownien en une dimension S. Kokh 1 On se propose de simuler le mouvement d’une collection de particules contraintes à se déplacer sur un réseau périodique 1D de manière aléatoire. Soient ∆t > 0 et ∆x > 0. Description du réseau : on considère une suite de 2nx + 1 nœuds xk répartis sur l’intervalle réel [xMin , xMax ] comme à la figure 1. x0 = xMin < x1 < · · · < xnx −1 < xnx = 0 < xnx +1 < · · · < x2nx −1 < x2nx = xMax . La répartition est régulière, de sorte que xk = xMin + k∆x, x0 x1 ∆x = xMax − xMin , 2nx xnx −1 xnx xnx +1 k = 0, . . . , 2nx . x2nx −1 x2nx Figure 1 – Réseau discret Description des particules et leur mouvement : on considère une famille de nbParticles particules. Les particules sont telles que : — chaque particule à une masse éagle à 1/nbParticles ; — plusieurs particules peuvent se trouver au même point de l’espace. La position des particules est déterminée par la règle suivante : — à l’instant t = 0 toutes les particules se trouve au nœud xnx = 0 ; — chaque particule change de position au bout d’une durée ∆t. Elle a une probabilité 0.5 de se deplacer de +∆x et une probabilité 0.5 de se déplacer de −∆x. Conditions aux limites : periodicité. On simulera la présence de conditions aux limites périodiques pour le problème en imposant qu’une particule située en x2nx (resp. x0 ) se déplaçant de +∆x (resp. −∆x) se retrouvera au terme de son déplacement en x0 (resp. x2nx ). Travail demandé : écrivez un programme qui simule le déplacement de la famille de particules décrite ci-dessus. En particulier : — on laissera chaque particule effectuer n déplacements, de sorte que n∆t < tMax ; — au terme des déplacement de toute les particules, on calculera mk la masse totale de particule présentes dans l’intervalle (xk − ∆x/2, xk + ∆x/2), k = 0, . . . , 2nx ; — on affichera à sur la sortie standard pour k = 0, . . . , 2nx le couple de réels (xk , mk ), chaque couple étant affiché sur une ligne, et pour chaque couple, les éléments seront séparés par des espaces. On devrait obtenir sur la sortie standard x0 x1 m0 m1 .. . xk mk .. . 1. [email protected] 1/2 Institut Galilée, MACS Langage C : programmation avancée pour le calcul scientifique, petit sujet d’étude — comme post-traitement, grâce à une redirection (pipe) on écrira la sortie standard dans un fichier que l’on affichera avec gnuplot. Pour les applications, on utilisera les valeurs suivantes xMin = −1, xMax = 1, nx = 500, nbParticle = 106 , tMax = 2 × 10−3 , ∆t = ∆x2 . Indications — on pourra utiliser la fonction de la librarie standard long int random(void) qui retourne un entier pseudo-aléatoire entre compris entre 0 et RAND MAX (en cas de besoin d’informations supplémentaires utilisez le web ou alors man random dans un terminal). — on comparera le résulat de la sortie standard grâce à gnuplot avec le graphe de la fonction x 7→ √ x2 4 × 10−3 − e 2×2×10−3 . 2π × 2 × 10−3 — on pourra utiliser la fonction de la librarie mathmétique double floor(double x) qui calcule la partie entière (en cas de besoin d’informations supplémentaires utilisez le web ou alors man floor dans un terminal). 2/2