Retour à TDs PRCD

Gravitation universelle

Version PDF

On souhaite lors de ce TD simuler l’action mutuelle des forces gravitationnelles agissant sur un ensemble de masses ponctuelles situées dans un plan infini.

Ce TD utilise le double buffering, le recouvrement calcul-communication, les datatypes MPI, et les communications persistantes.

1 Simulation d’interactions gravitationnelles

Chaque masse ponctuelle M possède :

  • une masse invariante m
  • une position dans le plan infini p
  • une vitesse courante v.

À chaque pas de temps, on doit calculer l’influence sur chacune des masses des forces gravitationnelles induites par toutes les autres, et modifier la vitesse et la position des masses en conséquence.

Pour cela, à chaque pas de temps t, pour chaque masse Mi

  1. on calcule la somme des forces gravitationnelles exercée sur Mi par chacune des autres masses Mj :

    avec :

    u est le vecteur unité sous-tendant la demi-droite [Mi,Mj)

  2. on déduit de cette force, par le principe fondamental de la dynamique, l’accélération appliquée à cette particule à un instant t :
  3. Puis, en appliquant cette accélération at pendant le pas de temps ∂t, on obtient la vitesse de la masse Mi au temps t + ∂t :
  4. Enfin, en appliquant la vitesse vt pendant le pas de temps ∂t, on obtient la position de la masse Mi au temps t + ∂t :

À mesure que les masses se rapprocheront les unes des autres, les forces appliquées seront de plus en plus grandes, et donneront lieu à des déplacements de plus en plus rapides. De fait, on ne peut conserver un pas de temps constant sur l’ensemble des itérations. Il faudra donc, à chaque pas de temps, définir la durée de celui-ci.

2 Travail à réaliser

  1. En supposant que l’ensemble des masses du système (avec l’ensemble de leur information relative : m, p, et v) ne peut tenir dans la mémoire d’un seul processus, réalisez le programme MPI correspondant qui permettra de limiter la mémoire par processus a un maximum de 3 * N∕P , où N est le nombre total de masse du système, P le nombre de processus. On notera également n = N∕P , le nombre de masses gérées par chaque processus.
  2. Mettez en place un mécanisme de recouvrement calcul-communication, à base de communication non-bloquantes persistantes, permettant le calcul entre les masses possédées localement et celles reçues des autres processeurs. Utilisez pour cela deux tampons interchangeables et une topologie d’anneau logique.

    On portera une attention particulière à ne communiquer que les données nécéssaires.

  3. Afin de prendre en compte finement les interactions locales, la durée du pas de temps sera prise de telle façon qu’un sommet ne se rapproche pas de plus de 10% de la position courante du plus proche de ses voisins. La valeur du pas de temps à choisir est donc décidée collectivement lors de chaque itération. La valeur du meilleur pas de temps peut donc être calculée pour chaque masse, puis un consensus collectif est pris pour passer à l’itération suivante. Pour chaque masse Mi, on doit respecter:
  4. Prévoyez un dispositif de sortie permettant d’obtenir à chaque pas de temps les positions des masses, pour visualisation ultérieure des trajectoires (sous Gnuplot par exemple).

3 Pour en savoir plus

Ce TD n’est en fait qu’une introduction au prochain TD sur la FMM qui permet de réduire la complexité de ce type de problème. Voici quelques liens sur les méthodes de résolutions de problèmes à n corps :