1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_EEOPTIONS.h" |
5 |
|
#include "W2_OPTIONS.h" |
6 |
|
|
7 |
SUBROUTINE EXCH2_RECV_RX2( |
SUBROUTINE EXCH2_RECV_RX2( |
8 |
I tIlo, tIhi, tiStride, |
I tIlo, tIhi, tiStride, |
21 |
|
|
22 |
IMPLICIT NONE |
IMPLICIT NONE |
23 |
|
|
24 |
C |
#include "SIZE.h" |
25 |
#include "W2_OPTIONS.h" |
#include "EEPARAMS.h" |
26 |
|
#include "EESUPPORT.h" |
27 |
#include "W2_EXCH2_TOPOLOGY.h" |
#include "W2_EXCH2_TOPOLOGY.h" |
28 |
|
|
|
#include "EEPARAMS.h" |
|
|
C |
|
29 |
C === Routine arguments === |
C === Routine arguments === |
30 |
C tIlo, tIhi, tIstride :: index range in I that will be filled in target "array" |
C tIlo, tIhi, tIstride :: index range in I that will be filled in target "array" |
31 |
C tJlo, tJhi, tJstride :: index range in J that will be filled in target "array" |
C tJlo, tJhi, tJstride :: index range in J that will be filled in target "array" |
57 |
C myTiles :: List of nt tiles that this process owns. |
C myTiles :: List of nt tiles that this process owns. |
58 |
C commSetting :: Mode of communication used to exchnage with this neighbor |
C commSetting :: Mode of communication used to exchnage with this neighbor |
59 |
C myThid :: Thread number of this instance of EXCH2_RECV_RX1 |
C myThid :: Thread number of this instance of EXCH2_RECV_RX1 |
60 |
C |
C |
61 |
INTEGER tILo, tIHi, tiStride |
INTEGER tILo, tIHi, tiStride |
62 |
INTEGER tJLo, tJHi, tjStride |
INTEGER tJLo, tJHi, tjStride |
63 |
INTEGER tKLo, tKHi, tkStride |
INTEGER tKLo, tKHi, tkStride |
64 |
INTEGER i1Lo, i1Hi, j1Lo, j1Hi, k1Lo, k1Hi |
INTEGER i1Lo, i1Hi, j1Lo, j1Hi, k1Lo, k1Hi |
65 |
INTEGER i2Lo, i2Hi, j2Lo, j2Hi, k2Lo, k2Hi |
INTEGER i2Lo, i2Hi, j2Lo, j2Hi, k2Lo, k2Hi |
66 |
INTEGER thisTile, nN, thisI |
INTEGER thisTile, nN, thisI |
67 |
INTEGER e2BufrRecSize |
INTEGER e2BufrRecSize |
68 |
INTEGER mnb, nt |
INTEGER mnb, nt |
69 |
_RX e2Bufr1_RX( e2BufrRecSize, mnb, nt, 2 ) |
_RX e2Bufr1_RX( e2BufrRecSize, mnb, nt, 2 ) |
70 |
_RX e2Bufr2_RX( e2BufrRecSize, mnb, nt, 2 ) |
_RX e2Bufr2_RX( e2BufrRecSize, mnb, nt, 2 ) |
93 |
C mb, nb :: Selects e2Bufr, msgHandle record to use |
C mb, nb :: Selects e2Bufr, msgHandle record to use |
94 |
C ir :: |
C ir :: |
95 |
INTEGER mb, nb, ir |
INTEGER mb, nb, ir |
96 |
C oN :: Opposing send record number |
C oN :: Opposing send record number |
97 |
INTEGER oN |
INTEGER oN |
98 |
C Loop counters |
C Loop counters |
99 |
INTEGER I |
INTEGER I |
101 |
INTEGER itl2reduce, jtl2reduce |
INTEGER itl2reduce, jtl2reduce |
102 |
|
|
103 |
C MPI setup |
C MPI setup |
|
#include "SIZE.h" |
|
|
#include "EESUPPORT.h" |
|
104 |
#ifdef ALLOW_USE_MPI |
#ifdef ALLOW_USE_MPI |
105 |
INTEGER nri1, nrj1, nrk1 |
INTEGER nri1, nrj1, nrk1 |
106 |
INTEGER nri2, nrj2, nrk2 |
INTEGER nri2, nrj2, nrk2 |
114 |
#endif |
#endif |
115 |
|
|
116 |
tt=exch2_neighbourId(nN, thisTile ) |
tt=exch2_neighbourId(nN, thisTile ) |
117 |
oN=exch2_opposingSend_record(nN, thisTile ) |
oN=exch2_opposingSend(nN, thisTile ) |
118 |
itl1reduce=0 |
itl1reduce=0 |
119 |
jtl1reduce=0 |
jtl1reduce=0 |
120 |
itl2reduce=0 |
itl2reduce=0 |
121 |
jtl2reduce=0 |
jtl2reduce=0 |
122 |
IF ( exch2_pi(1,oN,tt) .EQ. -1 ) itl1reduce=1 |
IF ( exch2_pij(1,oN,tt) .EQ. -1 ) itl1reduce=1 |
123 |
IF ( exch2_pj(1,oN,tt) .EQ. -1 ) itl1reduce=1 |
IF ( exch2_pij(3,oN,tt) .EQ. -1 ) itl1reduce=1 |
124 |
IF ( exch2_pi(2,oN,tt) .EQ. -1 ) jtl2reduce=1 |
IF ( exch2_pij(2,oN,tt) .EQ. -1 ) jtl2reduce=1 |
125 |
IF ( exch2_pj(2,oN,tt) .EQ. -1 ) jtl2reduce=1 |
IF ( exch2_pij(4,oN,tt) .EQ. -1 ) jtl2reduce=1 |
126 |
|
|
127 |
C Handle receive end data transport according to communication mechanism between |
C Handle receive end data transport according to communication mechanism between |
128 |
C source and target tile |
C source and target tile |
129 |
IF ( commSetting .EQ. 'P' ) THEN |
IF ( commSetting .EQ. 'P' ) THEN |
130 |
C 1 Need to check and spin on data ready assertion for multithreaded mode, for now do nothing i.e. |
C 1 Need to check and spin on data ready assertion for multithreaded mode, for now do nothing i.e. |
131 |
C assume only one thread per process. |
C assume only one thread per process. |
132 |
|
|
133 |
C 2 Need to set e2Bufr to use put buffer from opposing send. |
C 2 Need to set e2Bufr to use put buffer from opposing send. |
134 |
oN = exch2_opposingSend_record(nN, thisTile ) |
oN = exch2_opposingSend(nN, thisTile ) |
135 |
mb = oN |
mb = oN |
136 |
ir = 1 |
ir = 1 |
137 |
DO I=1,nt |
DO I=1,nt |
226 |
ENDDO |
ENDDO |
227 |
ENDDO |
ENDDO |
228 |
ENDDO |
ENDDO |
229 |
|
|
230 |
RETURN |
RETURN |
231 |
END |
END |
232 |
|
|