File indexing completed on 2018-03-02 18:36:06 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
924557e60a Chri*0001 #include "CPP_EEOPTIONS.h"
0002
4c563c2ee9 Chri*0003
0004
0005
0006
924557e60a Chri*0007 SUBROUTINE BARRIER_INIT
e7ea7a463f Alis*0008 IMPLICIT NONE
a85d6ab24e Chri*0009
4c563c2ee9 Chri*0010
0011
2b4c849245 Ed H*0012
4c563c2ee9 Chri*0013
0014
0015
0016
0017
0018
0019
0020
a85d6ab24e Chri*0021 #include "SIZE.h"
924557e60a Chri*0022 #include "EEPARAMS.h"
0023 #include "EESUPPORT.h"
0024 #include "BARRIER.h"
0025
4c563c2ee9 Chri*0026
0027
0028
924557e60a Chri*0029 INTEGER I
4c563c2ee9 Chri*0030
924557e60a Chri*0031
0032 DO I=1,nThreads
0033 key1(1,I) = INVALID
0034 key2(1,I) = INVALID
0035 key3(1,I) = INVALID
0036 door1 = SHUT
0037 door2 = SHUT
0038 door3 = SHUT
a6a74ff42f Chri*0039 bCount(I) = 0
5bfeee1bf0 Chri*0040 masterSet(I) = 0
924557e60a Chri*0041 ENDDO
0042
0043 RETURN
0044 END
4c563c2ee9 Chri*0045
0046
0047
0048
0049
924557e60a Chri*0050 SUBROUTINE BARRIER( myThid )
0051 IMPLICIT NONE
a85d6ab24e Chri*0052
4c563c2ee9 Chri*0053
0054
84f025f053 Jean*0055
0056
4c563c2ee9 Chri*0057
84f025f053 Jean*0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
4c563c2ee9 Chri*0089
0090
0091
0092
a85d6ab24e Chri*0093 #include "SIZE.h"
924557e60a Chri*0094 #include "EEPARAMS.h"
0095 #include "EESUPPORT.h"
0096 #include "BARRIER.h"
0097
4c563c2ee9 Chri*0098
0099
924557e60a Chri*0100 INTEGER myThid
0101
4c563c2ee9 Chri*0102
924557e60a Chri*0103
84f025f053 Jean*0104
4c563c2ee9 Chri*0105
0106
924557e60a Chri*0107 INTEGER nDone
0108 INTEGER I
4c563c2ee9 Chri*0109
924557e60a Chri*0110
0111
1d73358b0d Chri*0112
924557e60a Chri*0113
0114
a6a74ff42f Chri*0115 #ifdef USE_OMP_THREADING
0116
0117 bCount(myThid) = bCount(myThid) + 1
5bfeee1bf0 Chri*0118 IF ( masterSet(myThid) .NE. 0 ) THEN
84f025f053 Jean*0119 PRINT *, 'BARRIER called for master reg myThid == ',
5bfeee1bf0 Chri*0120 & myThid, masterSet(myThid)
0121 ENDIF
a6a74ff42f Chri*0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135 RETURN
0136 #endif
0137
924557e60a Chri*0138
0139 IF ( myThid .LT. 1 .OR. myThid .GT. nThreads ) THEN
2cfc9d59a2 Patr*0140 WRITE(*,*) '!!!!!!! PANIC !!!!!!! CATASTROPHIC ERROR'
84f025f053 Jean*0141 WRITE(*,*) '!!!!!!! PANIC !!!!!!! in S/R BARRIER myThid = ',
46dc4f419b Chri*0142 & myThid, ' nThreads = ', nThreads
924557e60a Chri*0143 STOP 'ABNROMAL END: S/R BARRIER'
0144 ENDIF
0145
0146
0147 IF ( key1(1,myThid) .EQ. VALID ) THEN
2cfc9d59a2 Patr*0148 WRITE(*,*) '!!!!!!! PANIC !!!!!!! CATASTROPHIC ERROR'
84f025f053 Jean*0149 WRITE(*,*) '!!!!!!! PANIC !!!!!!! in S/R BARRIER myThid = ',
46dc4f419b Chri*0150 & myThid, ' key1 already validated'
924557e60a Chri*0151 STOP 'ABNROMAL END: S/R BARRIER'
0152 ENDIF
0153 key1(1,myThid) = VALID
0154
0155 IF ( myThid .eq. 1 ) THEN
0156 10 CONTINUE
0157 nDone = 0
0158 DO I=1,nThreads
0159 if ( key1(1,I) .EQ. VALID ) nDone = nDone+1
0160 ENDDO
84f025f053 Jean*0161 CALL FOOL_THE_COMPILER( key1(1,1) )
924557e60a Chri*0162 IF ( nDone .LT. nThreads ) GOTO 10
0163 door1 = OPEN
0164 ELSE
0165 11 CONTINUE
0166 CALL FOOL_THE_COMPILER( door1 )
0167 IF ( door1 .NE. OPEN ) GOTO 11
0168 ENDIF
0169
0170 key1(1,myThid) = INVALID
0171
0172
0173
2cfc9d59a2 Patr*0174
924557e60a Chri*0175
0176
0177
0178
a28319ceb3 Alis*0179
924557e60a Chri*0180
0181
0182 IF ( myThid .EQ. 1 ) THEN
0183 door3 = SHUT
0184 ENDIF
0185
0186
0187
0188
84f025f053 Jean*0189
924557e60a Chri*0190
0191
84f025f053 Jean*0192
924557e60a Chri*0193 IF ( key2(1,myThid) .EQ. VALID ) THEN
2cfc9d59a2 Patr*0194 WRITE(*,*) '!!!!!!! PANIC !!!!!!! CATASTROPHIC ERROR'
84f025f053 Jean*0195 WRITE(*,*) '!!!!!!! PANIC !!!!!!! in S/R BARRIER myThid = ',
46dc4f419b Chri*0196 & myThid, ' key2 already validated'
924557e60a Chri*0197 STOP 'ABNROMAL END: S/R BARRIER'
0198 ENDIF
0199 key2(1,myThid) = VALID
0200
0201 IF ( myThid .eq. 1 ) THEN
0202 20 CONTINUE
0203 nDone = 0
0204 DO I=1,nThreads
0205 if ( key2(1,I) .EQ. VALID ) nDone = nDone+1
0206 ENDDO
84f025f053 Jean*0207 CALL FOOL_THE_COMPILER( key2(1,1) )
924557e60a Chri*0208 IF ( nDone .LT. nThreads ) GOTO 20
0209 door2 = OPEN
0210 ELSE
0211 21 CONTINUE
0212 CALL FOOL_THE_COMPILER( door2 )
0213 IF ( door2 .NE. OPEN ) GOTO 21
0214 ENDIF
0215
0216
0217 key2(1,myThid) = INVALID
0218
0219
a28319ceb3 Alis*0220
924557e60a Chri*0221
0222
0223 IF ( myThid .EQ. 1 ) THEN
0224 door1 = SHUT
0225 ENDIF
84f025f053 Jean*0226
0227
924557e60a Chri*0228
0229 IF ( key3(1,myThid) .EQ. VALID ) THEN
2cfc9d59a2 Patr*0230 WRITE(*,*) '!!!!!!! PANIC !!!!!!! CATASTROPHIC ERROR'
84f025f053 Jean*0231 WRITE(*,*) '!!!!!!! PANIC !!!!!!! in S/R BARRIER myThid = ',
46dc4f419b Chri*0232 & myThid, ' key3 already validated'
924557e60a Chri*0233 STOP 'ABNROMAL END: S/R BARRIER'
0234 ENDIF
0235 key3(1,myThid) = VALID
0236
0237 IF ( myThid .eq. 1 ) THEN
0238 30 CONTINUE
0239 nDone = 0
0240 DO I=1,nThreads
0241 if ( key3(1,I) .EQ. VALID ) nDone = nDone+1
0242 ENDDO
84f025f053 Jean*0243 CALL FOOL_THE_COMPILER( key3(1,1) )
924557e60a Chri*0244 IF ( nDone .LT. nThreads ) GOTO 30
0245 door3 = OPEN
0246 ELSE
0247 31 CONTINUE
0248 CALL FOOL_THE_COMPILER( door3 )
0249 IF ( door3 .NE. OPEN ) GOTO 31
0250 ENDIF
0251
0252
0253 key3(1,myThid) = INVALID
0254
0255
a28319ceb3 Alis*0256
924557e60a Chri*0257
0258
0259 IF ( myThid .EQ. 1 ) THEN
0260 door2 = SHUT
0261 ENDIF
0262
0263
1d73358b0d Chri*0264
924557e60a Chri*0265
84f025f053 Jean*0266
924557e60a Chri*0267 RETURN
0268 END
5bfeee1bf0 Chri*0269
0270
0271 SUBROUTINE BARRIER_MS( myThid )
0272 IMPLICIT NONE
0273
0274
0275
0276 #include "SIZE.h"
0277 #include "EEPARAMS.h"
0278 #include "EESUPPORT.h"
0279 #include "BARRIER.h"
0280 INTEGER myThid
0281
0282 masterSet(myThid) = masterSet(myThid) + 1
0283
0284 RETURN
0285 END
0286 SUBROUTINE BARRIER_MU( myThid )
0287 IMPLICIT NONE
0288
0289
0290
0291 #include "SIZE.h"
0292 #include "EEPARAMS.h"
0293 #include "EESUPPORT.h"
0294 #include "BARRIER.h"
0295 INTEGER myThid
0296
0297 masterSet(myThid) = masterSet(myThid) - 1
0298
0299 RETURN
0300 END