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