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