RPN_COMM

(RPN_COMM_adj_halo)


SUBROUTINE RPN_COMM_xch_halo
(larray,minx,maxx,miny,maxy,ni,nj,nk,halox,haloy,periodx,periody,gni,npol_row)

ARGUMENTS

larray Tableau contenant la tuile locale real ou integer I/O
minx,maxx, miny, maxy Dimensions de larray (nk pour l'axe z) integer I
ni,nj,nk Taille du problème de la tuile locale integer I
halox,haloy Largeur des halos en x et en y integer I
periodx,periody Periodicité en x et y logical I
gni Taille du problème global en x (cas semi-lag seulement) integer I
npol_row Nb de rangées de processeurs aux pôles (cas semi-lag) integer I

 
 

Dimensions du tableau local larray: larray(minx:maxx,miny:maxy,nk)
Dimensions du problème local: larray(ni,nj,nk)
Dimensions du problème local + halo: larray(1-halox,ni+halox,1-haloy,nj+haloy,nk)
Dimensions d'une rangée (cas semi-lag): larray(gni,nj,nk)

                       maxx
minx +-------------------+ maxy
     |     halo          |
     | +---------------+ |
     | |     ni        | |
     | |             nj| |
     | |(1,1,k)        | |
     | +---------------+ |
     |                   |
     +-------------------+ miny

Taille du problème et décomposition du domaine pour 3x3 processeurs:

      1        gni
      +--+--+--+
      |P6|P7|P8|
      +--+--+--+
      |P3|P4|P5|
      +--+--+--+
      |P0|P1|P2|
      +--+--+--+
      1         gni

Exemple d'échange adjoint de halo ouest-est: la bande notée "x" s'additionne à la bande "y" du tableau local du processeur de droite:

            P0                                                                    P1

+-----------+                  +-------------+
| halo     x|                  |  y+x        |
| +-------+x|                  | +---------+ |
| |       |x|    --------->    | |y+x      | |
| |       |x|                  | |y+x      | |
| +-------+x|                  | +---------+ |
| halo     x|                  |  y+x        |
+-----------+                  +-------------+

Exemple d'échange adjoint de halo, cas semi-lagrangien: ici, on "colle" les tableaux d'une rangée est-ouest de processeurs. À la fin du processus, tous les processeurs de la rangée ont la bande "globale"

            P0                            P1                                P2                                P0 et P1 et P2
                                                                                                                      (a=x+y, b=y+z)
+----------+   +----------+   +----------+    +---------------------+
|xxxxzzxxxx|   |yyyyyyyyyy|   |zzzzzzzzzz|    |xxxxxxaayyyybbzzzzzzz|
|x+------+x|   |y+------+y|   |z+------+z|    |x+-----------------+z|
|x|xxxxxx|x| + |y|yyyyyy|y| + |z|zzzzzz|z| -> |x|xxxxaayyyybbzzzzz|z|
|x|xxxxxx|x|   |y|yyyyyy|y|   |z|zzzzzz|z|    |x|xxxxaayyyybbzzzzz|z|
|x+------+x|   |y+------+y|   |z+------+z|    |x+-----------------+z|
|xxxxxxxxxx|   |yyyyyyyyyy|   |zzzzzzzzzz|    |xxxxxxaayyyybbzzzzzzz|
+----------+   +----------+   +----------+    +---------------------+
 

N.B.: Évidemment, il faut que minx <= 1-halox < ni+halox <= maxx (idem pour y)


DESCRIPTION

Échangeur adjoint de halo: chaque processeur envoie la partie correspondante de son halo à ses des voisins nord, sud, est, ouest.  Le tableau local reçoit les halos de ses voisins et l'additionne aux extrémités de son tableau local.

 Si npol_row > 0, alors l'échange adjoint semi-lagrangien sera utilisé pour les npol_row rangées de processeurs au nord et au sud. 


EXEMPLE

call rpn_comm_adj_halo(tableau,minx,maxx,miny,maxy,ni,nj,nk,1,1,periodx, periody,gni,npol_row) 

VOIR AUSSI

RPN_COMM_* 

Return to RPN Libraries home page