[3331] | 1 | SUBROUTINE SUECRADI |
---|
| 2 | |
---|
| 3 | !**** *SUECRADI* - INITIALIZE DATA STRUCTURES FOR RADIATION INTERPOLATION |
---|
| 4 | |
---|
| 5 | ! PURPOSE. |
---|
| 6 | ! -------- |
---|
| 7 | ! INITIALIZE DATA STRUCTURES FOR RADIATION INTERPOLATION |
---|
| 8 | |
---|
| 9 | !** INTERFACE. |
---|
| 10 | ! ---------- |
---|
| 11 | ! CALL *SUECRADI* FROM *SUECRAD* |
---|
| 12 | ! -------- ------- |
---|
| 13 | |
---|
| 14 | ! EXPLICIT ARGUMENTS : |
---|
| 15 | ! -------------------- |
---|
| 16 | ! NONE |
---|
| 17 | |
---|
| 18 | ! IMPLICIT ARGUMENTS : |
---|
| 19 | ! -------------------- |
---|
| 20 | |
---|
| 21 | ! METHOD. |
---|
| 22 | ! ------- |
---|
| 23 | ! SEE DOCUMENTATION |
---|
| 24 | |
---|
| 25 | ! EXTERNALS. |
---|
| 26 | ! ---------- |
---|
| 27 | ! NONE |
---|
| 28 | |
---|
| 29 | ! REFERENCE. |
---|
| 30 | ! ---------- |
---|
| 31 | ! ECMWF Research Department documentation of the IFS |
---|
| 32 | |
---|
| 33 | ! AUTHOR. |
---|
| 34 | ! ------- |
---|
| 35 | ! GEORGE MOZDZYNSKI 95-03-13 |
---|
| 36 | |
---|
| 37 | ! MODIFICATIONS. |
---|
| 38 | ! -------------- |
---|
| 39 | ! 980317: JJMorcrette clean-up (NRAD, NFLUX) |
---|
| 40 | ! 990907: JJMorcrette clean-up RRTM |
---|
| 41 | ! 010129: JJMorcrette clean-up LERAD1H, NLNGR1H |
---|
| 42 | ! M.Hamrud 01-Oct-2003 CY28 Cleaning |
---|
| 43 | ! ------------------------------------------------------------------ |
---|
| 44 | |
---|
| 45 | USE PARKIND1 ,ONLY : JPIM ,JPRB |
---|
| 46 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK |
---|
| 47 | |
---|
| 48 | USE PARRINT , ONLY : JPRADCW ,JPRADCE |
---|
| 49 | USE YOMDIM , ONLY : NDGSAG ,NDGSAL ,NDGENG ,NDGENL ,NDLON |
---|
| 50 | USE YOMCT0 , ONLY : NPRGPEW ,NPRINTLEV,LALLOPR |
---|
| 51 | USE YOMLUN , ONLY : NULOUT |
---|
| 52 | USE YOMGEM , ONLY : NLOENG |
---|
| 53 | USE YOERAD , ONLY : & |
---|
| 54 | & NRINT |
---|
| 55 | USE YOMMP , ONLY : MY_REGION_NS ,MY_REGION_EW ,NSTA ,& |
---|
| 56 | & NONL ,NPTRFRSTLAT,NPTRLSTLAT,NFRSTLAT ,NLSTLAT ,& |
---|
| 57 | & LSPLITLAT |
---|
| 58 | USE YOMPRAD , ONLY : LODBGRADI,LODBGRADL,NRIRINT ,NRFRSTOFF,& |
---|
| 59 | & NRLASTOFF,NRIMAX ,NRIMAXT ,NRCNEEDW ,NRCNEEDE ,& |
---|
| 60 | & NRCSNDW ,NRCSNDE ,NRCRCVW ,NRCRCVE ,NRCSNDT ,& |
---|
| 61 | & NRCRCVT ,NRCRCVWO ,NRCRCVEO |
---|
| 62 | |
---|
| 63 | IMPLICIT NONE |
---|
| 64 | |
---|
| 65 | INTEGER(KIND=JPIM) :: ILWA (2*NPRGPEW) |
---|
| 66 | INTEGER(KIND=JPIM) :: ILWB (2*NPRGPEW) |
---|
| 67 | INTEGER(KIND=JPIM) :: ILWBI(2*NPRGPEW) |
---|
| 68 | INTEGER(KIND=JPIM) :: ILEA (2*NPRGPEW) |
---|
| 69 | INTEGER(KIND=JPIM) :: ILEB (2*NPRGPEW) |
---|
| 70 | INTEGER(KIND=JPIM) :: ILEBI(2*NPRGPEW) |
---|
| 71 | INTEGER(KIND=JPIM) :: ISTA(NDGENL,2*NPRGPEW) |
---|
| 72 | INTEGER(KIND=JPIM) :: IONL(NDGENL,2*NPRGPEW) |
---|
| 73 | CHARACTER (LEN = 14) :: CLDBG |
---|
| 74 | |
---|
| 75 | INTEGER(KIND=JPIM) :: IAO, IAOFF, IB, IB1, IB2, IB3, IB4, IB5,& |
---|
| 76 | & IB6, ICNEED, ICTAKE, IGL, IJBXBOFF, & |
---|
| 77 | & IJBXSETA, ILE, ILONS, ILW, IMAX, IMAXC, & |
---|
| 78 | & IMAXT, IOTHBOFF, IOTHSETA, IPROCB, IRINT, & |
---|
| 79 | & IU, IUNIT, JA, JB, JBE, JBW, JBX, JF, JGL, & |
---|
| 80 | & JGLGLO, JL |
---|
| 81 | |
---|
| 82 | LOGICAL :: LLMYSETAISWEST, LLP |
---|
| 83 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 84 | |
---|
| 85 | #include "abor1.intfb.h" |
---|
| 86 | |
---|
| 87 | ! ---------------------------------------------------------------- |
---|
| 88 | |
---|
| 89 | IF (LHOOK) CALL DR_HOOK('SUECRADI',0,ZHOOK_HANDLE) |
---|
| 90 | LLP = NPRINTLEV >= 1.OR. LALLOPR |
---|
| 91 | IU = NULOUT |
---|
| 92 | ALLOCATE(NRIRINT (NDGSAG:NDGENG)) |
---|
| 93 | IF(LLP)WRITE(IU,9) 'NRIRINT ',SIZE(NRIRINT),SHAPE(NRIRINT) |
---|
| 94 | ALLOCATE(NRIMAX (NDGSAG:NDGENG,2*NPRGPEW)) |
---|
| 95 | IF(LLP)WRITE(IU,9) 'NRIMAX ',SIZE(NRIMAX),SHAPE(NRIMAX) |
---|
| 96 | ALLOCATE(NRFRSTOFF(NDGSAG:NDGENG,2*NPRGPEW)) |
---|
| 97 | IF(LLP)WRITE(IU,9) 'NRFRSTOFF ',SIZE(NRFRSTOFF),SHAPE(NRFRSTOFF) |
---|
| 98 | ALLOCATE(NRLASTOFF(NDGSAG:NDGENG,2*NPRGPEW)) |
---|
| 99 | IF(LLP)WRITE(IU,9) 'NRLASTOFF ',SIZE(NRLASTOFF),SHAPE(NRLASTOFF) |
---|
| 100 | ALLOCATE(NRCNEEDW (NDGSAG:NDGENG,2*NPRGPEW)) |
---|
| 101 | IF(LLP)WRITE(IU,9) 'NRCNEEDW ',SIZE(NRCNEEDW),SHAPE(NRCNEEDW) |
---|
| 102 | ALLOCATE(NRCNEEDE (NDGSAG:NDGENG,2*NPRGPEW)) |
---|
| 103 | IF(LLP)WRITE(IU,9) 'NRCNEEDE ',SIZE(NRCNEEDE),SHAPE(NRCNEEDE) |
---|
| 104 | ALLOCATE(NRCSNDW (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 105 | IF(LLP)WRITE(IU,9) 'NRCSNDW ',SIZE(NRCSNDW),SHAPE(NRCSNDW) |
---|
| 106 | ALLOCATE(NRCSNDE (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 107 | IF(LLP)WRITE(IU,9) 'NRCSNDE ',SIZE(NRCSNDE),SHAPE(NRCSNDE) |
---|
| 108 | ALLOCATE(NRCRCVW (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 109 | IF(LLP)WRITE(IU,9) 'NRCRCVW ',SIZE(NRCRCVW),SHAPE(NRCRCVW) |
---|
| 110 | ALLOCATE(NRCRCVE (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 111 | IF(LLP)WRITE(IU,9) 'NRCRCVE ',SIZE(NRCRCVE),SHAPE(NRCRCVE) |
---|
| 112 | ALLOCATE(NRCSNDT (NPRGPEW,-1:1)) |
---|
| 113 | IF(LLP)WRITE(IU,9) 'NRCSNDT ',SIZE(NRCSNDT),SHAPE(NRCSNDT) |
---|
| 114 | ALLOCATE(NRCRCVT (NPRGPEW,-1:1)) |
---|
| 115 | IF(LLP)WRITE(IU,9) 'NRCRCVT ',SIZE(NRCRCVT),SHAPE(NRCRCVT) |
---|
| 116 | ALLOCATE(NRCRCVWO (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 117 | IF(LLP)WRITE(IU,9) 'NRCRCVWO ',SIZE(NRCRCVWO),SHAPE(NRCRCVWO) |
---|
| 118 | ALLOCATE(NRCRCVEO (NDGSAG:NDGENG,NPRGPEW,-1:1)) |
---|
| 119 | IF(LLP)WRITE(IU,9) 'NRCRCVEO ',SIZE(NRCRCVEO),SHAPE(NRCRCVEO) |
---|
| 120 | |
---|
| 121 | 9 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8) |
---|
| 122 | |
---|
| 123 | ! INITIALISE GENERAL DATA STRUCTURES REQUIRED FOR RADIATION INTERPOLATION |
---|
| 124 | |
---|
| 125 | DO JGL=NDGSAG,NDGENG |
---|
| 126 | NRIRINT(JGL)=0 |
---|
| 127 | ENDDO |
---|
| 128 | DO JB=1,2*NPRGPEW |
---|
| 129 | DO JGL=NDGSAG,NDGENG |
---|
| 130 | NRFRSTOFF(JGL,JB)=0 |
---|
| 131 | NRLASTOFF(JGL,JB)=0 |
---|
| 132 | NRIMAX (JGL,JB)=0 |
---|
| 133 | NRCNEEDW (JGL,JB)=0 |
---|
| 134 | NRCNEEDE (JGL,JB)=0 |
---|
| 135 | ENDDO |
---|
| 136 | ENDDO |
---|
| 137 | NRIMAXT=0 |
---|
| 138 | DO JA=-1,1 |
---|
| 139 | DO JB=1,NPRGPEW |
---|
| 140 | DO JGL=NDGSAG,NDGENG |
---|
| 141 | NRCSNDW(JGL,JB,JA)=0 |
---|
| 142 | NRCSNDE(JGL,JB,JA)=0 |
---|
| 143 | NRCRCVW(JGL,JB,JA)=0 |
---|
| 144 | NRCRCVE(JGL,JB,JA)=0 |
---|
| 145 | NRCRCVWO(JGL,JB,JA)=0 |
---|
| 146 | NRCRCVEO(JGL,JB,JA)=0 |
---|
| 147 | ENDDO |
---|
| 148 | ENDDO |
---|
| 149 | ENDDO |
---|
| 150 | DO JA=-1,1 |
---|
| 151 | DO JB=1,NPRGPEW |
---|
| 152 | NRCSNDT(JB,JA)=0 |
---|
| 153 | NRCRCVT(JB,JA)=0 |
---|
| 154 | ENDDO |
---|
| 155 | ENDDO |
---|
| 156 | |
---|
| 157 | DO JB=1,2*NPRGPEW |
---|
| 158 | DO JGL=1,NDGENL |
---|
| 159 | ISTA(JGL,JB)=0 |
---|
| 160 | IONL(JGL,JB)=0 |
---|
| 161 | ENDDO |
---|
| 162 | ENDDO |
---|
| 163 | DO JB=1,NPRGPEW |
---|
| 164 | DO JGL=1,NDGENL |
---|
| 165 | IGL=NPTRFRSTLAT(MY_REGION_NS)-1+JGL |
---|
| 166 | ISTA(JGL,JB)=NSTA(IGL,JB) |
---|
| 167 | IONL(JGL,JB)=NONL(IGL,JB) |
---|
| 168 | ENDDO |
---|
| 169 | ENDDO |
---|
| 170 | IF( LSPLITLAT(NFRSTLAT(MY_REGION_NS)) )THEN |
---|
| 171 | LLMYSETAISWEST=.FALSE. |
---|
| 172 | DO JB=1,NPRGPEW |
---|
| 173 | IF( NSTA(NPTRFRSTLAT(MY_REGION_NS),JB) == 1 )THEN |
---|
| 174 | LLMYSETAISWEST=.TRUE. |
---|
| 175 | ENDIF |
---|
| 176 | ENDDO |
---|
| 177 | IF( LLMYSETAISWEST )THEN |
---|
| 178 | DO JB=1,NPRGPEW |
---|
| 179 | IGL=NPTRFRSTLAT(MY_REGION_NS+1) |
---|
| 180 | ISTA(1,JB+NPRGPEW)=NSTA(IGL,JB) |
---|
| 181 | IONL(1,JB+NPRGPEW)=NONL(IGL,JB) |
---|
| 182 | ENDDO |
---|
| 183 | ELSE |
---|
| 184 | DO JB=1,NPRGPEW |
---|
| 185 | IGL=NPTRFRSTLAT(MY_REGION_NS)-1 |
---|
| 186 | ISTA(1,JB+NPRGPEW)=NSTA(IGL,JB) |
---|
| 187 | IONL(1,JB+NPRGPEW)=NONL(IGL,JB) |
---|
| 188 | ENDDO |
---|
| 189 | ENDIF |
---|
| 190 | ENDIF |
---|
| 191 | IF( LSPLITLAT(NLSTLAT(MY_REGION_NS)) )THEN |
---|
| 192 | LLMYSETAISWEST=.FALSE. |
---|
| 193 | DO JB=1,NPRGPEW |
---|
| 194 | IF( NSTA(NPTRLSTLAT(MY_REGION_NS),JB) == 1 )THEN |
---|
| 195 | LLMYSETAISWEST=.TRUE. |
---|
| 196 | ENDIF |
---|
| 197 | ENDDO |
---|
| 198 | IF( LLMYSETAISWEST )THEN |
---|
| 199 | DO JB=1,NPRGPEW |
---|
| 200 | IGL=NPTRFRSTLAT(MY_REGION_NS+1) |
---|
| 201 | ISTA(NDGENL,JB+NPRGPEW)=NSTA(IGL,JB) |
---|
| 202 | IONL(NDGENL,JB+NPRGPEW)=NONL(IGL,JB) |
---|
| 203 | ENDDO |
---|
| 204 | ELSE |
---|
| 205 | DO JB=1,NPRGPEW |
---|
| 206 | IGL=NPTRFRSTLAT(MY_REGION_NS)-1 |
---|
| 207 | ISTA(NDGENL,JB+NPRGPEW)=NSTA(IGL,JB) |
---|
| 208 | IONL(NDGENL,JB+NPRGPEW)=NONL(IGL,JB) |
---|
| 209 | ENDDO |
---|
| 210 | ENDIF |
---|
| 211 | ENDIF |
---|
| 212 | |
---|
| 213 | IMAXC=NDLON/NRINT+6 |
---|
| 214 | IMAXC=IMAXC+(1-MOD(IMAXC,2)) |
---|
| 215 | |
---|
| 216 | IF( LODBGRADI )THEN |
---|
| 217 | IUNIT=10 |
---|
| 218 | WRITE(CLDBG,'("debug_a",I3.3,"b",I3.3)')MY_REGION_NS,MY_REGION_EW |
---|
| 219 | OPEN(UNIT=IUNIT,FILE=CLDBG) |
---|
| 220 | WRITE(IUNIT,'("SUECRADI: MY_REGION_NS=",I4," MY_REGION_EW=",I4)')MY_REGION_NS,MY_REGION_EW |
---|
| 221 | WRITE(IUNIT,'("SUECRADI: NDGSAL=",I4," NDGENL=",I4)') NDGSAL,NDGENL |
---|
| 222 | WRITE(IUNIT,'("SUECRADI: ")') |
---|
| 223 | ENDIF |
---|
| 224 | |
---|
| 225 | ! LOOP OVER OUR PARTITION LATITUDES, TO INITIALISE SIMPLE ITEMS |
---|
| 226 | |
---|
| 227 | IMAXT=0 |
---|
| 228 | |
---|
| 229 | DO JGL=1,NDGENL |
---|
| 230 | |
---|
| 231 | JGLGLO=NFRSTLAT(MY_REGION_NS)+JGL-1 |
---|
| 232 | ILONS=NLOENG(JGLGLO) |
---|
| 233 | |
---|
| 234 | IRINT=1 |
---|
| 235 | DO JF=1,NRINT |
---|
| 236 | IF( MOD(ILONS,JF) == 0.AND.ILONS/JF <= IMAXC )THEN |
---|
| 237 | IRINT=JF |
---|
| 238 | EXIT |
---|
| 239 | ENDIF |
---|
| 240 | ENDDO |
---|
| 241 | NRIRINT (JGL)=IRINT |
---|
| 242 | |
---|
| 243 | IF( LODBGRADI )THEN |
---|
| 244 | WRITE(IUNIT,'("SUECRADI: JGLGLO=",I4," JGL=",I4,& |
---|
| 245 | & " NLOENG=",I4," NRIRINT=",I1," LSPLITLAT=",L2)')& |
---|
| 246 | & JGLGLO,JGL,NLOENG(JGLGLO),NRIRINT(JGL),LSPLITLAT(JGLGLO) |
---|
| 247 | ENDIF |
---|
| 248 | |
---|
| 249 | IF( LSPLITLAT(JGLGLO) )THEN |
---|
| 250 | IPROCB=2*NPRGPEW |
---|
| 251 | ELSE |
---|
| 252 | IPROCB=NPRGPEW |
---|
| 253 | ENDIF |
---|
| 254 | |
---|
| 255 | DO JB=1,IPROCB |
---|
| 256 | IF( IONL(JGL,JB) == 0 ) CYCLE |
---|
| 257 | NRFRSTOFF(JGL,JB)=MOD(IRINT-MOD(ISTA(JGL,JB)-1,IRINT),IRINT) |
---|
| 258 | NRLASTOFF(JGL,JB)=& |
---|
| 259 | & MOD(IRINT-MOD(ISTA(JGL,JB)+IONL(JGL,JB)-2,IRINT),& |
---|
| 260 | & IRINT) |
---|
| 261 | IMAX=0 |
---|
| 262 | DO JL=1+NRFRSTOFF(JGL,JB),IONL(JGL,JB),IRINT |
---|
| 263 | IMAX=IMAX+1 |
---|
| 264 | ENDDO |
---|
| 265 | NRIMAX(JGL,JB)=IMAX |
---|
| 266 | IF( NRFRSTOFF(JGL,JB) == 0 )THEN |
---|
| 267 | NRCNEEDW (JGL,JB)=JPRADCW-1 |
---|
| 268 | ELSE |
---|
| 269 | NRCNEEDW (JGL,JB)=JPRADCW |
---|
| 270 | ENDIF |
---|
| 271 | IF( NRLASTOFF(JGL,JB) == 0 )THEN |
---|
| 272 | NRCNEEDE (JGL,JB)=JPRADCE-1 |
---|
| 273 | ELSE |
---|
| 274 | NRCNEEDE (JGL,JB)=JPRADCE |
---|
| 275 | ENDIF |
---|
| 276 | IF( LODBGRADI )THEN |
---|
| 277 | WRITE(IUNIT,'("SUECRADI: JB=",I4," ISTA=",I4,& |
---|
| 278 | & " IONL=",I4," NRFRSTOFF=",I1," NRIMAX=",I3,& |
---|
| 279 | & " NRLASTOFF=",I1," CNEEDW=",I1," CNEEDE=",I1)')& |
---|
| 280 | & JB,ISTA(JGL,JB),IONL(JGL,JB),NRFRSTOFF(JGL,JB),& |
---|
| 281 | & NRIMAX(JGL,JB),NRLASTOFF(JGL,JB),& |
---|
| 282 | & NRCNEEDW(JGL,JB),NRCNEEDE(JGL,JB) |
---|
| 283 | ENDIF |
---|
| 284 | ENDDO |
---|
| 285 | |
---|
| 286 | IF( LODBGRADI )THEN |
---|
| 287 | WRITE(IUNIT,'("SUECRADI: ")') |
---|
| 288 | ENDIF |
---|
| 289 | |
---|
| 290 | IMAXT=IMAXT+NRIMAX(JGL,MY_REGION_EW) |
---|
| 291 | |
---|
| 292 | ENDDO |
---|
| 293 | |
---|
| 294 | NRIMAXT=IMAXT |
---|
| 295 | IF( LODBGRADI )THEN |
---|
| 296 | WRITE(IUNIT,'("SUECRADI: NRIMAXT=",I6)') NRIMAXT |
---|
| 297 | ENDIF |
---|
| 298 | |
---|
| 299 | ! NOW LOOP OVER OUR PARTITION LATITUDES, TO DETERMINE SEND AND RECEIVE |
---|
| 300 | ! INFORMATION |
---|
| 301 | |
---|
| 302 | DO JGL=1,NDGENL |
---|
| 303 | |
---|
| 304 | ! TEST IF WE HAVE ANY FINE POINTS |
---|
| 305 | ! IF WE HAVEN'T, THEN WE DON'T HAVE TO SEND OR RECEIVE ANYTHING |
---|
| 306 | |
---|
| 307 | IF( IONL(JGL,MY_REGION_EW) == 0 ) CYCLE |
---|
| 308 | JGLGLO=NFRSTLAT(MY_REGION_NS)+JGL-1 |
---|
| 309 | |
---|
| 310 | ! TEST IF CURRENT LATITUDE IS SPLIT ACROSS SET A's |
---|
| 311 | ! TO SET IPROCB TO THE MAXIMUM NUMBER OF SETB's WE MUST CONSIDER IN |
---|
| 312 | ! THE FOLLOWING CODE FOR THIS LATITUDE |
---|
| 313 | |
---|
| 314 | IF( LSPLITLAT(JGLGLO) )THEN |
---|
| 315 | IPROCB=2*NPRGPEW |
---|
| 316 | ELSE |
---|
| 317 | IPROCB=NPRGPEW |
---|
| 318 | ENDIF |
---|
| 319 | |
---|
| 320 | ! NOW CONSIDER EACH PARTITION (ON THIS LATITUDE) IN TURN TO SEE WHO |
---|
| 321 | ! WILL BE SENDING TO AND RECEIVING FROM IT, AND OBVIOUSLY NOTING |
---|
| 322 | ! PERTINENT INFO IF OUR PARTITION IS SENDING OR RECEIVING |
---|
| 323 | |
---|
| 324 | DO JBX=1,IPROCB |
---|
| 325 | |
---|
| 326 | ! LET'S START BY BUILDING UP A LIST OF WESTERLY AND EASTERLY PARTITIONS |
---|
| 327 | ! CONTAINING ONE OR MORE FINE POINTS, SO THAT WE CAN SUBSEQUENTLY IGNORE |
---|
| 328 | ! ISSUES ABOUT WHETHER THIS IS A SPLIT LATITUDE AND THAT THE EARTH IS |
---|
| 329 | ! ROUND. ALSO THE PARTITION BEING CONSIDERED (JBX) ALWAYS APPEARS AT THE |
---|
| 330 | ! END OF EACH OF THESE LISTS, BECAUSE JBX MAY NEED TO 'LOGICALLY' SEND/RECEIVE |
---|
| 331 | ! COURSE POINTS TO/FROM ITS OWN PARTITION FOR THIS LATITUDE. |
---|
| 332 | |
---|
| 333 | ILW=0 |
---|
| 334 | ILE=0 |
---|
| 335 | IF( LSPLITLAT(JGLGLO) )THEN |
---|
| 336 | |
---|
| 337 | ! DETERMINE WHETHER THE SET A SHARING THIS LATITUDE IS (ABOVE,LEFT) OR |
---|
| 338 | ! (BELOW,RIGHT). WE DETERMINE THIS BY TESTING IF ANY SETB ON THIS LATITUDE |
---|
| 339 | ! STARTS AT 1. |
---|
| 340 | |
---|
| 341 | IAOFF=-1 |
---|
| 342 | DO JB=1,NPRGPEW |
---|
| 343 | IF( ISTA(JGL,JB) == 1 )THEN |
---|
| 344 | IAOFF=1 |
---|
| 345 | EXIT |
---|
| 346 | ENDIF |
---|
| 347 | ENDDO |
---|
| 348 | |
---|
| 349 | IF( JBX <= NPRGPEW )THEN |
---|
| 350 | IJBXSETA=MY_REGION_NS |
---|
| 351 | IOTHSETA=MY_REGION_NS+IAOFF |
---|
| 352 | IJBXBOFF=0 |
---|
| 353 | IOTHBOFF=NPRGPEW |
---|
| 354 | ELSE |
---|
| 355 | IJBXSETA=MY_REGION_NS+IAOFF |
---|
| 356 | IOTHSETA=MY_REGION_NS |
---|
| 357 | IJBXBOFF=NPRGPEW |
---|
| 358 | IOTHBOFF=0 |
---|
| 359 | ENDIF |
---|
| 360 | ! INITIALISE WEST LIST, SPLIT LAT |
---|
| 361 | IF( JBX <= NPRGPEW )THEN |
---|
| 362 | IB1=JBX-1 |
---|
| 363 | IB2=1 |
---|
| 364 | IB3=2*NPRGPEW |
---|
| 365 | IB4=NPRGPEW+1 |
---|
| 366 | IB5=NPRGPEW |
---|
| 367 | IB6=JBX |
---|
| 368 | ELSE |
---|
| 369 | IB1=JBX-1 |
---|
| 370 | IB2=NPRGPEW+1 |
---|
| 371 | IB3=NPRGPEW |
---|
| 372 | IB4=1 |
---|
| 373 | IB5=2*NPRGPEW |
---|
| 374 | IB6=JBX |
---|
| 375 | ENDIF |
---|
| 376 | DO JB=IB1,IB2,-1 |
---|
| 377 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 378 | ILW=ILW+1 |
---|
| 379 | ILWA (ILW)=IJBXSETA |
---|
| 380 | ILWB (ILW)=JB-IJBXBOFF |
---|
| 381 | ILWBI(ILW)=JB |
---|
| 382 | ENDIF |
---|
| 383 | ENDDO |
---|
| 384 | DO JB=IB3,IB4,-1 |
---|
| 385 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 386 | ILW=ILW+1 |
---|
| 387 | ILWA (ILW)=IOTHSETA |
---|
| 388 | ILWB (ILW)=JB-IOTHBOFF |
---|
| 389 | ILWBI(ILW)=JB |
---|
| 390 | ENDIF |
---|
| 391 | ENDDO |
---|
| 392 | DO JB=IB5,IB6,-1 |
---|
| 393 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 394 | ILW=ILW+1 |
---|
| 395 | ILWA (ILW)=IJBXSETA |
---|
| 396 | ILWB (ILW)=JB-IJBXBOFF |
---|
| 397 | ILWBI(ILW)=JB |
---|
| 398 | ENDIF |
---|
| 399 | ENDDO |
---|
| 400 | ! INITIALISE EAST LIST, SPLIT LAT |
---|
| 401 | IF( JBX <= NPRGPEW )THEN |
---|
| 402 | IB1=JBX+1 |
---|
| 403 | IB2=NPRGPEW |
---|
| 404 | IB3=NPRGPEW+1 |
---|
| 405 | IB4=2*NPRGPEW |
---|
| 406 | IB5=1 |
---|
| 407 | IB6=JBX |
---|
| 408 | ELSE |
---|
| 409 | IB1=JBX+1 |
---|
| 410 | IB2=2*NPRGPEW |
---|
| 411 | IB3=1 |
---|
| 412 | IB4=NPRGPEW |
---|
| 413 | IB5=NPRGPEW+1 |
---|
| 414 | IB6=JBX |
---|
| 415 | ENDIF |
---|
| 416 | DO JB=IB1,IB2 |
---|
| 417 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 418 | ILE=ILE+1 |
---|
| 419 | ILEA (ILE)=IJBXSETA |
---|
| 420 | ILEB (ILE)=JB-IJBXBOFF |
---|
| 421 | ILEBI(ILE)=JB |
---|
| 422 | ENDIF |
---|
| 423 | ENDDO |
---|
| 424 | DO JB=IB3,IB4 |
---|
| 425 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 426 | ILE=ILE+1 |
---|
| 427 | ILEA (ILE)=IOTHSETA |
---|
| 428 | ILEB (ILE)=JB-IOTHBOFF |
---|
| 429 | ILEBI(ILE)=JB |
---|
| 430 | ENDIF |
---|
| 431 | ENDDO |
---|
| 432 | DO JB=IB5,IB6 |
---|
| 433 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 434 | ILE=ILE+1 |
---|
| 435 | ILEA (ILE)=IJBXSETA |
---|
| 436 | ILEB (ILE)=JB-IJBXBOFF |
---|
| 437 | ILEBI(ILE)=JB |
---|
| 438 | ENDIF |
---|
| 439 | ENDDO |
---|
| 440 | ELSE |
---|
| 441 | IAOFF=0 |
---|
| 442 | ! INITIALISE WEST LIST, NOT SPLIT LAT |
---|
| 443 | DO JB=JBX-1,1,-1 |
---|
| 444 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 445 | ILW=ILW+1 |
---|
| 446 | ILWA (ILW)=MY_REGION_NS |
---|
| 447 | ILWB (ILW)=JB |
---|
| 448 | ILWBI(ILW)=JB |
---|
| 449 | ENDIF |
---|
| 450 | ENDDO |
---|
| 451 | DO JB=NPRGPEW,JBX,-1 |
---|
| 452 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 453 | ILW=ILW+1 |
---|
| 454 | ILWA (ILW)=MY_REGION_NS |
---|
| 455 | ILWB (ILW)=JB |
---|
| 456 | ILWBI(ILW)=JB |
---|
| 457 | ENDIF |
---|
| 458 | ENDDO |
---|
| 459 | ! INITIALISE EAST LIST, NOT SPLIT LAT |
---|
| 460 | DO JB=JBX+1,NPRGPEW |
---|
| 461 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 462 | ILE=ILE+1 |
---|
| 463 | ILEA (ILE)=MY_REGION_NS |
---|
| 464 | ILEB (ILE)=JB |
---|
| 465 | ILEBI(ILE)=JB |
---|
| 466 | ENDIF |
---|
| 467 | ENDDO |
---|
| 468 | DO JB=1,JBX |
---|
| 469 | IF( IONL(JGL,JB) > 0 )THEN |
---|
| 470 | ILE=ILE+1 |
---|
| 471 | ILEA (ILE)=MY_REGION_NS |
---|
| 472 | ILEB (ILE)=JB |
---|
| 473 | ILEBI(ILE)=JB |
---|
| 474 | ENDIF |
---|
| 475 | ENDDO |
---|
| 476 | ENDIF |
---|
| 477 | IF( ILW > 2*NPRGPEW .OR. ILE > 2*NPRGPEW )THEN |
---|
| 478 | WRITE(NULOUT,'("SUECRAD: ILW > 2*NPRGPEW .OR. ",& |
---|
| 479 | & "ILE > 2*NPRGPEW, ILW=",I6," ILE=",I6)') ILW,ILE |
---|
| 480 | CALL ABOR1('SUECRADI:ILW/E > 2*NPRGPEW') |
---|
| 481 | ENDIF |
---|
| 482 | |
---|
| 483 | ! DETERMINE FOR PARTITION JBX THOSE PARTITIONS THAT IT HAS TO RECEIVE |
---|
| 484 | ! COURSE POINTS FROM. |
---|
| 485 | ! DO THIS BY SEARCHING DOWN THE WESTERN LIST OF PARTITIONS FIRST AND THEN |
---|
| 486 | ! FOR THE EASTERN LIST OF PARTITIONS. |
---|
| 487 | ! THE SEND AND RECEIVE INFO FOR THIS (MY_REGION_NS,MY_REGION_EW) IS DETERMINED BY |
---|
| 488 | ! SIMPLY NOTING WHETHER (MY_REGION_NS,MY_REGION_EW) IS A SENDER OR RECEIVER IN THE |
---|
| 489 | ! ABOVE LIST SEARCH PROCESS. |
---|
| 490 | |
---|
| 491 | ICNEED=NRCNEEDW(JGL,JBX) |
---|
| 492 | |
---|
| 493 | DO JBW=1,ILW |
---|
| 494 | IF( ICNEED == 0 ) EXIT |
---|
| 495 | |
---|
| 496 | ! DOES THIS PARTITION HAVE ANY COURSE POINTS |
---|
| 497 | |
---|
| 498 | IF( NRIMAX(JGL,ILWBI(JBW)) > 0 )THEN |
---|
| 499 | |
---|
| 500 | ! YES, IT DOES |
---|
| 501 | ! THEN TEST IF IT HAS ENOUGH TO SATISFY OUR NEED |
---|
| 502 | |
---|
| 503 | IF( NRIMAX(JGL,ILWBI(JBW)) >= ICNEED )THEN |
---|
| 504 | ICTAKE=ICNEED |
---|
| 505 | ELSE |
---|
| 506 | ICTAKE=NRIMAX(JGL,ILWBI(JBW)) |
---|
| 507 | ENDIF |
---|
| 508 | IF( MY_REGION_NS == ILWA(JBW).AND.MY_REGION_EW == ILWB(JBW) )THEN |
---|
| 509 | ! WE (MY_REGION_NS,MY_REGION_EW) ARE THE SENDER (SENDING EAST COURSE POINTS) |
---|
| 510 | IF( JBX <= NPRGPEW )THEN |
---|
| 511 | IB =JBX |
---|
| 512 | IAO=0 |
---|
| 513 | ELSE |
---|
| 514 | IB =JBX-NPRGPEW |
---|
| 515 | IAO=IAOFF |
---|
| 516 | ENDIF |
---|
| 517 | NRCSNDE(JGL,IB,IAO)=ICTAKE |
---|
| 518 | NRCSNDT(IB,IAO)=NRCSNDT(IB,IAO)+ICTAKE |
---|
| 519 | ENDIF |
---|
| 520 | IF( JBX == MY_REGION_EW )THEN |
---|
| 521 | ! WE (MY_REGION_NS,MY_REGION_EW) ARE THE RECEIVER |
---|
| 522 | IB =ILWB(JBW) |
---|
| 523 | IAO=ILWA(JBW)-MY_REGION_NS |
---|
| 524 | NRCRCVW (JGL,IB,IAO)=ICTAKE |
---|
| 525 | NRCRCVWO(JGL,IB,IAO)=ICNEED-ICTAKE |
---|
| 526 | NRCRCVT (IB,IAO)=NRCRCVT(IB,IAO)+ICTAKE |
---|
| 527 | ENDIF |
---|
| 528 | ICNEED=ICNEED-ICTAKE |
---|
| 529 | ENDIF |
---|
| 530 | ENDDO |
---|
| 531 | |
---|
| 532 | ICNEED=NRCNEEDE(JGL,JBX) |
---|
| 533 | |
---|
| 534 | DO JBE=1,ILE |
---|
| 535 | IF( ICNEED == 0 ) EXIT |
---|
| 536 | |
---|
| 537 | ! DOES THIS PARTITION HAVE ANY COURSE POINTS |
---|
| 538 | |
---|
| 539 | IF( NRIMAX(JGL,ILEBI(JBE)) > 0 )THEN |
---|
| 540 | |
---|
| 541 | ! YES, IT DOES |
---|
| 542 | ! THEN TEST IF IT HAS ENOUGH TO SATISFY OUR NEED |
---|
| 543 | |
---|
| 544 | IF( NRIMAX(JGL,ILEBI(JBE)) >= ICNEED )THEN |
---|
| 545 | ICTAKE=ICNEED |
---|
| 546 | ELSE |
---|
| 547 | ICTAKE=NRIMAX(JGL,ILEBI(JBE)) |
---|
| 548 | ENDIF |
---|
| 549 | IF( MY_REGION_NS == ILEA(JBE).AND.MY_REGION_EW == ILEB(JBE) )THEN |
---|
| 550 | ! WE (MY_REGION_NS,MY_REGION_EW) ARE THE SENDER (SENDING WEST COURSE POINTS) |
---|
| 551 | IF( JBX <= NPRGPEW )THEN |
---|
| 552 | IB =JBX |
---|
| 553 | IAO=0 |
---|
| 554 | ELSE |
---|
| 555 | IB =JBX-NPRGPEW |
---|
| 556 | IAO=IAOFF |
---|
| 557 | ENDIF |
---|
| 558 | NRCSNDW(JGL,IB,IAO)=ICTAKE |
---|
| 559 | NRCSNDT(IB,IAO)=NRCSNDT(IB,IAO)+ICTAKE |
---|
| 560 | ENDIF |
---|
| 561 | IF( JBX == MY_REGION_EW )THEN |
---|
| 562 | ! WE (MY_REGION_NS,MY_REGION_EW) ARE THE RECEIVER |
---|
| 563 | IB =ILEB(JBE) |
---|
| 564 | IAO=ILEA(JBE)-MY_REGION_NS |
---|
| 565 | NRCRCVE (JGL,IB,IAO)=ICTAKE |
---|
| 566 | NRCRCVEO(JGL,IB,IAO)=NRCNEEDW(JGL,JBX)+NRCNEEDE(JGL,JBX)-ICNEED |
---|
| 567 | NRCRCVT (IB,IAO)=NRCRCVT(IB,IAO)+ICTAKE |
---|
| 568 | ENDIF |
---|
| 569 | ICNEED=ICNEED-ICTAKE |
---|
| 570 | ENDIF |
---|
| 571 | ENDDO |
---|
| 572 | |
---|
| 573 | ENDDO |
---|
| 574 | |
---|
| 575 | ! END OF JBX LOOP OVER PARTITIONS |
---|
| 576 | |
---|
| 577 | ENDDO |
---|
| 578 | |
---|
| 579 | ! END OF JGL LOOP OVER LATITUDES |
---|
| 580 | |
---|
| 581 | ! WRITE OUT SEND/RECEIVE TABLES IF DEBUGGING |
---|
| 582 | |
---|
| 583 | IF( LODBGRADI )THEN |
---|
| 584 | DO JA=-1,1 |
---|
| 585 | WRITE(IUNIT,'("SUECRADI: ")') |
---|
| 586 | DO JB=1,NPRGPEW |
---|
| 587 | IF( NRCSNDT(JB,JA) > 0.OR. NRCRCVT(JB,JA) > 0 )THEN |
---|
| 588 | WRITE(IUNIT,'("SUECRADI: SETA=",I4," SETB=",I4,& |
---|
| 589 | & " NRCSNDT=",I6," NRCRCVT=",I6)')& |
---|
| 590 | & JA+MY_REGION_NS,JB,NRCSNDT(JB,JA),NRCRCVT(JB,JA) |
---|
| 591 | ENDIF |
---|
| 592 | ENDDO |
---|
| 593 | ENDDO |
---|
| 594 | |
---|
| 595 | WRITE(IUNIT,'("SUECRADI: ")') |
---|
| 596 | |
---|
| 597 | DO JA=-1,1 |
---|
| 598 | WRITE(IUNIT,'("SUECRADI: ")') |
---|
| 599 | DO JB=1,NPRGPEW |
---|
| 600 | DO JGL=1,NDGENL |
---|
| 601 | JGLGLO=NFRSTLAT(MY_REGION_NS)+JGL-1 |
---|
| 602 | IF( NRCSNDW(JGL,JB,JA) > 0.OR.& |
---|
| 603 | & NRCSNDE(JGL,JB,JA) > 0.OR.& |
---|
| 604 | & NRCRCVW(JGL,JB,JA) > 0.OR.& |
---|
| 605 | & NRCRCVE(JGL,JB,JA) > 0 )THEN |
---|
| 606 | WRITE(IUNIT,'("SUECRADI: JGLGLO=",I4," JGL=",I4,& |
---|
| 607 | & " SETA=",I4," SETB=",I4,& |
---|
| 608 | & " CSNDW=",I6," CSNDE=",I6,& |
---|
| 609 | & " CRCVW=",I6," CRCVE=",I6,& |
---|
| 610 | & " CRCVWO=",I1," CRCVEO=",I1)')& |
---|
| 611 | & JGLGLO,JGL,JA+MY_REGION_NS,JB,& |
---|
| 612 | & NRCSNDW(JGL,JB,JA),NRCSNDE(JGL,JB,JA),& |
---|
| 613 | & NRCRCVW(JGL,JB,JA),NRCRCVE(JGL,JB,JA),& |
---|
| 614 | & NRCRCVWO(JGL,JB,JA),NRCRCVEO(JGL,JB,JA) |
---|
| 615 | ENDIF |
---|
| 616 | ENDDO |
---|
| 617 | ENDDO |
---|
| 618 | ENDDO |
---|
| 619 | IF( .NOT.LODBGRADL )THEN |
---|
| 620 | CLOSE(UNIT=IUNIT) |
---|
| 621 | ENDIF |
---|
| 622 | ENDIF |
---|
| 623 | |
---|
| 624 | ! ------------------------------------------------------------------ |
---|
| 625 | |
---|
| 626 | IF (LHOOK) CALL DR_HOOK('SUECRADI',1,ZHOOK_HANDLE) |
---|
| 627 | END SUBROUTINE SUECRADI |
---|