source: LMDZ5/branches/testing/libf/phylmd/rrtm/suecrad.F90 @ 1999

Last change on this file since 1999 was 1999, checked in by Laurent Fairhead, 10 years ago

Merged trunk changes r1920:1997 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 51.8 KB
Line 
1SUBROUTINE SUECRAD (KULOUT, KLEV, PETAH )
2
3!**** *SUECRAD*   - INITIALIZE COMMONS YOERxx CONTROLLING RADIATION
4
5!     PURPOSE.
6!     --------
7!           INITIALIZE YOERAD, THE COMMON THAT CONTROLS THE
8!           RADIATION OF THE MODEL, AND YOERDU THAT INCLUDES
9!           ADJUSTABLE PARAMETERS FOR RADIATION COMPUTATIONS
10
11!**   INTERFACE.
12!     ----------
13!        CALL *SUECRAD* FROM *SUPHEC*
14!              -------        ------
15
16!        EXPLICIT ARGUMENTS :
17!        --------------------
18!        NONE
19
20!        IMPLICIT ARGUMENTS :
21!        --------------------
22!        COMMONS YOERAD, YOERDU
23
24!     METHOD.
25!     -------
26!        SEE DOCUMENTATION
27
28!     EXTERNALS.
29!     ----------
30!        SUAER, SUAERH, SUAERV, SULW, SUSW, SUOCST, SUSAT
31!        SUAERL, SUAERSN, SUSRTAER, SRTM_INIT, SUSRTCOP
32
33!     REFERENCE.
34!     ----------
35!        ECMWF Research Department documentation of the IFS
36
37!     AUTHOR.
38!     -------
39!        JEAN-JACQUES MORCRETTE  *ECMWF*
40
41!     MODIFICATIONS.
42!     --------------
43!        ORIGINAL : 88-12-15
44!        P.COURTIER AND M.HAMRUD NAME SURAD ALREADY USED
45!        Modified 93-11-15 by Ph. Dandin : FMR scheme with MF
46!        Modified 95-12 by PhD : Cloud overlapping hypothesis for FMR
47!        980317 JJMorcrette clean-up (NRAD, NFLUX)
48!        000118 JJMorcrette variable concentr. uniformly mixed gases
49!        990525 JJMorcrette GISS volcanic and new tropospheric aerosols
50!        990831 JJMorcrette RRTM
51!        R. El Khatib 01-02-02 proper initialization of NFRRC moved in SUCFU
52!        010129 JJMorcrette clean-up LERAD1H, NLNGR1H
53!        011105 GMozdzynski support new radiation grid
54!        011005 JJMorcrette CCN --> Re Water clouds
55!        R. El Khatib 01-02-02 LRRTM=lecmwf by default
56!        020909 GMozdzynski support NRADRES to specify radiation grid
57!        021001 GMozdzynski support on-demand radiation communications
58!        030422 GMozdzynski automatic min-halo
59!        030501 JJMorcrette new radiation grid on, new aerosols on (default)
60!        030513 JJMorcrette progn. O3 / radiation interactions off (default)
61!        M.Hamrud      01-Oct-2003 CY28 Cleaning
62!        050315 JJMorcrette prog.aerosols v1
63!        041214 JJMorcrette SRTM
64!        050111 JJMorcrette new cloud optical properties
65!        050415 GMozdzynski Reduced halo support for radiation interpolation
66!        051004 JJMorcrette UV surface radiation processor
67!        051220 JJMorcrette SRTM112g+LWSCAT+UVprocessor+(bgfx:swclr, radaca)
68!        060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
69!        060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
70!        JJMorcrette 20060721 PP of clear-sky PAR and TOA incident solar radiation
71!        060625 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
72!        060726 JJMorcrette McICA default operational configuration
73!     ------------------------------------------------------------------
74
75USE PARKIND1  ,ONLY : JPIM     ,JPRB
76USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
77
78USE PARDIM   , ONLY : JPMXGL
79USE PARRRTM  , ONLY : JPLAY
80USE PARSRTM  , ONLY : JPGPT
81USE YOMCT0   , ONLY : LOUTPUT  ,NPRINTLEV,LALLOPR,&
82 & NPROC    ,N_REGIONS_NS  ,N_REGIONS_EW
83USE YOMDIM   , ONLY : NDLON    ,NSMAX    ,NDGENL    ,&
84 & NDGSAL   ,NDGLG    ,NDGSAG   ,NDGENG   ,NDSUR1    ,&
85 & NDLSUR   ,NDGSUR   ,NGPBLKS  ,NFLEVG   ,NPROMA 
86USE YOMCT0B  , ONLY : LECMWF
87USE YOMDYN   , ONLY : TSTEP
88! Ce qui concerne NULRAD commente par MPL le 15.04.09
89!USE YOMLUN   , ONLY : NULNAM   ,NULRAD   ,NULOUT
90USE YOMLUN   , ONLY : NULRAD   ,NULOUT
91USE YOMCST   , ONLY : RDAY     ,RG       ,RCPD     ,RPI     ,RI0
92USE YOMPHY   , ONLY : LMPHYS, LRAYFM   ,LRAYFM15
93USE YOEPHY   , ONLY : LEPHYS   ,LERADI, LE4ALB
94USE YOERDI   , ONLY : RCCO2, RCCH4, RCN2O, RCCFC11, RCCFC12, RSOLINC
95USE YOERAD   , ONLY : NAER     , NOZOCL   ,&
96 & NRADFR   ,NRADPFR  ,NRADPLA  ,NRINT    ,&
97 & NRADNFR  ,NRADSFR  ,NOVLP    ,NRPROMA  ,&
98!& NLW      ,NSW      ,NTSW     ,NCSRADF  ,&
99! NSW mis dans .def MPL 20140211
100 & NLW      ,NTSW     ,NCSRADF  ,&
101 & NMODE    ,NLNGR1H  ,NSWNL    ,NSWTL    ,NUV     ,&
102 & LERAD1H  ,LERADHS  ,LEPO3RA  ,LRADLB   ,LONEWSW ,&
103 & LCCNL    ,LCCNO    ,&
104 & LECSRAD  ,LHVOLCA  ,LNEWAER  ,LRRTM    ,LSRTM   ,LDIFFC  ,&
105 & NRADINT  ,NRADRES  ,CRTABLEDIR,CRTABLEFIL       ,&
106 & NICEOPT  ,NLIQOPT  ,NRADIP   ,NRADLP   ,NINHOM  ,NLAYINH ,&
107 & LRAYL    ,LOPTRPROMA,&
108 & RCCNLND  ,RCCNSEA  ,RLWINHF  ,RSWINHF  ,RRe2De  ,&
109 & RPERTOZ  ,NPERTOZ  ,NMCICA   ,&
110 & LNOTROAER,NPERTAER ,LECO2VAR ,LHGHG    ,NHINCSOL,NSCEN ,&
111 & LEDBUG
112USE YOERDU   , ONLY : NUAER    ,NTRAER   ,RCDAY    ,R10E     ,&
113 & REPLOG   ,REPSC    ,REPSCO   ,REPSCQ   ,REPSCT   ,&
114 & REPSCW   ,DIFF 
115USE YOEAERD  , ONLY : CVDAES   ,CVDAEL   ,CVDAEU   ,CVDAED   ,&
116 & RCAEOPS  ,RCAEOPL  ,RCAEOPU  ,RCAEOPD  ,RCTRBGA  ,&
117 & RCVOBGA  ,RCSTBGA  ,RCTRPT   ,RCAEADM  ,RCAEROS  ,            &
118 & RCAEADK 
119USE YOE_UVRAD, ONLY : JUVLAM, LUVPROC, LUVTDEP, LUVDBG, NRADUV, NUVTIM, RUVLAM, RMUZUV
120
121USE YOMMP    , ONLY : MYPROC   ,NPRCIDS  ,LSPLIT   ,NAPSETS  ,&
122 & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,&
123 & NSTA,NONL,NPTRFRSTLAT,NFRSTLAT,NLSTLAT ,&
124 & MY_REGION_NS  ,MY_REGION_EW   ,NGLOBALINDEX ,&
125 & NRISTA  ,NRIONL   ,NRIOFF    ,NRIEXT   ,NRICORE ,&
126 & NRISENDPOS ,NRIRECVPOS ,NRISENDPTR ,NRIRECVPTR ,&
127 & NARIB1  ,NRIPROCS ,NRIMPBUFSZ,NRISPT   ,NRIRPT ,&
128 & NRICOMM ,&
129 & NROSTA  ,NROONL   ,NROOFF    ,NROEXT   ,NROCORE ,&
130 & NROSENDPOS ,NRORECVPOS ,NROSENDPTR ,NRORECVPTR ,&
131 & NAROB1  ,NROPROCS ,NROMPBUFSZ,NROSPT   ,NRORPT ,&
132 & NROCOMM
133USE YOMGC    , ONLY : GELAT    ,GELAM
134USE YOMLEG   , ONLY : RMU      ,RSQM2
135USE YOMSC2   , ONLY : &
136 & NRIWIDEN  ,NRIWIDES  ,NRIWIDEW  ,NRIWIDEE,&
137 & NROWIDEN  ,NROWIDES  ,NROWIDEW  ,NROWIDEE
138USE YOMGEM   , ONLY : NGPTOT   ,NGPTOTG   ,NGPTOTMX ,NLOENG
139USE YOMTAG   , ONLY : MTAGRAD
140USE YOMPRAD  , ONLY : LODBGRADI,LODBGRADL ,RADGRID  ,&
141 & LRADONDEM 
142USE YOMRADF  , ONLY : EMTD     ,TRSW     ,EMTC      ,TRSC    ,&
143 & SRSWD    ,SRLWD    ,SRSWDCS  ,SRLWDCS   ,SRSWDV  ,&
144 & SRSWDUV  ,EDRO     ,SRSWPAR  ,SRSWUVB   ,SRSWPARC,  SRSWTINC,&
145 & EMTU, RMOON
146! Commente par MPL 26.11.08
147!USE YOPHNC   , ONLY :  LERADN2
148! MPLefebvre 6-11-08 commente tout ce qui concerne MPL_MODULE
149!USE MPL_MODULE  , ONLY :  MPL_BROADCAST, MPL_SEND, MPL_RECV
150USE YOM_YGFL , ONLY : YO3
151!!!!! A REVOIR (MPL) NDLNPR devrait etre initialise dans sudyn.F90
152USE YOMDYN   , ONLY : NDLNPR
153
154IMPLICIT NONE
155
156INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV
157INTEGER(KIND=JPIM),INTENT(IN)    :: KULOUT
158REAL(KIND=JPRB)   ,INTENT(IN)    :: PETAH(KLEV+1)
159!     LOCAL ARRAYS FOR THE PURPOSE OF READING NAMRGRI (RADIATION GRID)
160INTEGER(KIND=JPIM) :: NRGRI(JPMXGL)
161
162INTEGER(KIND=JPIM) :: IDGL,INBLW,IRADFR,IST1HR,ISTNHR,IDIR,IFIL
163INTEGER(KIND=JPIM) :: IRIRPTSUR,IRISPTSUR,IRIMAPLEN
164INTEGER(KIND=JPIM) :: JLON,JGLAT,JGL,JGLSUR,IDLSUR,IOFF,ILAT,ISTLON,IENDLON
165INTEGER(KIND=JPIM) :: IRORPTSUR,IROSPTSUR,IROMAPLEN
166INTEGER(KIND=JPIM) :: ILBRLATI,IUBRLATI,IGLGLO,IDUM,IU
167INTEGER(KIND=JPIM) :: J,JROC,IGPTOT
168INTEGER(KIND=JPIM) :: IROWIDEMAXN,IROWIDEMAXS,IROWIDEMAXW,IROWIDEMAXE
169INTEGER(KIND=JPIM) :: IRIWIDEMAXN,IRIWIDEMAXS,IRIWIDEMAXW,IRIWIDEMAXE
170INTEGER(KIND=JPIM) :: IARIB1MAX,IAROB1MAX
171INTEGER(KIND=JPIM) :: IWIDE(10)
172INTEGER(KIND=JPIM) :: ILATS_DIFF_F,ILATS_DIFF_C
173INTEGER(KIND=JPIM), PARAMETER :: JP_MIN_HALO=5
174INTEGER(KIND=JPIM) :: ISW,JUV,IDAYUV
175
176LOGICAL :: LLINEAR_GRID
177LOGICAL :: LLDEBUG,LLP
178
179REAL(KIND=JPRB) :: ZSTPHR, ZTSTEP, ZGEMU, ZLON, ZD1, ZD2, ZD3, ZD4, ZD5, ZD6
180REAL(KIND=JPRB) :: ZMINRADLAT,ZMAXRADLAT,ZMINRADLON,ZMAXRADLON
181REAL(KIND=JPRB) :: ZMINMDLLAT,ZMAXMDLLAT,ZMINMDLLON,ZMAXMDLLON
182REAL(KIND=JPRB) :: ZLAT
183!REAL(KIND=JPRB) :: RLATVOL, RLONVOL
184
185CHARACTER (LEN = 300) ::  CLFN
186INTEGER(KIND=JPIM), PARAMETER :: JPIOMASTER=1
187
188INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPOS(:)
189INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPOS(:)
190INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPTR(:)
191INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPTR(:)
192INTEGER(KIND=JPIM), ALLOCATABLE :: IRICOMM(:)
193INTEGER(KIND=JPIM), ALLOCATABLE :: IRIMAP(:,:)
194INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPOS(:)
195INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPOS(:)
196INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPTR(:)
197INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPTR(:)
198INTEGER(KIND=JPIM), ALLOCATABLE :: IROCOMM(:)
199INTEGER(KIND=JPIM), ALLOCATABLE :: IROMAP(:,:)
200INTEGER(KIND=JPIM), ALLOCATABLE :: IGLOBALINDEX(:)
201
202REAL(KIND=JPRB),ALLOCATABLE :: ZLATX(:)
203REAL(KIND=JPRB),ALLOCATABLE :: ZLONX(:)
204REAL(KIND=JPRB) :: ZHOOK_HANDLE
205
206INTERFACE
207#include "setup_trans.h"
208#include "trans_inq.h"
209END INTERFACE
210
211#include "abor1.intfb.h"
212#include "posnam.intfb.h"
213#include "rrtm_init_140gp.intfb.h"
214
215#include "rdcset.intfb.h"
216#include "suaerh.intfb.h"
217#include "suaerl.intfb.h"
218#include "suaersn.intfb.h"
219#include "suaerv.intfb.h"
220#include "suclopn.intfb.h"
221#include "suecradi.intfb.h"
222#include "suecradl.intfb.h"
223#include "sulwn.intfb.h"
224#include "sulwneur.intfb.h"
225#include "suovlp.intfb.h"
226#include "surdi.intfb.h"
227#include "surrtab.intfb.h"
228#include "surrtftr.intfb.h"
229#include "surrtpk.intfb.h"
230#include "surrtrf.intfb.h"
231#include "susat.intfb.h"
232#include "suswn.intfb.h"
233#include "susrtaer.intfb.h"
234#include "srtm_init.intfb.h"
235#include "susrtcop.intfb.h"
236#include "su_aerw.intfb.h"
237#include "su_uvrad.intfb.h"
238#include "su_mcica.intfb.h"
239
240!      ----------------------------------------------------------------
241
242#include "naerad.h"
243#include "namrgri.h"
244#include "clesphys.h"
245
246!*         1.       INITIALIZE NEUROFLUX LONGWAVE RADIATION
247!                   ---------------------------------------
248
249IF (LHOOK) CALL DR_HOOK('SUECRAD',0,ZHOOK_HANDLE)
250!CALL GSTATS(1818,0)     MPL 2.12.08
251!IF (LERADN2) THEN
252!  CALL SULWNEUR(KLEV)
253!ENDIF
254
255!*         2.       SET DEFAULT VALUES.
256!                   -------------------
257
258!*         2.1      PRESET INDICES IN *YOERAD*
259!                   --------------------------
260
261LERAD1H=.FALSE.
262NLNGR1H=6
263
264LERADHS=.TRUE.
265LONEWSW=.TRUE.
266LECSRAD=.FALSE.
267
268!LE4ALB=.FALSE.
269!This is read from SU0PHY in NAEPHY and put in YOEPHY
270
271!- default setting of cloud optical properties
272!  liquid water cloud 0: Fouquart    (SW), Smith-Shi   (LW)
273!                     1: Slingo      (SW), Savijarvi   (LW)
274!                     2: Slingo      (SW), Lindner-Li  (LW)
275!  ice water cloud    0: Ebert-Curry (SW), Smith-Shi   (LW)
276!                     1: Ebert-Curry (SW), Ebert-Curry (LW)
277!                     2: Fu-Liou'93  (SW), Fu-Liou'93  (LW)
278!                     3: Fu'96       (SW), Fu et al'98 (LW)
279NLIQOPT=2           ! before 3?R1 default=0    2
280NICEOPT=3           ! before 3?R1 default=1    3
281
282!- default setting of cloud effective radius/diameter
283!  liquid water cloud 0: f(P) 10 to 45
284!                     1: 13: ocean; 10: land
285!                     2: Martin et al. CCN 50 over ocean, 900 over land
286!  ice water cloud    0: 40 microns
287!                     1: f(T) 40 to 130 microns
288!                     2: f(T) 30 to 60
289!                     3: f(T,IWC) Sun'01: 22.5 to 175 microns
290!  conversion factor between effective radius and particle size for ice
291NRADIP=3            ! before 3?R1 default=2     3
292NRADLP=2            ! before 3?R1 default=2     2
293print *,'SUECRAD: NRADLP, NRADIP=',NRADLP,NRADIP
294RRe2De=0.64952_JPRB ! before 3?R1 default=0.5_JPRB
295
296!- RRTM as LW scheme
297LRRTM  = .FALSE.
298LECMWF = .FALSE.
299IF (iflag_rrtm.EQ.1) THEN
300        LRRTM  = .TRUE.
301        LECMWF = .TRUE.
302!       LRRTM  = .FALSE.  ! Utiliser pour faire tourner le "vieux" rayonnement
303!       LECMWF = .FALSE.
304ENDIF
305!- SRTM as SW scheme
306!!!!! A REVOIR (MPL) verifier signification de LSRTM
307LSRTM = .FALSE.     ! before 3?R1 default was .FALSE.    true
308
309! -- McICA treatment of cloud-radiation interactions
310! - 1 is maximum-random, 2 is generalized cloud overlap (before 31R1 default=0 no McICA)
311NMcICA = 2          !  2 for generalized overlap
312
313!- Inhomogeneity factors in LW and SW (0=F, 1=0.7 in both, 2=Barker's, 3=Cairns)
314NINHOM = 0          ! before 3?R1 default=1
315NLAYINH= 0
316RLWINHF = 1.0_JPRB  ! before 3?R1 default=0.7
317RSWINHF = 1.0_JPRB  ! before 3?R1 default=0.7 
318!- Diffusivity correction a la Savijarvi
319LDIFFC = .FALSE.    ! before 31R1 default=.FALSE.
320
321!- history of volcanic aerosols
322LHVOLCA=.FALSE.
323!- monthly climatol. of tropospheric aerosols from Tegen et al. (1997)
324LNEWAER=.TRUE.
325!!! cpl LNOTROAER=.FALSE.
326LNOTROAER=.TRUE.
327NPERTAER=0
328
329!- New Rayleigh formulation
330LRAYL=.TRUE.
331
332!- Number concentration of aerosols if specified
333LCCNL=.TRUE.        ! before 3?R1 default=.FALSE.     true
334LCCNO=.TRUE.        ! before 3?R1 default=.FALSE.     true
335RCCNLND=900._JPRB   ! before 3?R1 default=900. now irrelevant
336RCCNSEA=50._JPRB    ! before 3?R1 default=50.  now irrelevant
337
338!- interaction radiation / prognostic O3 off by default
339LEPO3RA=.FALSE.
340print *,'SUECRAD-0'
341IF (.NOT.YO3%LGP) THEN
342  LEPO3RA=.FALSE.
343ENDIF
344RPERTOZ=0._JPRB
345NPERTOZ=0
346
347!NAER: CONFIGURATION INDEX FOR AEROSOLS
348!!!!! A REVOIR (MPL) a mettre dans un fichier .def
349NAER   =1
350NMODE  =0
351NOZOCL =1
352NRADFR =-3
353IF (NSMAX >= 511) NRADFR =-1
354NRADPFR=0
355NRADPLA=15
356
357! -- UV diagnostic of surface fluxes over the 280-400 nm interval
358!    with up-to 24 values (5 nm wide spectral intervals)
359LUVPROC=.FALSE.
360LUVTDEP=.TRUE.
361LUVDBG =.FALSE.
362NRADUV =-3
363NUVTIM = 0
364NUV    = 24
365RMUZUV = 1.E-01_JPRB
366DO JUV=1,NUV
367  RUVLAM(JUV)=280._JPRB+(JUV-1)*5._JPRB
368ENDDO
369
370!- radiation interpolation (George M's grid on by default)
371LLDEBUG=.TRUE.
372LEDBUG=.FALSE.
373NRADINT=3
374NRADRES=0
375
376NRINT  =4
377
378LRADLB=.TRUE.
379CRTABLEDIR='./'
380CRTABLEFIL='not set'
381LRADONDEM=.TRUE.
382!GM Temporary as per trans/external/setup_trans.F90
383LLINEAR_GRID=NSMAX > (NDLON+3)/3
384IF( LLDEBUG )THEN
385  WRITE(NULOUT,'("SUECRAD: NSMAX=",I6)')NSMAX
386  WRITE(NULOUT,'("SUECRAD: NDLON=",I6)')NDLON
387  WRITE(NULOUT,'("SUECRAD: LLINEAR_GRID=",L5)')LLINEAR_GRID
388ENDIF
389
390NUAER  = 24
391NTRAER = 15
392! 1: max-random, 2: max, 3: random (5,6,7,8 pour meso-NH)
393! le CASE qui suit car les conventions sont differentes dans ARP et LMDZ (MPL 20100415)
394SELECT CASE (overlap)
395  CASE (:1)
396   NOVLP = 2   
397  CASE (2)
398   NOVLP = 3   
399  CASE (3:)
400   NOVLP = 1   
401  END SELECT
402print *,'SUECRAD: NOVLP=',NOVLP
403NLW    = 6
404NTSW   = 14
405!NSW    = 6    !!!!! Maintenant dans config.def (MPL 20140213)
406NSWNL  = 6
407NSWTL  = 2
408NCSRADF= 1
409IF(NSMAX >= 106) THEN
410  NRPROMA = 80
411ELSEIF(NSMAX == 63) THEN
412  NRPROMA=48
413ELSE
414  NRPROMA=64
415ENDIF
416
417!*         2.3      SET SECURITY PARAMETERS
418!                   -----------------------
419
420REPSC  = 1.E-04_JPRB
421REPSCO = 1.E-12_JPRB
422REPSCQ = 1.E-12_JPRB
423REPSCT = 1.E-12_JPRB
424REPSCW = 1.E-12_JPRB
425REPLOG = 1.E-12_JPRB
426
427
428!*          2.4     BACKGROUND GAS CONCENTRATIONS (IPCC/SACC, 1990)
429!                   -----------------------------------------------
430
431LECO2VAR=.FALSE.
432LHGHG   =.FALSE.
433NHINCSOL= 0
434NSCEN   = 1
435RSOLINC = RI0
436
437! Valeurs d origine MPL 18052010
438!RCCO2   = 353.E-06_JPRB
439!RCCH4   = 1.72E-06_JPRB
440!RCN2O   = 310.E-09_JPRB
441!RCCFC11 = 280.E-12_JPRB
442!RCCFC12 = 484.E-12_JPRB
443
444! Valeurs LMDZ (physiq.def) MPL 18052010
445RCCO2   = 348.E-06_JPRB
446RCCH4   = 1.65E-06_JPRB
447RCN2O   = 306.E-09_JPRB
448RCCFC11 = 280.E-12_JPRB
449RCCFC12 = 484.E-12_JPRB
450print *,'SUECRAD-1'
451
452!     ------------------------------------------------------------------
453
454!*         3.       READ VALUES OF RADIATION CONFIGURATION
455!                   --------------------------------------
456
457!CALL POSNAM(NULNAM,'NAERAD')
458!READ (NULNAM,NAERAD)
459print *,'SUECRAD-2'
460
461!CALL POSNAM(NULNAM,'NAEAER')
462!READ (NULNAM,NAEAER)
463
464!IF (NTYPAER(9) /= 0) THEN
465!  RGEMUV=(RLATVOL+90._JPRB)*RPI/180._JPRB
466!  RGELAV=RLONVOL*RPI/180._JPRB
467!  RCLONV=COS(RGELAV)
468!  RSLONV=SIN(RGELAV)
469!  DO J=1,NGPTOT-1
470!    IF (RGELAV > GELAM(J) .AND. RGELAV <= GELAM(J+1) .AND. &
471!      & RGEMUV < RMU(JL) .AND. RGEMUV >= RMU(JL+1) ) THEN
472!      RDGMUV=ABS( RMU(J+1) - RMU(J))
473!      RDGLAV=ABS( GELAM(J+1)-GELAM(J) )
474!      RDSLONV=ABS( SIN(GELAM(JL+1))-SIN(GELAM(JL)) )
475!      RDCLONV=ABS( COS(GELAM(JL+1))-COS(GELAM(JL)) )
476!    END IF
477!  END DO
478!END IF 
479
480!- reset some parameters if SW6 is used (revert to pre-CY3?R1 operational configuration)
481IF (.NOT.LSRTM) THEN
482  NMcICA = 0
483  LCCNL  = .FALSE.
484  LCCNO  = .FALSE.
485  LDIFFC = .FALSE.
486  NICEOPT= 1
487  NLIQOPT= 0
488  NRADIP = 4
489  NRADLP = 3
490  RRe2De = 0.5_JPRB
491  NINHOM = 1
492  RLWINHF= 0.7_JPRB
493  RSWINHF= 0.7_JPRB
494ENDIF
495print *,'SUECRAD-3'
496
497!- for McICA computations, make sure these parameters are as follows ...
498IF (NMCICA /= 0) THEN
499  NINHOM = 0
500  RLWINHF= 1.0_JPRB
501  RSWINHF= 1.0_JPRB
502!-- read the XCW values for Raisanen-Cole-Barker cloud generator
503  CALL SU_McICA
504ENDIF
505print *,'SUECRAD-4'
506
507
508
509IF( LLDEBUG )THEN
510  WRITE(NULOUT,'("SUECRAD: NRADINT=",I2)')NRADINT
511  WRITE(NULOUT,'("SUECRAD: NRADRES=",I4)')NRADRES
512ENDIF
513
514!     DETERMINE WHETHER NRPROMA IS NEGATIVE AND SET LOPTRPROMA
515
516LOPTRPROMA=NRPROMA > 0
517NRPROMA=ABS(NRPROMA)
518
519IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN
520  WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")')
521  NRADINT=0
522ENDIF
523
524IF( NRADINT > 0 .AND. LRAYFM .AND. NAER /= 0 .AND. .NOT.LHVOLCA )THEN
525!   This combination is not supported as aerosol data would be
526!   required to be interpolated (see radintg)
527  WRITE(NULOUT,'("SUECRAD: NRADINT>0, LRAYFM=T NAER /= 0 .AND. LHVOLCA=F,",&
528   & " NRADRES RESET TO NSMAX (NO INTERPOLATION)")') 
529  NRADRES=NSMAX
530ENDIF
531!CALL GSTATS(1818,1)      MPL 2.12.08
532
533100 CONTINUE
534
535IF( LERADI )THEN   ! START OF LERADI BLOCK
536
537  IF( NRADINT == -1 )THEN
538
539  !     INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION INTERPOLATION
540
541    LODBGRADI=.FALSE.
542    CALL SUECRADI
543
544  !     INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION COURSE GRID
545  !     LOAD BALANCING
546
547    LODBGRADL=.FALSE.
548!   CALL SUECRADL    ! MPL 1.12.08
549    CALL ABOR1('JUSTE APRES CALL SUECRADL COMMENTE')
550
551  ELSEIF( NRADINT == 0 )THEN
552
553    IF( NRADRES /= NSMAX )THEN
554      WRITE(NULOUT,'("SUECRAD: NRADINT=0 REQUESTED, NRADRES RESET TO NSMAX")')
555      NRADRES=NSMAX
556    ENDIF
557    RADGRID%NGPTOT=NGPTOT
558
559    NARIB1=0
560    NAROB1=0
561
562  ELSEIF( NRADINT >=1 .AND. NRADINT <= 3 )THEN
563
564    NARIB1=0
565    NAROB1=0
566
567! set the default radiation grid resolution for the current model resolution
568! if not already specified
569    IF( NRADRES == 0 )THEN
570      IF( LLINEAR_GRID )THEN                ! RATIO OF GRID-POINTS (MODEL/RAD)
571        IF( NSMAX == 63 )THEN               
572          NRADRES=21                        ! 3.62
573          LLINEAR_GRID=.FALSE.
574        ENDIF
575        IF( NSMAX ==   95 ) NRADRES=   95   ! 1.00
576        IF( NSMAX ==  159 ) NRADRES=   63   ! 5.84
577        IF( NSMAX ==  255 ) NRADRES=   95   ! 6.69
578        IF( NSMAX ==  319 ) NRADRES=  159   ! 3.87
579        IF( NSMAX ==  399 ) NRADRES=  159   ! 5.99
580        IF( NSMAX ==  511 ) NRADRES=  255   ! 3.92
581        IF( NSMAX ==  639 ) NRADRES=  319   ! 3.92
582        IF( NSMAX ==  799 ) NRADRES=  399   ! 3.94
583        IF( NSMAX == 1023 ) NRADRES=  511   ! 3.94
584        IF( NSMAX == 1279 ) NRADRES=  639       !
585        IF( NSMAX == 2047 ) NRADRES= 1023       !
586      ELSE ! NOT LINEAR GRID               
587        IF( NSMAX ==   21 ) NRADRES=   21   ! 1.00
588        IF( NSMAX ==   42 ) NRADRES=   21   ! 3.62
589        IF( NSMAX ==   63 ) NRADRES=   42   ! 2.17
590        IF( NSMAX ==  106 ) NRADRES=   63   ! 2.69
591        IF( NSMAX ==  170 ) NRADRES=   63   ! 6.69
592        IF( NSMAX ==  213 ) NRADRES=  106   ! 3.87
593        IF( NSMAX ==  266 ) NRADRES=  106   ! 5.99
594        IF( NSMAX ==  341 ) NRADRES=  170   ! 3.92
595        IF( NSMAX ==  426 ) NRADRES=  213   ! 3.92
596        IF( NSMAX ==  533 ) NRADRES=  266   ! 3.94
597        IF( NSMAX ==  682 ) NRADRES=  341   ! 3.94
598      ENDIF
599    ENDIF
600print *,'SUECRAD-5'
601
602! test if radiation grid resolution has been set
603    IF( NRADRES == 0 )THEN
604      WRITE(NULOUT,'("SUECRAD: NRADRES NOT SET OR DEFAULT FOUND,NSMAX=",I4)')NSMAX
605      CALL ABOR1('SUECRAD: NRADRES NOT SET OR DEFAULT FOUND')
606    ENDIF
607
608! test if no interpolation is required
609    IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN
610      WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")')
611      NRADINT=0
612      GOTO 100
613    ENDIF
614
615!    CALL GSTATS(1818,0)       MPL 2.12.08
616    IF( CRTABLEFIL == 'not set' )THEN
617      IF( LLINEAR_GRID )THEN
618        IF( NRADRES < 1000 )THEN
619          WRITE(CRTABLEFIL,'("rtablel_2",I3.3)')NRADRES
620        ELSE
621          WRITE(CRTABLEFIL,'("rtablel_2",I4.4)')NRADRES
622        ENDIF
623      ELSE
624        IF( NRADRES < 1000 )THEN
625          WRITE(CRTABLEFIL,'("rtable_2" ,I3.3)')NRADRES
626        ELSE
627          WRITE(CRTABLEFIL,'("rtable_2" ,I4.4)')NRADRES
628        ENDIF
629      ENDIF
630    ENDIF
631!    CALL GSTATS(1818,1)       MPL 2.12.08
632
633    RADGRID%NSMAX=NRADRES
634
635    IF( MYPROC == JPIOMASTER )THEN
636      IDIR=LEN_TRIM(CRTABLEDIR)
637      IFIL=LEN_TRIM(CRTABLEFIL)
638      CLFN=CRTABLEDIR(1:IDIR)//CRTABLEFIL(1:IFIL)
639! Ce qui concerne NULRAD commente par MPL le 15.04.09
640!     OPEN(NULRAD,FILE=CLFN,ACTION="READ",ERR=999)
641!     GOTO 1000
642!     999 CONTINUE
643!     WRITE(NULOUT,'("SUECRAD: UNABLE TO OPEN FILE ",A)')CLFN
644!     CALL ABOR1('SUECRAD: UNABLE TO OPEN RADIATION GRID RTABLE FILE')
645!     1000 CONTINUE
646      NRGRI(:)=0
647! Ce qui concerne NAMRGRI commente par MPL le 15.04.09
648!     CALL POSNAM(NULRAD,'NAMRGRI')
649!     READ (NULRAD,NAMRGRI)
650      IDGL=1
651      DO WHILE( NRGRI(IDGL)>0 )
652        IF( LLDEBUG )THEN
653          WRITE(NULOUT,'("SUECRAD: NRGRI(",I4,")=",I4)')IDGL,NRGRI(IDGL)
654        ENDIF
655        IDGL=IDGL+1
656      ENDDO
657      IDGL=IDGL-1
658      RADGRID%NDGLG=IDGL
659      IF( LLDEBUG )THEN
660        WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG=",I4)')RADGRID%NDGLG
661      ENDIF
662!     CLOSE(NULRAD)
663    ENDIF
664!    CALL GSTATS(667,0)     MPL 2.12.08
665    IF( NPROC > 1 )THEN
666      stop'Pas pret pour proc > 1'
667!     CALL MPL_BROADCAST (RADGRID%NDGLG,MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:')
668    ENDIF
669    ALLOCATE(RADGRID%NRGRI(RADGRID%NDGLG))
670    IF( MYPROC == JPIOMASTER )THEN
671      RADGRID%NRGRI(1:RADGRID%NDGLG)=NRGRI(1:RADGRID%NDGLG)
672    ENDIF
673    IF( NPROC > 1 )THEN
674      stop'Pas pret pour proc > 1'
675!     CALL MPL_BROADCAST (RADGRID%NRGRI(1:RADGRID%NDGLG),MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:')
676    ENDIF
677!    CALL GSTATS(667,1)      MPL 2.12.08
678
679!    CALL GSTATS(1818,0)     MPL 2.12.08
680    IF    ( NRADINT == 1 )THEN
681      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - SPECTRAL TRANSFORM")')
682      RADGRID%NDGSUR=0
683      NRIWIDEN=0
684      NRIWIDES=0
685      NRIWIDEW=0
686      NRIWIDEE=0
687      NROWIDEN=0
688      NROWIDES=0
689      NROWIDEW=0
690      NROWIDEE=0
691    ELSEIF( NRADINT == 2 )THEN
692      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 4 POINT")')
693      RADGRID%NDGSUR=2
694    ELSEIF( NRADINT == 3 )THEN
695      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 12 POINT")')
696      RADGRID%NDGSUR=2
697    ENDIF
698    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSUR       =",I8)')RADGRID%NDGSUR
699
700    RADGRID%NDGSAG=1-RADGRID%NDGSUR
701    RADGRID%NDGENG=RADGRID%NDGLG+RADGRID%NDGSUR
702    RADGRID%NDLON=RADGRID%NRGRI(RADGRID%NDGLG/2)
703    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAG       =",I8)')RADGRID%NDGSAG
704    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENG       =",I8)')RADGRID%NDGENG
705    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG        =",I8)')RADGRID%NDGLG
706    WRITE(NULOUT,'("SUECRAD: RADGRID%NDLON        =",I8)')RADGRID%NDLON
707    CALL FLUSH(NULOUT)
708
709    ALLOCATE(RADGRID%NLOENG(RADGRID%NDGSAG:RADGRID%NDGENG))
710    RADGRID%NLOENG(1:RADGRID%NDGLG)=RADGRID%NRGRI(1:RADGRID%NDGLG)
711    IF(RADGRID%NDGSUR >= 1)THEN
712      DO JGLSUR=1,RADGRID%NDGSUR
713        RADGRID%NLOENG(1-JGLSUR)=RADGRID%NLOENG(JGLSUR)
714      ENDDO
715      DO JGLSUR=1,RADGRID%NDGSUR
716        RADGRID%NLOENG(RADGRID%NDGLG+JGLSUR)=RADGRID%NLOENG(RADGRID%NDGLG+1-JGLSUR)
717      ENDDO
718    ENDIF
719!     CALL GSTATS(1818,1)     MPL 2.12.08
720
721! Setup the transform package for the radiation grid
722    CALL SETUP_TRANS (KSMAX=RADGRID%NSMAX, &
723     & KDGL=RADGRID%NDGLG, &
724     & KLOEN=RADGRID%NLOENG(1:RADGRID%NDGLG), &
725     & LDLINEAR_GRID=LLINEAR_GRID, &
726     & LDSPLIT=LSPLIT, &
727     & KAPSETS=NAPSETS, &
728     & KRESOL=RADGRID%NRESOL_ID)
729
730    ALLOCATE(RADGRID%NSTA(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW))
731    ALLOCATE(RADGRID%NONL(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW))
732    ALLOCATE(RADGRID%NPTRFRSTLAT(N_REGIONS_NS))
733    ALLOCATE(RADGRID%NFRSTLAT(N_REGIONS_NS))
734    ALLOCATE(RADGRID%NLSTLAT(N_REGIONS_NS))
735    ALLOCATE(RADGRID%RMU(RADGRID%NDGSAG:RADGRID%NDGENG))
736    ALLOCATE(RADGRID%RSQM2(RADGRID%NDGSAG:RADGRID%NDGENG))
737    ALLOCATE(RADGRID%RLATIG(RADGRID%NDGSAG:RADGRID%NDGENG))
738
739! Interrogate the transform package for the radiation grid
740!    CALL GSTATS(1818,0)    MPL 2.12.08
741    CALL TRANS_INQ (KRESOL     =RADGRID%NRESOL_ID, &
742     & KSPEC2     =RADGRID%NSPEC2, &
743     & KNUMP      =RADGRID%NUMP, &
744     & KGPTOT     =RADGRID%NGPTOT, &
745     & KGPTOTG    =RADGRID%NGPTOTG, &
746     & KGPTOTMX   =RADGRID%NGPTOTMX, &
747     & KPTRFRSTLAT=RADGRID%NPTRFRSTLAT, &
748     & KFRSTLAT   =RADGRID%NFRSTLAT, &
749     & KLSTLAT    =RADGRID%NLSTLAT, &
750     & KFRSTLOFF  =RADGRID%NFRSTLOFF, &
751     & KSTA       =RADGRID%NSTA(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), &
752     & KONL       =RADGRID%NONL(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), &
753     & KPTRFLOFF  =RADGRID%NPTRFLOFF, &
754     & PMU        =RADGRID%RMU(1:) ) 
755
756    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
757      DO JGL=1,RADGRID%NDGLG
758        RADGRID%RSQM2(JGL) = SQRT(1.0_JPRB - RADGRID%RMU(JGL)*RADGRID%RMU(JGL))
759        RADGRID%RLATIG(JGL) = ASIN(RADGRID%RMU(JGL))
760!       WRITE(NULOUT,'("SUECRAD: JGL=",I6," RADGRID%RLATIG=",F10.3)')&
761!        & JGL,RADGRID%RLATIG(JGL)
762      ENDDO
763      IF(RADGRID%NDGSUR >= 1)THEN
764        DO JGLSUR=1,RADGRID%NDGSUR
765          RADGRID%RMU(1-JGLSUR)=RADGRID%RMU(JGLSUR)
766          RADGRID%RSQM2(1-JGLSUR)=RADGRID%RSQM2(JGLSUR)
767          RADGRID%RLATIG(1-JGLSUR)=RPI-RADGRID%RLATIG(JGLSUR)
768        ENDDO
769        DO JGLSUR=1,RADGRID%NDGSUR
770          RADGRID%RMU(RADGRID%NDGLG+JGLSUR)=RADGRID%RMU(RADGRID%NDGLG+1-JGLSUR)
771          RADGRID%RSQM2(RADGRID%NDGLG+JGLSUR)=RADGRID%RSQM2(RADGRID%NDGLG+1-JGLSUR)
772          RADGRID%RLATIG(RADGRID%NDGLG+JGLSUR)=-RPI-RADGRID%RLATIG(RADGRID%NDGLG+1-JGLSUR)
773        ENDDO
774      ENDIF
775    ENDIF
776
777    RADGRID%NDGSAL=1
778    RADGRID%NDGENL=RADGRID%NLSTLAT(MY_REGION_NS)-RADGRID%NFRSTLOFF
779    RADGRID%NDSUR1=3-MOD(RADGRID%NDLON,2)
780    IDLSUR=MAX(RADGRID%NDLON,2*RADGRID%NSMAX+1)
781    RADGRID%NDLSUR=IDLSUR+RADGRID%NDSUR1
782    RADGRID%MYFRSTACTLAT=RADGRID%NFRSTLAT(MY_REGION_NS)
783    RADGRID%MYLSTACTLAT=RADGRID%NLSTLAT(MY_REGION_NS)
784
785    WRITE(NULOUT,'("SUECRAD: RADGRID%NRESOL_ID    =",I8)')RADGRID%NRESOL_ID
786    WRITE(NULOUT,'("SUECRAD: RADGRID%NSMAX        =",I8)')RADGRID%NSMAX
787    WRITE(NULOUT,'("SUECRAD: RADGRID%NSPEC2       =",I8)')RADGRID%NSPEC2
788    WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOT       =",I8)')RADGRID%NGPTOT
789    WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOTG      =",I8)')RADGRID%NGPTOTG
790    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAL       =",I8)')RADGRID%NDGSAL
791    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENL       =",I8)')RADGRID%NDGENL
792    WRITE(NULOUT,'("SUECRAD: RADGRID%NDSUR1       =",I8)')RADGRID%NDSUR1
793    WRITE(NULOUT,'("SUECRAD: RADGRID%NDLSUR       =",I8)')RADGRID%NDLSUR
794    WRITE(NULOUT,'("SUECRAD: RADGRID%MYFRSTACTLAT =",I8)')RADGRID%MYFRSTACTLAT
795    WRITE(NULOUT,'("SUECRAD: RADGRID%MYLSTACTLAT  =",I8)')RADGRID%MYLSTACTLAT
796    CALL FLUSH(NULOUT)
797
798    ALLOCATE(RADGRID%NASM0(0:RADGRID%NSPEC2))
799    ALLOCATE(RADGRID%MYMS(RADGRID%NUMP))
800    CALL TRANS_INQ (KRESOL     =RADGRID%NRESOL_ID, &
801     & KASM0      =RADGRID%NASM0, &
802     & KMYMS      =RADGRID%MYMS ) 
803
804    ALLOCATE(RADGRID%GELAM(RADGRID%NGPTOT))
805    ALLOCATE(RADGRID%GELAT(RADGRID%NGPTOT))
806    ALLOCATE(RADGRID%GESLO(RADGRID%NGPTOT))
807    ALLOCATE(RADGRID%GECLO(RADGRID%NGPTOT))
808    ALLOCATE(RADGRID%GEMU (RADGRID%NGPTOT))
809
810    IOFF=0
811    ILAT=RADGRID%NPTRFLOFF
812    DO JGLAT=RADGRID%NFRSTLAT(MY_REGION_NS), &
813       & RADGRID%NLSTLAT(MY_REGION_NS) 
814      ZGEMU=RADGRID%RMU(JGLAT)
815      ILAT=ILAT+1
816      ISTLON  = RADGRID%NSTA(ILAT,MY_REGION_EW)
817      IENDLON = ISTLON-1 + RADGRID%NONL(ILAT,MY_REGION_EW)
818
819      DO JLON=ISTLON,IENDLON
820        ZLON=  REAL(JLON-1,JPRB)*2.0_JPRB*RPI &
821         & /REAL(RADGRID%NLOENG(JGLAT),JPRB) 
822        IOFF=IOFF+1
823        RADGRID%GELAM(IOFF) = ZLON
824        RADGRID%GELAT(IOFF) = ASIN(ZGEMU)
825        RADGRID%GESLO(IOFF) = SIN(ZLON)
826        RADGRID%GECLO(IOFF) = COS(ZLON)
827        RADGRID%GEMU (IOFF) = ZGEMU
828      ENDDO
829    ENDDO
830
831    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
832
833!   For grid point interpolations we need to calculate the halo size
834!   required by each processor
835
836      ALLOCATE(ZLATX(RADGRID%NGPTOTMX))
837      ALLOCATE(ZLONX(RADGRID%NGPTOTMX))
838      DO J=1,RADGRID%NGPTOT
839        ZLATX(J)=RADGRID%GELAT(J)/RPI*2.0_JPRB*90.0
840        ZLONX(J)=(RADGRID%GELAM(J)-RPI)/RPI*180.0
841      ENDDO
842      ZMINRADLAT=MINVAL(ZLATX(1:RADGRID%NGPTOT))
843      ZMAXRADLAT=MAXVAL(ZLATX(1:RADGRID%NGPTOT))
844      ZMINRADLON=MINVAL(ZLONX(1:RADGRID%NGPTOT))
845      ZMAXRADLON=MAXVAL(ZLONX(1:RADGRID%NGPTOT))
846      IF( LLDEBUG )THEN
847        WRITE(NULOUT,'("RADGRID,BEGIN")')
848        IF( MYPROC /= 1 )THEN
849          stop'Pas pret pour proc > 1'
850!         CALL MPL_SEND(RADGRID%NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.R')
851!         CALL MPL_SEND(ZLATX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD.R')
852!         CALL MPL_SEND(ZLONX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD.R')
853        ENDIF
854        IF( MYPROC == 1 )THEN
855          DO JROC=1,NPROC
856            IF( JROC == MYPROC )THEN
857              DO J=1,RADGRID%NGPTOT
858                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),MYPROC
859              ENDDO
860            ELSE
861              stop'Pas pret pour proc > 1'
862!             CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.M')
863!             CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD.M')
864!             CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD.M')
865              DO J=1,IGPTOT
866                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),JROC
867              ENDDO
868            ENDIF
869          ENDDO
870        ENDIF
871        WRITE(NULOUT,'("RADGRID,END")')
872      ENDIF
873      DEALLOCATE(ZLATX)
874      DEALLOCATE(ZLONX)
875 
876      ALLOCATE(ZLATX(NGPTOTMX))
877      ALLOCATE(ZLONX(NGPTOTMX))
878      DO J=1,NGPTOT
879        ZLATX(J)=GELAT(J)/RPI*2.0_JPRB*90.0
880        ZLONX(J)=(GELAM(J)-RPI)/RPI*180.0
881      ENDDO
882      ZMINMDLLAT=MINVAL(ZLATX(1:NGPTOT))
883      ZMAXMDLLAT=MAXVAL(ZLATX(1:NGPTOT))
884      ZMINMDLLON=MINVAL(ZLONX(1:NGPTOT))
885      ZMAXMDLLON=MAXVAL(ZLONX(1:NGPTOT))
886      IF( LLDEBUG )THEN
887        WRITE(NULOUT,'("MODELGRID,BEGIN")')
888        IF( MYPROC /= 1 )THEN
889          stop'Pas pret pour proc > 1'
890!         CALL MPL_SEND(NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD')
891!         CALL MPL_SEND(ZLATX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD')
892!         CALL MPL_SEND(ZLONX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD')
893!         CALL MPL_SEND(NGLOBALINDEX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=4,CDSTRING='SUECRAD')
894        ENDIF
895        IF( MYPROC == 1 )THEN
896          DO JROC=1,NPROC
897            IF( JROC == MYPROC )THEN
898              DO J=1,NGPTOT
899                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),MYPROC,NGLOBALINDEX(J)
900              ENDDO
901            ELSE
902              stop'Pas pret pour proc > 1'
903!             CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD')
904!             CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD')
905!             CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD')
906              ALLOCATE(IGLOBALINDEX(1:IGPTOT))
907!             CALL MPL_RECV(IGLOBALINDEX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=4,CDSTRING='SUECRAD')
908              DO J=1,IGPTOT
909                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),JROC,IGLOBALINDEX(J)
910              ENDDO
911              DEALLOCATE(IGLOBALINDEX)
912            ENDIF
913          ENDDO
914        ENDIF
915        WRITE(NULOUT,'("MODELGRID,END")')
916      ENDIF
917      DEALLOCATE(ZLATX)
918      DEALLOCATE(ZLONX)
919 
920      IF( LLDEBUG )THEN
921        WRITE(NULOUT,'("ZMINRADLAT=",F10.2)')ZMINRADLAT
922        WRITE(NULOUT,'("ZMINMDLLAT=",F10.2)')ZMINMDLLAT
923        WRITE(NULOUT,'("ZMAXRADLAT=",F10.2)')ZMAXRADLAT
924        WRITE(NULOUT,'("ZMAXMDLLAT=",F10.2)')ZMAXMDLLAT
925        WRITE(NULOUT,'("ZMINRADLON=",F10.2)')ZMINRADLON
926        WRITE(NULOUT,'("ZMINMDLLON=",F10.2)')ZMINMDLLON
927        WRITE(NULOUT,'("ZMAXRADLON=",F10.2)')ZMAXRADLON
928        WRITE(NULOUT,'("ZMAXMDLLON=",F10.2)')ZMAXMDLLON
929      ENDIF
930
931      ZLAT=NDGLG/180.
932      ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
933      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
934      IF( ZMINRADLAT < ZMINMDLLAT )THEN
935        NRIWIDES=JP_MIN_HALO+ILATS_DIFF_C
936      ELSE
937        NRIWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
938      ENDIF
939      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
940      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
941      IF( ZMAXRADLAT < ZMAXMDLLAT )THEN
942        NRIWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
943      ELSE
944        NRIWIDEN=JP_MIN_HALO+ILATS_DIFF_C
945      ENDIF
946      ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
947      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
948      IF( ZMINRADLON < ZMINMDLLON )THEN
949        NRIWIDEW=JP_MIN_HALO+ILATS_DIFF_C
950      ELSE
951        NRIWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
952      ENDIF
953      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
954      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
955      IF( ZMAXRADLON < ZMAXMDLLON )THEN
956        NRIWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
957      ELSE
958        NRIWIDEE=JP_MIN_HALO+ILATS_DIFF_C
959      ENDIF
960
961      ZLAT=RADGRID%NDGLG/180.
962      ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
963      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
964      IF( ZMINMDLLAT < ZMINRADLAT )THEN
965        NROWIDES=JP_MIN_HALO+ILATS_DIFF_C
966      ELSE
967        NROWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
968      ENDIF
969      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
970      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
971      IF( ZMAXMDLLAT < ZMAXRADLAT )THEN
972        NROWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
973      ELSE
974        NROWIDEN=JP_MIN_HALO+ILATS_DIFF_C
975      ENDIF
976      ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
977      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
978      IF( ZMINMDLLON < ZMINRADLON )THEN
979        NROWIDEW=JP_MIN_HALO+ILATS_DIFF_C
980      ELSE
981        NROWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
982      ENDIF
983      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
984      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
985      IF( ZMAXMDLLON < ZMAXRADLON )THEN
986        NROWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
987      ELSE
988        NROWIDEE=JP_MIN_HALO+ILATS_DIFF_C
989      ENDIF
990
991    ENDIF
992
993    RADGRID%NDGSAH=MAX(RADGRID%NDGSAG,&
994     & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF 
995    RADGRID%NDGENH=MIN(RADGRID%NDGENG,&
996     & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF 
997    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAH       =",I8)')RADGRID%NDGSAH
998    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENH       =",I8)')RADGRID%NDGENH
999
1000    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
1001
1002      ILBRLATI = MAX(RADGRID%NDGSAG,&
1003       & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF 
1004      IUBRLATI = MIN(RADGRID%NDGENG,&
1005       & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF 
1006      ALLOCATE(RADGRID%RLATI(ILBRLATI:IUBRLATI))
1007      ALLOCATE(RADGRID%RIPI0(ILBRLATI:IUBRLATI))
1008      ALLOCATE(RADGRID%RIPI1(ILBRLATI:IUBRLATI))
1009      ALLOCATE(RADGRID%RIPI2(ILBRLATI:IUBRLATI))
1010 
1011      DO JGL= ILBRLATI,IUBRLATI
1012        IGLGLO=JGL+RADGRID%NFRSTLOFF
1013        IF(IGLGLO >= 0.AND.IGLGLO <= RADGRID%NDGLG) THEN
1014          ZD1=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO)
1015          ZD2=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+1)
1016          ZD3=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+2)
1017          ZD4=RADGRID%RLATIG(IGLGLO  )-RADGRID%RLATIG(IGLGLO+1)
1018          ZD5=RADGRID%RLATIG(IGLGLO  )-RADGRID%RLATIG(IGLGLO+2)
1019          ZD6=RADGRID%RLATIG(IGLGLO+1)-RADGRID%RLATIG(IGLGLO+2)
1020          RADGRID%RIPI0(JGL)=-1.0_JPRB/(ZD1*ZD4*ZD5)
1021          RADGRID%RIPI1(JGL)= 1.0_JPRB/(ZD2*ZD4*ZD6)
1022          RADGRID%RIPI2(JGL)=-1.0_JPRB/(ZD3*ZD5*ZD6)
1023        ENDIF
1024        RADGRID%RLATI(JGL)=RADGRID%RLATIG(IGLGLO)
1025      ENDDO
1026
1027      IF( NPROC > 1 )THEN
1028        IRIRPTSUR=NGPTOTG
1029        IRISPTSUR=2*NGPTOTG
1030      ELSE
1031        IRIRPTSUR=0
1032        IRISPTSUR=0
1033      ENDIF
1034
1035      ALLOCATE(NRISTA(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1036      ALLOCATE(NRIONL(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1037      ALLOCATE(NRIOFF(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1038      ALLOCATE(NRIEXT(1-NDLON:NDLON+NDLON,1-NRIWIDEN:NDGENL+NRIWIDES))
1039      ALLOCATE(NRICORE(NGPTOT))
1040      ALLOCATE(IRISENDPOS(IRISPTSUR))
1041      ALLOCATE(IRIRECVPOS(IRIRPTSUR))
1042      ALLOCATE(IRISENDPTR(NPROC+1))
1043      ALLOCATE(IRIRECVPTR(NPROC+1))
1044      ALLOCATE(IRICOMM(NPROC))
1045      ALLOCATE(IRIMAP(4,NDGLG))
1046! MPL 1.12.08     
1047!     CALL RDCSET('RI',NRIWIDEN,NRIWIDES,NRIWIDEW,NRIWIDEE,&
1048!      & IRIRPTSUR,IRISPTSUR,&
1049!      & NDGLG,NDLON,NDGSAG,NDGENG,IDUM,IDUM,NDGSAL,NDGENL,&
1050!      & NDSUR1,NDLSUR,NDGSUR,NGPTOT,IDUM,&
1051!      & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,&
1052!      & NSTA,NONL,NLOENG,NPTRFRSTLAT,NFRSTLAT,NLSTLAT,&
1053!      & RMU,RSQM2,&
1054!      & NRISTA,NRIONL,NRIOFF,NRIEXT,NRICORE,NARIB1,&
1055!      & NRIPROCS,NRIMPBUFSZ,NRIRPT,NRISPT,&
1056!      & IRISENDPOS,IRIRECVPOS,IRISENDPTR,IRIRECVPTR,IRICOMM,IRIMAP,IRIMAPLEN) 
1057      CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE')
1058      WRITE(NULOUT,'("SUECRAD: NARIB1=",I12)')NARIB1
1059      ALLOCATE(NRISENDPOS(NRISPT))
1060      ALLOCATE(NRIRECVPOS(NRIRPT))
1061      ALLOCATE(NRISENDPTR(NRIPROCS+1))
1062      ALLOCATE(NRIRECVPTR(NRIPROCS+1))
1063      ALLOCATE(NRICOMM(NRIPROCS))
1064      NRISENDPOS(1:NRISPT)=IRISENDPOS(1:NRISPT)
1065      NRIRECVPOS(1:NRIRPT)=IRIRECVPOS(1:NRIRPT)
1066      NRISENDPTR(1:NRIPROCS+1)=IRISENDPTR(1:NRIPROCS+1)
1067      NRIRECVPTR(1:NRIPROCS+1)=IRIRECVPTR(1:NRIPROCS+1)
1068      NRICOMM(1:NRIPROCS)=IRICOMM(1:NRIPROCS)
1069      DEALLOCATE(IRISENDPOS)
1070      DEALLOCATE(IRIRECVPOS)
1071      DEALLOCATE(IRISENDPTR)
1072      DEALLOCATE(IRIRECVPTR)
1073      DEALLOCATE(IRICOMM)
1074      DEALLOCATE(IRIMAP)
1075
1076      IF( NPROC > 1 )THEN
1077        IRORPTSUR=RADGRID%NGPTOTG
1078        IROSPTSUR=2*RADGRID%NGPTOTG
1079      ELSE
1080        IRORPTSUR=0
1081        IROSPTSUR=0
1082      ENDIF
1083
1084      ALLOCATE(NROSTA(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1085      ALLOCATE(NROONL(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1086      ALLOCATE(NROOFF(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1087      ALLOCATE(NROEXT(1-RADGRID%NDLON:RADGRID%NDLON+RADGRID%NDLON,&
1088       & 1-NROWIDEN:RADGRID%NDGENL+NROWIDES)) 
1089      ALLOCATE(NROCORE(RADGRID%NGPTOT))
1090      ALLOCATE(IROSENDPOS(IROSPTSUR))
1091      ALLOCATE(IRORECVPOS(IRORPTSUR))
1092      ALLOCATE(IROSENDPTR(NPROC+1))
1093      ALLOCATE(IRORECVPTR(NPROC+1))
1094      ALLOCATE(IROCOMM(NPROC))
1095      ALLOCATE(IROMAP(4,RADGRID%NDGLG))
1096! MPL 1.12.08     
1097!     CALL RDCSET('RO',NROWIDEN,NROWIDES,NROWIDEW,NROWIDEE,&
1098!      & IRORPTSUR,IROSPTSUR,&
1099!      & RADGRID%NDGLG,RADGRID%NDLON,RADGRID%NDGSAG,&
1100!      & RADGRID%NDGENG,IDUM,IDUM,RADGRID%NDGSAL,RADGRID%NDGENL,&
1101!      & RADGRID%NDSUR1,RADGRID%NDLSUR,RADGRID%NDGSUR,RADGRID%NGPTOT,IDUM,&
1102!      & RADGRID%NPTRFLOFF,RADGRID%NFRSTLOFF,RADGRID%MYFRSTACTLAT,RADGRID%MYLSTACTLAT,&
1103!      & RADGRID%NSTA,RADGRID%NONL,RADGRID%NLOENG,RADGRID%NPTRFRSTLAT,&
1104!      & RADGRID%NFRSTLAT,RADGRID%NLSTLAT,&
1105!      & RADGRID%RMU,RADGRID%RSQM2,&
1106!      & NROSTA,NROONL,NROOFF,NROEXT,NROCORE,NAROB1,&
1107!      & NROPROCS,NROMPBUFSZ,NRORPT,NROSPT,&
1108!      & IROSENDPOS,IRORECVPOS,IROSENDPTR,IRORECVPTR,IROCOMM,IROMAP,IROMAPLEN) 
1109      CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE')
1110      WRITE(NULOUT,'("SUECRAD: NAROB1=",I12)')NAROB1
1111      ALLOCATE(NROSENDPOS(NROSPT))
1112      ALLOCATE(NRORECVPOS(NRORPT))
1113      ALLOCATE(NROSENDPTR(NROPROCS+1))
1114      ALLOCATE(NRORECVPTR(NROPROCS+1))
1115      ALLOCATE(NROCOMM(NROPROCS))
1116      NROSENDPOS(1:NROSPT)=IROSENDPOS(1:NROSPT)
1117      NRORECVPOS(1:NRORPT)=IRORECVPOS(1:NRORPT)
1118      NROSENDPTR(1:NROPROCS+1)=IROSENDPTR(1:NROPROCS+1)
1119      NRORECVPTR(1:NROPROCS+1)=IRORECVPTR(1:NROPROCS+1)
1120      NROCOMM(1:NROPROCS)=IROCOMM(1:NROPROCS)
1121      DEALLOCATE(IROSENDPOS)
1122      DEALLOCATE(IRORECVPOS)
1123      DEALLOCATE(IROSENDPTR)
1124      DEALLOCATE(IRORECVPTR)
1125      DEALLOCATE(IROCOMM)
1126      DEALLOCATE(IROMAP)
1127
1128      IF( LLDEBUG )THEN
1129        WRITE(NULOUT,'("")')
1130        IRIWIDEMAXN=0
1131        IRIWIDEMAXS=0
1132        IRIWIDEMAXW=0
1133        IRIWIDEMAXE=0
1134        IROWIDEMAXN=0
1135        IROWIDEMAXS=0
1136        IROWIDEMAXW=0
1137        IROWIDEMAXE=0
1138        IARIB1MAX=0
1139        IAROB1MAX=0
1140        IWIDE(1)=NRIWIDEN
1141        IWIDE(2)=NRIWIDES
1142        IWIDE(3)=NRIWIDEW
1143        IWIDE(4)=NRIWIDEE
1144        IWIDE(5)=NROWIDEN
1145        IWIDE(6)=NROWIDES
1146        IWIDE(7)=NROWIDEW
1147        IWIDE(8)=NROWIDEE
1148        IWIDE(9)=NARIB1
1149        IWIDE(10)=NAROB1
1150        IF( MYPROC /= 1 )THEN
1151          stop'Pas pret pour proc > 1'
1152!         CALL MPL_SEND(IWIDE(1:10),KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.W')
1153        ENDIF
1154        IF( MYPROC == 1 )THEN
1155          DO JROC=1,NPROC
1156            IF( JROC /= MYPROC )THEN
1157              stop'Pas pret pour proc > 1'
1158!             CALL MPL_RECV(IWIDE(1:10),KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.W')
1159            ENDIF
1160            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEN=",I3,2X,"NROWIDEN=",I3 )')&
1161             & JROC,IWIDE(1),IWIDE(5) 
1162            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDES=",I3,2X,"NROWIDES=",I3 )')&
1163             & JROC,IWIDE(2),IWIDE(6) 
1164            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEW=",I3,2X,"NROWIDEW=",I3 )')&
1165             & JROC,IWIDE(3),IWIDE(7) 
1166            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEE=",I3,2X,"NROWIDEE=",I3 )')&
1167             & JROC,IWIDE(4),IWIDE(8) 
1168            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NARIB1=",I10,2X,"NAROB1=",I10 )')&
1169             & JROC,IWIDE(9),IWIDE(10)
1170            WRITE(NULOUT,'("")')
1171            IF( IWIDE(1) > IRIWIDEMAXN ) IRIWIDEMAXN=IWIDE(1)
1172            IF( IWIDE(2) > IRIWIDEMAXS ) IRIWIDEMAXS=IWIDE(2)
1173            IF( IWIDE(3) > IRIWIDEMAXW ) IRIWIDEMAXW=IWIDE(3)
1174            IF( IWIDE(4) > IRIWIDEMAXE ) IRIWIDEMAXE=IWIDE(4)
1175            IF( IWIDE(5) > IROWIDEMAXN ) IROWIDEMAXN=IWIDE(5)
1176            IF( IWIDE(6) > IROWIDEMAXS ) IROWIDEMAXS=IWIDE(6)
1177            IF( IWIDE(7) > IROWIDEMAXW ) IROWIDEMAXW=IWIDE(7)
1178            IF( IWIDE(8) > IROWIDEMAXE ) IROWIDEMAXE=IWIDE(8)
1179            IF( IWIDE(9)  > IARIB1MAX  ) IARIB1MAX  =IWIDE(9)
1180            IF( IWIDE(10) > IAROB1MAX  ) IAROB1MAX  =IWIDE(10)
1181          ENDDO
1182          WRITE(NULOUT,'("")')
1183          WRITE(NULOUT,'("SUECRAD: NRIWIDEN(MAX)  =",I8)')IRIWIDEMAXN
1184          WRITE(NULOUT,'("SUECRAD: NRIWIDES(MAX)  =",I8)')IRIWIDEMAXS
1185          WRITE(NULOUT,'("SUECRAD: NRIWIDEW(MAX)  =",I8)')IRIWIDEMAXW
1186          WRITE(NULOUT,'("SUECRAD: NRIWIDEE(MAX)  =",I8)')IRIWIDEMAXE
1187          WRITE(NULOUT,'("SUECRAD: NROWIDEN(MAX)  =",I8)')IROWIDEMAXN
1188          WRITE(NULOUT,'("SUECRAD: NROWIDES(MAX)  =",I8)')IROWIDEMAXS
1189          WRITE(NULOUT,'("SUECRAD: NROWIDEW(MAX)  =",I8)')IROWIDEMAXW
1190          WRITE(NULOUT,'("SUECRAD: NROWIDEE(MAX)  =",I8)')IROWIDEMAXE
1191          WRITE(NULOUT,'("SUECRAD: NARIB1(MAX)    =",I10)')IARIB1MAX
1192          WRITE(NULOUT,'("SUECRAD: NAROB1(MAX)    =",I10)')IAROB1MAX
1193          WRITE(NULOUT,'("")')
1194        ENDIF
1195        CALL FLUSH(NULOUT)
1196      ENDIF
1197
1198    ENDIF
1199!    CALL GSTATS(1818,1)      MPL 2.12.08
1200
1201  ELSE
1202
1203    WRITE(NULOUT,'("SUECRAD: INVALID VALUE FOR NRADINT=",I6)')NRADINT
1204    CALL ABOR1('SUECRAD: NRADINT INVALID')
1205
1206  ENDIF
1207
1208ENDIF              ! END OF LERADI BLOCK
1209
1210!      ----------------------------------------------------------------
1211
1212!*       4.    INITIALIZE RADIATION COEFFICIENTS.
1213!              ----------------------------------
1214
1215RCDAY   = RDAY * RG / RCPD
1216DIFF   = 1.66_JPRB
1217R10E   = 0.4342945_JPRB
1218
1219! CALL GSTATS(1818,0)    MPL 2.12.08
1220CALL SURDI
1221
1222IF (NINHOM == 0) THEN
1223  RLWINHF=1._JPRB
1224  RSWINHF=1._JPRB
1225ENDIF
1226
1227!      ----------------------------------------------------------------
1228
1229!*       5.    INITIALIZE RADIATION ABSORPTION COEFFICIENTS
1230!              --------------------------------------------
1231
1232!*       5.1.  Initialization routine for RRTM
1233!              -------------------------------
1234
1235CALL SURRTAB
1236CALL SURRTPK
1237CALL SURRTRF
1238CALL SURRTFTR
1239
1240IF (LRRTM) THEN
1241  IF (KLEV > JPLAY) THEN
1242    WRITE(UNIT=KULOUT,&
1243     & FMT='('' RRTM MAXIMUM NUMBER OF LAYERS IS REACHED'',&
1244     & '' CALL ABORT'')') 
1245    CALL ABOR1(' ABOR1 CALLED SUECRAD')
1246  ENDIF
1247   
1248! Read the absorption coefficient data and reduce from 256 to 140 g-points
1249
1250  CALL RRTM_INIT_140GP
1251
1252  INBLW=16
1253
1254ELSE
1255  INBLW=6
1256
1257ENDIF
1258
1259CALL SULWN
1260CALL SUSWN   (NTSW, NSW)
1261CALL SUCLOPN (NTSW, NSW, KLEV)
1262
1263!-- routines specific to SRTM
1264IF (LSRTM) THEN
1265  NTSW=14
1266  ISW =14
1267  CALL SRTM_INIT
1268  CALL SUSRTAER
1269  CALL SUSRTCOP
1270  WRITE(UNIT=KULOUT,FMT='(''SRTM Configuration'',L8,3I4)')LSRTM,NTSW,ISW,JPGPT
1271
1272ELSE
1273  IF (.NOT.LONEWSW .OR. ((NSW /= 2).AND.(NSW /= 4).AND.(NSW /= 6)) ) THEN
1274    WRITE(UNIT=KULOUT,FMT='(''Wrong SW Configuration'',L8,I3)')LONEWSW,NSW
1275  ENDIF
1276
1277  CALL SUSWN   (NTSW,NSW)
1278  CALL SUAERSN (NTSW,NSW)
1279ENDIF
1280WRITE(UNIT=KULOUT,FMT='('' NLW,NTSW,NSW SET EQUAL TO:'',3I3)') INBLW,NTSW,NSW
1281
1282
1283!-- routine specific to the UV processor
1284IF (LUVPROC) THEN
1285  NUVTIM = NUVTIM * 86400
1286  CALL SU_UVRAD ( NUV )
1287ENDIF
1288
1289!      ----------------------------------------------------------------
1290
1291!*       6.    INITIALIZE AEROSOL OPTICAL PARAMETERS AND DISTRIBUTION
1292!              ------------------------------------------------------
1293
1294!- LW optical properties
1295CALL SUAERL
1296!- SW optical properties moved above
1297!CALL SUAERSN (NTSW,NSW)
1298
1299!- horizontal distribution     
1300CALL SUAERH
1301
1302!- vertical distribution
1303CALL SUAERV ( KLEV  , PETAH,&
1304 & CVDAES , CVDAEL , CVDAEU , CVDAED,&
1305 & RCTRBGA, RCVOBGA, RCSTBGA, RCAEOPS, RCAEOPL, RCAEOPU,&
1306 & RCAEOPD, RCTRPT , RCAEADK, RCAEADM, RCAEROS &
1307 & ) 
1308
1309!-- Overlap function (only used if NOVLP=4)
1310! Appel supprime par MPL (30042010) car NOVLP=4 pas utilise
1311! sinon il faudrait calculer le geopotentiel STZ
1312!CALL SUOVLP ( KLEV )
1313
1314!-- parameters for prognostic aerosols
1315CALL SU_AERW
1316
1317!      ----------------------------------------------------------------
1318
1319!*       7.    INITIALIZE SATELLITE GEOMETRICAL/RADIOMETRIC PARAMETERS
1320!              -------------------------------------------------------
1321
1322IF (LEPHYS .AND. NMODE > 1) THEN
1323  CALL SUSAT
1324ENDIF
1325!CALL GSTATS(1818,1)   MPL 2.12.08
1326
1327!      ----------------------------------------------------------------
1328
1329!*       8.    INITIALIZE CLIMATOLOGICAL OZONE DISTRIBUTION
1330!              --------------------------------------------
1331!                  (not done here!!!  called from APLPAR as it depends
1332!                     on model pressure levels!)
1333
1334!      ----------------------------------------------------------------
1335
1336!*       9.    SET UP MODEL CONFIGURATION FOR TIME-SPACE INTERPOLATION
1337!              -------------------------------------------------------
1338
1339ZTSTEP=MAX(TSTEP,1.0_JPRB)
1340ZSTPHR=3600._JPRB/ZTSTEP
1341IRADFR=NRADFR
1342IF(NRADFR < 0) THEN
1343  NRADFR=-NRADFR*ZSTPHR+0.5_JPRB
1344ENDIF
1345NRADPFR=NRADPFR*NRADFR
1346IF (MOD(NRADPLA,2) == 0.AND. NRADPLA /= 0) THEN
1347  NRADPLA=NRADPLA+1
1348ENDIF
1349
1350IF(NRADUV < 0) THEN
1351  NRADUV=-NRADUV*ZSTPHR+0.5_JPRB
1352ENDIF
1353
1354IST1HR=ZSTPHR+0.05_JPRB
1355ISTNHR=  NLNGR1H *ZSTPHR+0.05_JPRB
1356IF (MOD(3600._JPRB,ZTSTEP) > 0.1_JPRB) THEN
1357  801 CONTINUE
1358  IST1HR=IST1HR+1
1359  IF (MOD(ISTNHR,IST1HR) /= 0) GO TO 801
1360ENDIF
1361IF (NRADFR == 1) THEN
1362  NRADSFR=NRADFR
1363ELSE
1364  NRADSFR=IST1HR
1365ENDIF
1366NRADNFR=NRADFR
1367
1368IF(LRAYFM) THEN
1369  NRPROMA=NDLON+6+(1-MOD(NDLON,2))
1370ENDIF
1371
1372!      ----------------------------------------------------------------
1373
1374!*       10.    ALLOCATE WORK ARRAYS
1375!               --------------------
1376
1377IU = NULOUT
1378LLP = NPRINTLEV >= 1.OR. LALLOPR
1379
1380IF (LEPHYS) THEN
1381  ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS))
1382  IF(LLP)WRITE(IU,9) 'EMTD     ',SIZE(EMTD     ),SHAPE(EMTD     )
1383  ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS))
1384  IF(LLP)WRITE(IU,9) 'TRSW     ',SIZE(TRSW     ),SHAPE(TRSW     )
1385  ALLOCATE(EMTC(NPROMA,NFLEVG+1,NGPBLKS))
1386  IF(LLP)WRITE(IU,9) 'EMTC     ',SIZE(EMTC     ),SHAPE(EMTC     )
1387  ALLOCATE(TRSC(NPROMA,NFLEVG+1,NGPBLKS))
1388  IF(LLP)WRITE(IU,9) 'TRSC     ',SIZE(TRSC     ),SHAPE(TRSC     )
1389  ALLOCATE(SRSWD(NPROMA,NGPBLKS))
1390  IF(LLP)WRITE(IU,9) 'SRSWD    ',SIZE(SRSWD    ),SHAPE(SRSWD    )
1391  ALLOCATE(SRLWD(NPROMA,NGPBLKS))
1392  IF(LLP)WRITE(IU,9) 'SRLWD    ',SIZE(SRLWD    ),SHAPE(SRLWD    )
1393  ALLOCATE(SRSWDCS(NPROMA,NGPBLKS))
1394  IF(LLP)WRITE(IU,9) 'SRSWDCS  ',SIZE(SRSWDCS  ),SHAPE(SRSWDCS  )
1395  ALLOCATE(SRLWDCS(NPROMA,NGPBLKS))
1396  IF(LLP)WRITE(IU,9) 'SRLWDCS  ',SIZE(SRLWDCS  ),SHAPE(SRLWDCS  )
1397  ALLOCATE(SRSWDV(NPROMA,NGPBLKS))
1398  IF(LLP)WRITE(IU,9) 'SRSWDV   ',SIZE(SRSWDV   ),SHAPE(SRSWDV   )
1399  ALLOCATE(SRSWDUV(NPROMA,NGPBLKS))
1400  IF(LLP)WRITE(IU,9) 'SRSWDUV  ',SIZE(SRSWDUV  ),SHAPE(SRSWDUV  )
1401  ALLOCATE(EDRO(NPROMA,NGPBLKS))
1402  IF(LLP)WRITE(IU,9) 'EDRO     ',SIZE(EDRO     ),SHAPE(EDRO     )
1403  ALLOCATE(SRSWPAR(NPROMA,NGPBLKS))
1404  IF(LLP)WRITE(IU,9) 'SRSWPAR  ',SIZE(SRSWPAR  ),SHAPE(SRSWPAR  )
1405  ALLOCATE(SRSWUVB(NPROMA,NGPBLKS))
1406  IF(LLP)WRITE(IU,9) 'SRSWUVB  ',SIZE(SRSWUVB  ),SHAPE(SRSWUVB  )
1407
1408ELSEIF(LMPHYS .AND. (LRAYFM.OR.LRAYFM15)) THEN
1409  ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS))
1410  IF(LLP)WRITE(IU,9) 'EMTD     ',SIZE(EMTD     ),SHAPE(EMTD     )
1411  ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS))
1412  IF(LLP)WRITE(IU,9) 'TRSW     ',SIZE(TRSW     ),SHAPE(TRSW     )
1413  ALLOCATE(EMTU(NPROMA,NFLEVG+1,NGPBLKS))
1414  IF(LLP)WRITE(IU,9) 'EMTC     ',SIZE(EMTU     ),SHAPE(EMTU     )
1415  ALLOCATE(RMOON(NPROMA,NGPBLKS))
1416  IF(LLP)WRITE(IU,9) 'RMOON    ',SIZE(RMOON    ),SHAPE(RMOON    )
1417ENDIF
1418ALLOCATE(SRSWPARC(NPROMA,NGPBLKS))
1419IF(LLP)WRITE(IU,9) 'SRSWPARC ',SIZE(SRSWPARC ),SHAPE(SRSWPARC )
1420ALLOCATE(SRSWTINC(NPROMA,NGPBLKS))
1421IF(LLP)WRITE(IU,9) 'SRSWTINC ',SIZE(SRSWTINC ),SHAPE(SRSWTINC )
1422
14239 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8)
1424
1425!      ----------------------------------------------------------------
1426
1427!*       10.    PRINT FINAL VALUES.
1428!               -------------------
1429
1430IF (LOUTPUT) THEN
1431  WRITE(UNIT=KULOUT,FMT='('' COMMON YOERAD '')')
1432  WRITE(UNIT=KULOUT,FMT='('' LERADI  = '',L5 &
1433   & ,'' LERAD1H = '',L5,'' LECO2VAR= '',L5,'' LHGHG = '',L5 &
1434   & ,'' NLNGR1H = '',I2,'' NRADSFR = '',I2)')&
1435   & LERADI,LERAD1H,LECO2VAR,LHGHG,NLNGR1H,NRADSFR 
1436  WRITE(UNIT=KULOUT,FMT='('' LEPO3RA  = '',L5,'' YO3%LGP = '',L5 )') LEPO3RA,YO3%LGP
1437  WRITE(UNIT=KULOUT,FMT='('' NRADFR  = '',I2 &
1438   & ,'' NRADPFR = '',I3 &
1439   & ,'' NRADPLA = '',I2 &
1440   & ,'' NRINT   = '',I1 &
1441   & ,'' NRPROMA = '',I5 &
1442   & )')&
1443   & NRADFR,NRADPFR,NRADPLA,NRINT, NRPROMA
1444  WRITE(UNIT=KULOUT,FMT='('' LERADHS= '',L5 &
1445   & ,'' LRRTM = '',L5 &
1446   & ,'' LSRTM = '',L5 &
1447   & ,'' NMODE = '',I1 &
1448   & ,'' NOZOCL= '',I1 &
1449   & ,'' NAER  = '',I1 &
1450   & ,'' NHINCSOL='',I2 &
1451   & )')&
1452   & LERADHS,LRRTM,LSRTM,NMODE,NOZOCL,NAER,NHINCSOL
1453  IF (.NOT.LHGHG .AND. .NOT.LECO2VAR) WRITE(UNIT=KULOUT,FMT='('' RCCO2= '',E10.3 &
1454    &,'' RCCH4= '',E10.3,'' RCN2O= '',E10.3,'' RCCFC11= '',E10.3,'' RCFC12= '',E10.3 &
1455    &)')&
1456    & RCCO2,RCCH4,RCN2O,RCCFC11,RCCFC12
1457  WRITE(UNIT=KULOUT,FMT='('' NINHOM = '',I1 &
1458   & ,'' NLAYINH='',I1   &
1459   & ,'' RLWINHF='',F4.2 &
1460   & ,'' RSWINHF='',F4.2 &
1461   & )')&
1462   & NINHOM,NLAYINH,RLWINHF,RSWINHF 
1463  IF (NPERTAER /= 0 .OR. NPERTOZ /= 0) THEN
1464    WRITE(UNIT=KULOUT,FMT='('' NPERTAER= '',I2 &
1465   & ,'' LNOTROAER='',L5 &
1466   & ,'' NPERTOZ = '',I1 &
1467   & ,'' RPERTOZ = '',F5.0 &
1468   & )')&
1469   & NPERTAER,LNOTROAER,NPERTOZ,RPERTOZ
1470  ENDIF
1471  WRITE(UNIT=KULOUT,FMT='('' NRADINT = '',I2)')NRADINT
1472  WRITE(UNIT=KULOUT,FMT='('' NRADRES = '',I4)')NRADRES
1473  WRITE(UNIT=KULOUT,FMT='('' LRADONDEM = '',L5)')LRADONDEM
1474  IF( NRADINT > 0 )THEN
1475    IDIR=LEN_TRIM(CRTABLEDIR)
1476    IFIL=LEN_TRIM(CRTABLEFIL)
1477    WRITE(UNIT=KULOUT,FMT='('' CRTABLEDIR = '',A,'' CRTABLEFIL = '',A)')&
1478     & CRTABLEDIR(1:IDIR),CRTABLEFIL(1:IFIL) 
1479  ENDIF
1480  WRITE(UNIT=KULOUT,FMT='('' LCCNL = '',L5 &
1481   & ,'' LCCNO = '',L5 &
1482   & ,'' RCCNLND= '',F5.0 &
1483   & ,'' RCCNSEA= '',F5.0 &
1484   & ,'' LE4ALB = '',L5 &
1485   &)')&
1486   & LCCNL,LCCNO,RCCNLND,RCCNSEA,LE4ALB
1487  IF (LHVOLCA) THEN
1488    WRITE(UNIT=KULOUT,FMT='('' HISTORY OF VOLCANIC AEROSOLS= '',L5)')LHVOLCA
1489  ENDIF
1490  WRITE(UNIT=KULOUT,FMT='('' LONEWSW= '',L5 &
1491   & ,'' NRADIP = '',I1 &
1492   & ,'' NRADLP = '',I1 &
1493   & ,'' NICEOPT= '',I1 &
1494   & ,'' NLIQOPT= '',I1 &
1495   & ,'' LDIFFC = '',L5 &
1496   & )')&
1497   & LONEWSW,NRADIP,NRADLP,NICEOPT,NLIQOPT,LDIFFC
1498  WRITE(UNIT=KULOUT,FMT='('' WARNING! CLOUD OVERLAP ASSUMPT. IS''&
1499   & ,'' NOVLP   = '',I2 &
1500   & )')&
1501   & NOVLP 
1502  IF (LUVPROC) THEN
1503    IDAYUV=NUVTIM/86400
1504    WRITE(UNIT=KULOUT,FMT='('' LUVPROC = '',L5 &
1505   & ,'' LUVTDEP= '',L5 &
1506   & ,'' NRADUV = '',I2 &
1507   & ,'' NUV = '',I2 &
1508   & ,'' NDAYUV = '',I5 &
1509   & ,'' RMUZUV = '',E9.3 &
1510   & )')&
1511   & LUVPROC,LUVTDEP,NRADUV,NUV,IDAYUV,RMUZUV
1512    WRITE(UNIT=KULOUT,FMT='('' RUVLAM = '',24F6.1)') (RUVLAM(JUV),JUV=1,NUV)
1513    WRITE(UNIT=KULOUT,FMT='('' JUVLAM = '',24(3X,I1,2X))') (JUVLAM(JUV),JUV=1,NUV)
1514  ENDIF
1515  WRITE(UNIT=KULOUT,FMT='('' NMCICA= '',I2 &
1516   & )')&
1517   & NMCICA
1518ENDIF
1519
1520!     ------------------------------------------------------------------
1521
1522IF (LHOOK) CALL DR_HOOK('SUECRAD',1,ZHOOK_HANDLE)
1523END SUBROUTINE SUECRAD
Note: See TracBrowser for help on using the repository browser.