2. Diffusion

Dans cet exercice, vous étudiez le comportement dynamique d'une grande sphère dans un bain de petites sphères. Les simulations sont maintenant à deux dimensions.

Première expérience

Procédez comme à l'exercice précédent pour organiser vos expériences dans un dossier propre à cet exercice. Les programmes sont ici.

Lancez une première simulation, que vous laisserez tourner pendant quelques minutes. Comme pour le premier exercice, la sortie est composée de deux types de fichiers :

Créez le notebook Jupyter et tracez les positions en fonction du temps, $x(t)$ et $y(t)$, puis la trajectoire de la grande sphère $(x,y)$.

Fichiers de données

Pour avoir de bonnes statistiques, il faut faire tourner de longues simulations. Pour économiser de l'électricité et du temps de calcul, vous pouvez télécharger directement des résultats de simulations. Les paragraphes ci-dessous expliquent ce qu'ils contiennent et comment ils ont été générés.

Les simulations ont tourné plus d'une heure, ce qui crée des fichiers de données énormes, d'environ $10^8$ lignes. Ces fichiers sont trop gros pour être importés dans Jupyter (importer un fichier le charge dans la mémoire vive). Ils sont gros car ils contiennent une trajectoire longue et bien échantillonée. Ils ont été découpés en deux fichiers, le premier contenant une trajectoire courte et bien échantillonée, pour voir ce qui se passe aux temps courts, le second une trajectoire longue et mal échantillonée, pour voir ce qui se passe aux temps longs.

Les commandes qui ont été utilisées sont les suivantes ; vous pouvez les tester sur les fichiers issus de vos simulations. Pour commencer, on peut voir la taille et le nombre de lignes d'un fichier avec les commandes suivantes :

ls -lh | grep bpart
wc -l bparticle.dat

Le découpage en deux fichiers a été fait avec les commandes

head -n 1000000 bparticle.dat > bp_court.dat
awk 'NR%100==1' bparticle.dat > bp_long.dat

La première commande prend le premier million de lignes dans bparticle.dat, et le redirige vers le fichier bp_court.dat. La seconde prend une ligne sur 100 et l'écrit dans bp_long.dat.

Les fichiers obtenus restent gros, et leur chargement dans Jupyter prend du temps, il donc est préférable de ne les charger qu'une fois, puis d'utiliser le tableau de données comme argument des fonctions (c'est à dire, ne pas charger le fichier dans les fonctions comme à l'exercice précédent).

Exercice

Distribution des vitesses

Tracez un histogramme de la distribution des vitesses $v_x$ et $v_y$ avec la fonction plt.hist, pour deux valeurs de la fraction volumique. Comparez cette distribution à la distribution de Maxwell pour chaque composante de la vitesse : $$P_\mathrm{M}(v)=\sqrt{\frac{m}{2\pi k_\mathrm{B}T}} \exp\left(-\frac{mv^2}{2k_\mathrm{B}T}\right).$$ De quoi dépend cette distribution ? De quoi ne dépend-elle pas, de façon peut-être surprenante ?

Déplacement quadratique moyen

La trajectoire $\mathbf{r}(t)$ de la grosse sphère semble « aléatoire ». On cherche à quantifier cet aléa. Comme le problème est invariant dans le temps, on ne va s'intéresser qu'aux déplacements, c'est à dire à la statistique de la variable aléatoire $\mathbf{r}(t+\tau)-\mathbf{r}(t)$, qui dépend de $\tau$. Comme le système est isotrope (si on met de côté l'effet de la boîte carrée, qui ne devrait pas avoir de rôle si la boîte est assez grande), on s'attend à ce que la distribution de ce déplacement soit aussi isotrope. La moyenne du déplacement est donc nulle, et la quantité la plus simple à considérer est le moment suivant, le déplacement quadratique moyen $$Q(\tau)=\left\langle [\mathbf{r}(t+\tau)-\mathbf{r}(t)]^2\right\rangle.$$

D'après cette définition, $Q(\tau)$ est une moyenne d'ensemble dont la valeur ne dépend pas de $t$. Cela voudrait dire qu'il faut la calculer sur un grand nombre de simulations. Mais si le système est ergodique, elle est égale à la moyenne temporelle et peut donc être calculée avec une seule trajectoire ; c'est ce que vous allez faire.

Cette quantité est l'observable centrale de cet exercice. On veut tracer la courbe $Q(\tau)$ en échelle logarithmique pour les différentes valeurs de la fraction volumique.

Calcul du déplacement quadratique moyen

Écrivez la fonction Qn(traj, n) qui prend en argument un tableau traj représentant une trajectoire et un entier n et renvoie $Q(n\times\delta t)$ où $\delta t$ est le pas de temps de la trajectoire. Cette fonction ne doit pas utiliser de boucle for pour parcourir les grands tableaux !

Comme on veut tracer $Q(\tau)$ en échelle log-log, il faut prendre des points régulièrement espacés sur une échelle logarithmique. Utilisez la fonction np.geomspace pour obtenir 30 points régulièrement espacés en échelle logarithmique entre $a$ et $b$, puis les fonctions np.floor et np.unique pour arrondir ces nombres à des entiers (il faut un nombre entier de pas de temps) et éliminer les doublons.

Écrivez la fonction DQM(traj) qui calcule le déplacement quadratique moyen pour les points d'une telle liste et renvoie un tableau à deux colonnes $\tau$ et $Q(\tau)$ à partir du tableau traj représentant la trajectoire. Pour avoir une statistique suffisante pour calculer le déplacement quadratique moyen, le temps maximal $\tau$ doit rester petit devant la durée $T_\mathrm{traj}$ de la trajectoire, par exemple $\tau=T_\mathrm{traj}/100$. Cette fonction doit utiliser la fonction Qn définie précédemment.

Calculez le déplacement quadratique moyen aux temps courts et aux temps longs, et tracez-les sur le même graphe. Répétez cette opération pour les deux autres valeurs de la fraction volumique, et tracez tout sur le même graphe. Identifiez deux régimes par la pente de la courbe (ballistique et diffusif). Aux temps courts, tracez la prédiction théorique $$Q(\tau)\simeq \tau^2\langle v^2\rangle = \frac{d k_\mathrm{B}T}{m},$$ où $d$ est la dimension de l'espace, $d=2$ ici. Aux temps longs, tracez la droite $Q(\tau)=a\tau$, le coefficient $a$ étant choisi pour que la droite passe par le dernier point de la courbe.

Comment ces deux régimes dépendent-ils de la température et de la densité du gaz ? Déterminez à partir des courbes la distance parcourue par la grande sphère pendant le régime ballistique.