LMDZ
suecradi.F90
Go to the documentation of this file.
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 ,&
57  & lsplitlat
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
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
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
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
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,.OR.'("SUECRAD: ILW > 2*NPRGPEW ",&
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
integer(kind=jpim), dimension(:,:,:), allocatable nrcsndw
Definition: yomprad.F90:139
integer(kind=jpim), dimension(:,:), allocatable nrcneedw
Definition: yomprad.F90:137
integer(kind=jpim), dimension(:,:), allocatable nrcrcvt
Definition: yomprad.F90:144
integer(kind=jpim), dimension(:), allocatable, target nloeng
Definition: yomgem.F90:102
integer(kind=jpim), dimension(:), allocatable, target nlstlat
Definition: yommp.F90:351
integer(kind=jpim) nrimaxt
Definition: yomprad.F90:131
logical lodbgradl
Definition: yomprad.F90:119
subroutine abor1(CDTEXT)
Definition: abor1.F90:2
logical lallopr
Definition: yomct0.F90:327
integer(kind=jpim), dimension(:,:,:), allocatable nrcrcveo
Definition: yomprad.F90:146
Definition: yomct0.F90:1
integer imax
Definition: iotd.h:1
integer(kind=jpim) ndgsal
Definition: yomdim.F90:68
integer(kind=jpim) ndlon
Definition: yomdim.F90:79
logical, dimension(:), allocatable lsplitlat
Definition: yommp.F90:357
Definition: yomgem.F90:1
integer(kind=jpim) nrint
Definition: yoerad.F90:19
integer(kind=jpim), dimension(:,:), allocatable nrlastoff
Definition: yomprad.F90:129
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
integer(kind=jpim), dimension(:,:), allocatable nrcneede
Definition: yomprad.F90:138
integer(kind=jpim) nprgpew
Definition: yomct0.F90:449
integer, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim), dimension(:,:,:), allocatable nrcsnde
Definition: yomprad.F90:140
integer(kind=jpim) nprintlev
Definition: yomct0.F90:328
Definition: yoerad.F90:1
integer(kind=jpim), dimension(:,:,:), allocatable nrcrcvw
Definition: yomprad.F90:141
integer(kind=jpim) ndgenl
Definition: yomdim.F90:72
integer(kind=jpim), parameter jpradce
Definition: parrint.F90:12
Definition: yomdim.F90:1
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
integer(kind=jpim) my_region_ns
Definition: yommp.F90:86
Definition: yommp.F90:1
Definition: yomlun.F90:1
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
integer(kind=jpim), dimension(:,:), allocatable, target nsta
Definition: yommp.F90:345
integer(kind=jpim), dimension(:), allocatable nptrlstlat
Definition: yommp.F90:348
integer(kind=jpim), dimension(:,:), allocatable, target nonl
Definition: yommp.F90:346
integer(kind=jpim), parameter jpradcw
Definition: parrint.F90:11
logical lhook
Definition: yomhook.F90:12
subroutine suecradi
Definition: suecradi.F90:2
integer(kind=jpim), dimension(:,:,:), allocatable nrcrcve
Definition: yomprad.F90:142
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
logical lodbgradi
Definition: yomprad.F90:118
integer(kind=jpim) ndgsag
Definition: yomdim.F90:67
integer(kind=jpim), dimension(:), allocatable, target nptrfrstlat
Definition: yommp.F90:347
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) my_region_ew
Definition: yommp.F90:87
integer(kind=jpim) ndgeng
Definition: yomdim.F90:71
integer(kind=jpim), dimension(:), allocatable, target nfrstlat
Definition: yommp.F90:350
!$Header!integer nvarmx s s unit
Definition: gradsdef.h:20
integer(kind=jpim), dimension(:,:), allocatable nrimax
Definition: yomprad.F90:130
integer(kind=jpim), dimension(:,:,:), allocatable nrcrcvwo
Definition: yomprad.F90:145
integer(kind=jpim), dimension(:,:), allocatable nrcsndt
Definition: yomprad.F90:143
integer(kind=jpim), dimension(:), allocatable nrirint
Definition: yomprad.F90:127
integer(kind=jpim), dimension(:,:), allocatable nrfrstoff
Definition: yomprad.F90:128