![]() |
Le but de cette étape est en fait de décrire les échanges qui auront lieu lors de la simulation, mais
aussi lors de la contruction de la matrice de contrainte. On rappelle que la dimension du système
de contrainte est le nombre d'atomes contenus dans la zone spatiale
du recouvrement.
Pour bien comprendre ce qu'il va se passer, on peut s'aider du schémas 4.3. La matrice de
contrainte sera contenue dans le monde continu et dans le monde atomique. Elle sera contenue deux fois.
En revanche, dans chacun de ces mondes, elle sera distribuée. Dès lors, le calcul de cette matrice va etre
effectue en parallel. Mais pour cela il faut normaliser la procédure qui permet de construire le schemas de
communication.
![]() |
Après la réalisation des pondérations, ce qui est connu par chaque processeur, ce sont les degrés de libertés à corriger. La figure 4.4 montre la connaissance spatiale de chacun des noeuds dans un cas simple.
Donc les noeuds dédiés à la dynamique moléculaire connaissent la dimension du système et de la matrice de contrainte. En revanche, les noeuds dédiés à la mécanique continue ne peuvent pas connaitre cette information. Afin de minimiser l'opération d'échange qui va suivre, les noeuds MD envoient, non pas une liste d'atomes mais une figure geometrique qui contient les atomes locaux et diffuse cela a tous les propriétaires de mécanique continue (cette geométrie sera basée sur celle des boites) donc à base cubique.
Les noeuds de mecanique continue recoivent de la part de tous les noeuds MD des zones geométriques qui
contiennent l'espace de couplage.
A partir de cette information, chaque noeud MC déduit quels seront ses
interlocuteurs, et ce grace a l'intersection avec sa propre géometrie (un noeud sera mon interlocuteur si
l'intersection de ma geometrie avec les boites d'atomes qu'il gère n'est pas vide).
Dans une phase collective, les noeuds MC se déclarent à leur interlocuteurs MD. Un prémice de
schémas de communication est donc implanté, puisque tous les noeuds de calculs, quelque soit leur type
savent quels seront leur interlocuteurs. En revanche les noeuds MC ignorent encore les positions et la quantité
d'atomes qu'il devront gérer tandis que les noeuds MD ignorent la répartition des atomes sur ces derniers.
Dans la phase qui suit, les noeuds MD envoient uniquement à leur interlocuteurs une liste d'atome et leurs
coordonnées spatiales. Les noeuds MC recoivent ces informations par processeurs et ignorent ceux hors de leur géométrie.
Dans une phase collective, les noeuds MC qui rejettent certains atomes précisent à leur interlocuteurs
les atomes qu'ils ne gerent pas. Cela permet de construire la liste exacte, par atomes, des destinataires
dans la procedure de communication.
Désormais on peut donc construire les objets DuoDistributedVecteur pour chaque processeur présent sur la grappe qui devra gérer une zone de recouvrement.
![]() |
A ce stade, chacun des noeuds de calcul connait le nombre d'atome qu'il gère.
En revanche l'ordre dans lequel sont stockés les atomes peut différer comme par example dans le cas présenté
par la figure 4.5. En effet il se peut que la distribution geometrique ne coincide pas
avec la numérotation des noeuds de calculs, surtout dans des géométries cycliques.
Afin de ne pas rompre le parcours optimisé des atomes(tri par boite) on ne va pas réordonner
les listes d'atomes.
Cette fonction du recouvrement sera assurée par la méthode BuildControlPointsDistribution(). Cette fonction rassemblera les informations recoltées dans les étapes décrites ci dessus. En particulier cette methode construira un objet DuoDistributedVecteur, qui sera utilisé pour stocker la liste des destinataires (que l'on compressera lorsque c'est possible) et qui pourra etre utilisé pour recombiner ou réduire les deux vecteurs en un seul (Cela va servir dans la construction de la matrice de contrainte).
tougui 2005-09-08