GCC Code Coverage Report


Directory: ./
File: rad/suecradi.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 281 0.0%
Branches: 0 412 0.0%

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