GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/rrtm/suecrad.F90 Lines: 176 678 26.0 %
Date: 2023-06-30 12:56:34 Branches: 48 1017 4.7 %

Line Branch Exec Source
1
!
2
! $Id: suecrad.F90 4251 2022-09-20 00:22:43Z fhourdin $
3
!
4
5
SUBROUTINE SUECRAD (KULOUT, KLEV, PETAH )
5
6
!**** *SUECRAD*   - INITIALIZE COMMONS YOERxx CONTROLLING RADIATION
7
8
!     PURPOSE.
9
!     --------
10
!           INITIALIZE YOERAD, THE COMMON THAT CONTROLS THE
11
!           RADIATION OF THE MODEL, AND YOERDU THAT INCLUDES
12
!           ADJUSTABLE PARAMETERS FOR RADIATION COMPUTATIONS
13
14
!**   INTERFACE.
15
!     ----------
16
!        CALL *SUECRAD* FROM *SUPHEC*
17
!              -------        ------
18
19
!        EXPLICIT ARGUMENTS :
20
!        --------------------
21
!        NONE
22
23
!        IMPLICIT ARGUMENTS :
24
!        --------------------
25
!        COMMONS YOERAD, YOERDU
26
27
!     METHOD.
28
!     -------
29
!        SEE DOCUMENTATION
30
31
!     EXTERNALS.
32
!     ----------
33
!        SUAER, SUAERH, SUAERV, SULW, SUSW, SUOCST, SUSAT
34
!        SUAERL, SUAERSN, SUSRTAER, SRTM_INIT, SUSRTCOP
35
36
!     REFERENCE.
37
!     ----------
38
!        ECMWF Research Department documentation of the IFS
39
40
!     AUTHOR.
41
!     -------
42
!        JEAN-JACQUES MORCRETTE  *ECMWF*
43
44
!     MODIFICATIONS.
45
!     --------------
46
!        ORIGINAL : 88-12-15
47
!        P.COURTIER AND M.HAMRUD NAME SURAD ALREADY USED
48
!        Modified 93-11-15 by Ph. Dandin : FMR scheme with MF
49
!        Modified 95-12 by PhD : Cloud overlapping hypothesis for FMR
50
!        980317 JJMorcrette clean-up (NRAD, NFLUX)
51
!        000118 JJMorcrette variable concentr. uniformly mixed gases
52
!        990525 JJMorcrette GISS volcanic and new tropospheric aerosols
53
!        990831 JJMorcrette RRTM
54
!        R. El Khatib 01-02-02 proper initialization of NFRRC moved in SUCFU
55
!        010129 JJMorcrette clean-up LERAD1H, NLNGR1H
56
!        011105 GMozdzynski support new radiation grid
57
!        011005 JJMorcrette CCN --> Re Water clouds
58
!        R. El Khatib 01-02-02 LRRTM=lecmwf by default
59
!        020909 GMozdzynski support NRADRES to specify radiation grid
60
!        021001 GMozdzynski support on-demand radiation communications
61
!        030422 GMozdzynski automatic min-halo
62
!        030501 JJMorcrette new radiation grid on, new aerosols on (default)
63
!        030513 JJMorcrette progn. O3 / radiation interactions off (default)
64
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
65
!        050315 JJMorcrette prog.aerosols v1
66
!        041214 JJMorcrette SRTM
67
!        050111 JJMorcrette new cloud optical properties
68
!        050415 GMozdzynski Reduced halo support for radiation interpolation
69
!        051004 JJMorcrette UV surface radiation processor
70
!        051220 JJMorcrette SRTM112g+LWSCAT+UVprocessor+(bgfx:swclr, radaca)
71
!        060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
72
!        060510 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
73
!        JJMorcrette 20060721 PP of clear-sky PAR and TOA incident solar radiation
74
!        060625 JJMorcrette MODIS albedo (UVis, NIR)x(parallel+diffuse)
75
!        060726 JJMorcrette McICA default operational configuration
76
!     ------------------------------------------------------------------
77
78
USE PARKIND1  ,ONLY : JPIM     ,JPRB
79
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
80
81
USE PARDIM   , ONLY : JPMXGL
82
USE PARRRTM  , ONLY : JPLAY
83
USE PARSRTM  , ONLY : JPGPT
84
USE YOMCT0   , ONLY : LOUTPUT  ,NPRINTLEV,LALLOPR,&
85
 & NPROC    ,N_REGIONS_NS  ,N_REGIONS_EW
86
USE YOMDIM   , ONLY : NDLON    ,NSMAX    ,NDGENL    ,&
87
 & NDGSAL   ,NDGLG    ,NDGSAG   ,NDGENG   ,NDSUR1    ,&
88
 & NDLSUR   ,NDGSUR   ,NGPBLKS  ,NFLEVG   ,NPROMA
89
USE YOMCT0B  , ONLY : LECMWF
90
USE YOMDYN   , ONLY : TSTEP
91
! Ce qui concerne NULRAD commente par MPL le 15.04.09
92
!USE YOMLUN   , ONLY : NULNAM   ,NULRAD   ,NULOUT
93
USE YOMLUN   , ONLY : NULRAD   ,NULOUT
94
USE YOMCST   , ONLY : RDAY     ,RG       ,RCPD     ,RPI     ,RI0
95
USE YOMPHY   , ONLY : LMPHYS, LRAYFM   ,LRAYFM15
96
USE YOEPHY   , ONLY : LEPHYS   ,LERADI, LE4ALB
97
USE YOERDI   , ONLY : RCCO2, RCCH4, RCN2O, RCCFC11, RCCFC12, RSOLINC
98
USE YOERAD   , ONLY : NAER     , NOZOCL   ,&
99
 & NRADFR   ,NRADPFR  ,NRADPLA  ,NRINT    ,&
100
 & NRADNFR  ,NRADSFR  ,NOVLP    ,NRPROMA  ,&
101
!& NLW      ,NSW      ,NTSW     ,NCSRADF  ,&
102
! NSW mis dans .def MPL 20140211
103
 & NLW      ,NTSW     ,NCSRADF  ,&
104
 & NMODE    ,NLNGR1H  ,NSWNL    ,NSWTL    ,NUV     ,&
105
 & LERAD1H  ,LERADHS  ,LEPO3RA  ,LRADLB   ,LONEWSW ,&
106
 & LCCNL    ,LCCNO    ,&
107
 & LECSRAD  ,LHVOLCA  ,LNEWAER  ,LRRTM    ,LSRTM   ,LDIFFC  ,&
108
 & NRADINT  ,NRADRES  ,CRTABLEDIR,CRTABLEFIL       ,&
109
 & NICEOPT  ,NLIQOPT  ,NRADIP   ,NRADLP   ,NINHOM  ,NLAYINH ,&
110
 & LRAYL    ,LOPTRPROMA,&
111
 & RCCNLND  ,RCCNSEA  ,RLWINHF  ,RSWINHF  ,RRe2De  ,&
112
 & RPERTOZ  ,NPERTOZ  ,NMCICA   ,&
113
 & LNOTROAER,NPERTAER ,LECO2VAR ,LHGHG    ,NHINCSOL,NSCEN ,&
114
 & LEDBUG
115
USE YOERDU   , ONLY : NUAER    ,NTRAER   ,RCDAY    ,R10E     ,&
116
 & REPLOG   ,REPSC    ,REPSCO   ,REPSCQ   ,REPSCT   ,&
117
 & REPSCW   ,DIFF
118
USE YOEAERD  , ONLY : CVDAES   ,CVDAEL   ,CVDAEU   ,CVDAED   ,&
119
 & RCAEOPS  ,RCAEOPL  ,RCAEOPU  ,RCAEOPD  ,RCTRBGA  ,&
120
 & RCVOBGA  ,RCSTBGA  ,RCTRPT   ,RCAEADM  ,RCAEROS  ,            &
121
 & RCAEADK
122
USE YOE_UVRAD, ONLY : JUVLAM, LUVPROC, LUVTDEP, LUVDBG, NRADUV, NUVTIM, RUVLAM, RMUZUV
123
124
USE YOMMP    , ONLY : MYPROC   ,NPRCIDS  ,LSPLIT   ,NAPSETS  ,&
125
 & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,&
126
 & NSTA,NONL,NPTRFRSTLAT,NFRSTLAT,NLSTLAT ,&
127
 & MY_REGION_NS  ,MY_REGION_EW   ,NGLOBALINDEX ,&
128
 & NRISTA  ,NRIONL   ,NRIOFF    ,NRIEXT   ,NRICORE ,&
129
 & NRISENDPOS ,NRIRECVPOS ,NRISENDPTR ,NRIRECVPTR ,&
130
 & NARIB1  ,NRIPROCS ,NRIMPBUFSZ,NRISPT   ,NRIRPT ,&
131
 & NRICOMM ,&
132
 & NROSTA  ,NROONL   ,NROOFF    ,NROEXT   ,NROCORE ,&
133
 & NROSENDPOS ,NRORECVPOS ,NROSENDPTR ,NRORECVPTR ,&
134
 & NAROB1  ,NROPROCS ,NROMPBUFSZ,NROSPT   ,NRORPT ,&
135
 & NROCOMM
136
USE YOMGC    , ONLY : GELAT    ,GELAM
137
USE YOMLEG   , ONLY : RMU      ,RSQM2
138
USE YOMSC2   , ONLY : &
139
 & NRIWIDEN  ,NRIWIDES  ,NRIWIDEW  ,NRIWIDEE,&
140
 & NROWIDEN  ,NROWIDES  ,NROWIDEW  ,NROWIDEE
141
USE YOMGEM   , ONLY : NGPTOT   ,NGPTOTG   ,NGPTOTMX ,NLOENG
142
USE YOMTAG   , ONLY : MTAGRAD
143
USE YOMPRAD  , ONLY : LODBGRADI,LODBGRADL ,RADGRID  ,&
144
 & LRADONDEM
145
USE YOMRADF  , ONLY : EMTD     ,TRSW     ,EMTC      ,TRSC    ,&
146
 & SRSWD    ,SRLWD    ,SRSWDCS  ,SRLWDCS   ,SRSWDV  ,&
147
 & SRSWDUV  ,EDRO     ,SRSWPAR  ,SRSWUVB   ,SRSWPARC,  SRSWTINC,&
148
 & EMTU, RMOON
149
! Commente par MPL 26.11.08
150
!USE YOPHNC   , ONLY :  LERADN2
151
! MPLefebvre 6-11-08 commente tout ce qui concerne MPL_MODULE
152
!USE MPL_MODULE  , ONLY :  MPL_BROADCAST, MPL_SEND, MPL_RECV
153
USE YOM_YGFL , ONLY : YO3
154
!!!!! A REVOIR (MPL) NDLNPR devrait etre initialise dans sudyn.F90
155
USE YOMDYN   , ONLY : NDLNPR
156
157
IMPLICIT NONE
158
159
INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV
160
INTEGER(KIND=JPIM),INTENT(IN)    :: KULOUT
161
REAL(KIND=JPRB)   ,INTENT(IN)    :: PETAH(KLEV+1)
162
!     LOCAL ARRAYS FOR THE PURPOSE OF READING NAMRGRI (RADIATION GRID)
163
INTEGER(KIND=JPIM) :: NRGRI(JPMXGL)
164
165
INTEGER(KIND=JPIM) :: IDGL,INBLW,IRADFR,IST1HR,ISTNHR,IDIR,IFIL
166
INTEGER(KIND=JPIM) :: IRIRPTSUR,IRISPTSUR,IRIMAPLEN
167
INTEGER(KIND=JPIM) :: JLON,JGLAT,JGL,JGLSUR,IDLSUR,IOFF,ILAT,ISTLON,IENDLON
168
INTEGER(KIND=JPIM) :: IRORPTSUR,IROSPTSUR,IROMAPLEN
169
INTEGER(KIND=JPIM) :: ILBRLATI,IUBRLATI,IGLGLO,IDUM,IU
170
INTEGER(KIND=JPIM) :: J,JROC,IGPTOT
171
INTEGER(KIND=JPIM) :: IROWIDEMAXN,IROWIDEMAXS,IROWIDEMAXW,IROWIDEMAXE
172
INTEGER(KIND=JPIM) :: IRIWIDEMAXN,IRIWIDEMAXS,IRIWIDEMAXW,IRIWIDEMAXE
173
INTEGER(KIND=JPIM) :: IARIB1MAX,IAROB1MAX
174
INTEGER(KIND=JPIM) :: IWIDE(10)
175
INTEGER(KIND=JPIM) :: ILATS_DIFF_F,ILATS_DIFF_C
176
INTEGER(KIND=JPIM), PARAMETER :: JP_MIN_HALO=5
177
INTEGER(KIND=JPIM) :: ISW,JUV,IDAYUV
178
179
LOGICAL :: LLINEAR_GRID
180
LOGICAL :: LLDEBUG,LLP
181
182
REAL(KIND=JPRB) :: ZSTPHR, ZTSTEP, ZGEMU, ZLON, ZD1, ZD2, ZD3, ZD4, ZD5, ZD6
183
REAL(KIND=JPRB) :: ZMINRADLAT,ZMAXRADLAT,ZMINRADLON,ZMAXRADLON
184
REAL(KIND=JPRB) :: ZMINMDLLAT,ZMAXMDLLAT,ZMINMDLLON,ZMAXMDLLON
185
REAL(KIND=JPRB) :: ZLAT
186
!REAL(KIND=JPRB) :: RLATVOL, RLONVOL
187
188
CHARACTER (LEN = 300) ::  CLFN
189
INTEGER(KIND=JPIM), PARAMETER :: JPIOMASTER=1
190
191
INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPOS(:)
192
INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPOS(:)
193
INTEGER(KIND=JPIM), ALLOCATABLE :: IRISENDPTR(:)
194
INTEGER(KIND=JPIM), ALLOCATABLE :: IRIRECVPTR(:)
195
INTEGER(KIND=JPIM), ALLOCATABLE :: IRICOMM(:)
196
INTEGER(KIND=JPIM), ALLOCATABLE :: IRIMAP(:,:)
197
INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPOS(:)
198
INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPOS(:)
199
INTEGER(KIND=JPIM), ALLOCATABLE :: IROSENDPTR(:)
200
INTEGER(KIND=JPIM), ALLOCATABLE :: IRORECVPTR(:)
201
INTEGER(KIND=JPIM), ALLOCATABLE :: IROCOMM(:)
202
INTEGER(KIND=JPIM), ALLOCATABLE :: IROMAP(:,:)
203
INTEGER(KIND=JPIM), ALLOCATABLE :: IGLOBALINDEX(:)
204
205
REAL(KIND=JPRB),ALLOCATABLE :: ZLATX(:)
206
REAL(KIND=JPRB),ALLOCATABLE :: ZLONX(:)
207
REAL(KIND=JPRB) :: ZHOOK_HANDLE
208
209
INTERFACE
210
#include "setup_trans.h"
211
#include "trans_inq.h"
212
END INTERFACE
213
214
#include "abor1.intfb.h"
215
#include "posnam.intfb.h"
216
#include "rrtm_init_140gp.intfb.h"
217
218
#include "rdcset.intfb.h"
219
#include "suaerh.intfb.h"
220
#include "suaerl.intfb.h"
221
#include "suaersn.intfb.h"
222
#include "suaerv.intfb.h"
223
#include "suclopn.intfb.h"
224
#include "suecradi.intfb.h"
225
#include "suecradl.intfb.h"
226
#include "sulwn.intfb.h"
227
#include "sulwneur.intfb.h"
228
#include "suovlp.intfb.h"
229
#include "surdi.intfb.h"
230
#include "surrtab.intfb.h"
231
#include "surrtftr.intfb.h"
232
#include "surrtpk.intfb.h"
233
#include "surrtrf.intfb.h"
234
#include "susat.intfb.h"
235
#include "suswn.intfb.h"
236
#include "susrtaer.intfb.h"
237
#include "srtm_init.intfb.h"
238
#include "susrtcop.intfb.h"
239
#include "su_aerw.intfb.h"
240
#include "su_uvrad.intfb.h"
241
#include "su_mcica.intfb.h"
242
243
!      ----------------------------------------------------------------
244
245
#include "clesphys.h"
246
#include "naerad.h"
247
#include "namrgri.h"
248
!MPL/IM 20160915 on prend GES de phylmd
249
250
!*         1.       INITIALIZE NEUROFLUX LONGWAVE RADIATION
251
!                   ---------------------------------------
252
253
1
IF (LHOOK) CALL DR_HOOK('SUECRAD',0,ZHOOK_HANDLE)
254
!CALL GSTATS(1818,0)     MPL 2.12.08
255
!IF (LERADN2) THEN
256
!  CALL SULWNEUR(KLEV)
257
!ENDIF
258
259
!*         2.       SET DEFAULT VALUES.
260
!                   -------------------
261
262
!*         2.1      PRESET INDICES IN *YOERAD*
263
!                   --------------------------
264
265
1
LERAD1H=.FALSE.
266
1
NLNGR1H=6
267
268
1
LERADHS=.TRUE.
269
1
LONEWSW=.TRUE.
270
1
LECSRAD=.FALSE.
271
272
!LE4ALB=.FALSE.
273
!This is read from SU0PHY in NAEPHY and put in YOEPHY
274
275
!- default setting of cloud optical properties
276
!  liquid water cloud 0: Fouquart    (SW), Smith-Shi   (LW)
277
!                     1: Slingo      (SW), Savijarvi   (LW)
278
!                     2: Slingo      (SW), Lindner-Li  (LW)
279
!  ice water cloud    0: Ebert-Curry (SW), Smith-Shi   (LW)
280
!                     1: Ebert-Curry (SW), Ebert-Curry (LW)
281
!                     2: Fu-Liou'93  (SW), Fu-Liou'93  (LW)
282
!                     3: Fu'96       (SW), Fu et al'98 (LW)
283
1
NLIQOPT=2           ! before 3?R1 default=0    2
284
1
NICEOPT=3           ! before 3?R1 default=1    3
285
286
!- default setting of cloud effective radius/diameter
287
!  liquid water cloud 0: f(P) 10 to 45
288
!                     1: 13: ocean; 10: land
289
!                     2: Martin et al. CCN 50 over ocean, 900 over land
290
!  ice water cloud    0: 40 microns
291
!                     1: f(T) 40 to 130 microns
292
!                     2: f(T) 30 to 60
293
!                     3: f(T,IWC) Sun'01: 22.5 to 175 microns
294
!  conversion factor between effective radius and particle size for ice
295
1
NRADIP=3            ! before 3?R1 default=2 	3
296
1
NRADLP=2            ! before 3?R1 default=2	2
297
1
print *,'SUECRAD: NRADLP, NRADIP=',NRADLP,NRADIP
298
1
RRe2De=0.64952_JPRB ! before 3?R1 default=0.5_JPRB
299
300
!- RRTM as LW scheme
301
1
LRRTM  = .FALSE.
302
1
LECMWF = .FALSE.
303
1
IF (iflag_rrtm.EQ.1) THEN
304
1
        LRRTM  = .TRUE.
305
1
        LECMWF = .TRUE.
306
!       LRRTM  = .FALSE.  ! Utiliser pour faire tourner le "vieux" rayonnement
307
!       LECMWF = .FALSE.
308
ENDIF
309
310
!LRRTM  = .FALSE.
311
312
!- SRTM as SW scheme
313
!!!!! A REVOIR (MPL) verifier signification de LSRTM
314
1
LSRTM = .FALSE.     ! before 3?R1 default was .FALSE.    true
315
316
! -- McICA treatment of cloud-radiation interactions
317
! - 1 is maximum-random, 2 is generalized cloud overlap (before 31R1 default=0 no McICA)
318
1
NMcICA = 2          !  2 for generalized overlap
319
320
!- Inhomogeneity factors in LW and SW (0=F, 1=0.7 in both, 2=Barker's, 3=Cairns)
321
1
NINHOM = 0          ! before 3?R1 default=1
322
1
NLAYINH= 0
323
1
RLWINHF = 1.0_JPRB  ! before 3?R1 default=0.7
324
1
RSWINHF = 1.0_JPRB  ! before 3?R1 default=0.7
325
!- Diffusivity correction a la Savijarvi
326
1
LDIFFC = .FALSE.    ! before 31R1 default=.FALSE.
327
328
!- history of volcanic aerosols
329
1
LHVOLCA=.FALSE.
330
!- monthly climatol. of tropospheric aerosols from Tegen et al. (1997)
331
1
LNEWAER=.TRUE.
332
!!! cpl LNOTROAER=.FALSE.
333
1
LNOTROAER=.TRUE.
334
1
NPERTAER=0
335
336
!- New Rayleigh formulation
337
1
LRAYL=.TRUE.
338
339
!- Number concentration of aerosols if specified
340
1
LCCNL=.TRUE.        ! before 3?R1 default=.FALSE.     true
341
1
LCCNO=.TRUE.        ! before 3?R1 default=.FALSE.     true
342
1
RCCNLND=900._JPRB   ! before 3?R1 default=900. now irrelevant
343
1
RCCNSEA=50._JPRB    ! before 3?R1 default=50.  now irrelevant
344
345
!- interaction radiation / prognostic O3 off by default
346
1
LEPO3RA=.FALSE.
347
1
print *,'SUECRAD-0'
348
1
IF (.NOT.YO3%LGP) THEN
349
1
  LEPO3RA=.FALSE.
350
ENDIF
351
1
RPERTOZ=0._JPRB
352
1
NPERTOZ=0
353
354
!NAER: CONFIGURATION INDEX FOR AEROSOLS
355
!!!!! A REVOIR (MPL) a mettre dans un fichier .def
356
1
NAER   =1
357
1
NMODE  =0
358
1
NOZOCL =1
359
1
NRADFR =-3
360
1
IF (NSMAX >= 511) NRADFR =-1
361
1
NRADPFR=0
362
1
NRADPLA=15
363
364
! -- UV diagnostic of surface fluxes over the 280-400 nm interval
365
!    with up-to 24 values (5 nm wide spectral intervals)
366
1
LUVPROC=.FALSE.
367
1
LUVTDEP=.TRUE.
368
1
LUVDBG =.FALSE.
369
1
NRADUV =-3
370
1
NUVTIM = 0
371
1
NUV    = 24
372
1
RMUZUV = 1.E-01_JPRB
373
25
DO JUV=1,NUV
374
25
  RUVLAM(JUV)=280._JPRB+(JUV-1)*5._JPRB
375
ENDDO
376
377
!- radiation interpolation (George M's grid on by default)
378
LLDEBUG=.TRUE.
379
1
LEDBUG=.FALSE.
380
1
NRADINT=3
381
1
NRADRES=0
382
383
1
NRINT  =4
384
385
1
LRADLB=.TRUE.
386
1
CRTABLEDIR='./'
387
1
CRTABLEFIL='not set'
388
1
LRADONDEM=.TRUE.
389
!GM Temporary as per trans/external/setup_trans.F90
390
1
LLINEAR_GRID=NSMAX > (NDLON+3)/3
391
IF( LLDEBUG )THEN
392
1
  WRITE(NULOUT,'("SUECRAD: NSMAX=",I6)')NSMAX
393
1
  WRITE(NULOUT,'("SUECRAD: NDLON=",I6)')NDLON
394
1
  WRITE(NULOUT,'("SUECRAD: LLINEAR_GRID=",L5)')LLINEAR_GRID
395
ENDIF
396
397
1
NUAER  = 24
398
1
NTRAER = 15
399
! 1: max-random, 2: max, 3: random (5,6,7,8 pour meso-NH)
400
! le CASE qui suit car les conventions sont differentes dans ARP et LMDZ (MPL 20100415)
401
SELECT CASE (overlap)
402
  CASE (:1)
403
   NOVLP = 2
404
  CASE (2)
405
   NOVLP = 3
406
  CASE (3:)
407
1
   NOVLP = 1
408
  END SELECT
409
1
print *,'SUECRAD: NOVLP=',NOVLP
410
1
NLW    = 16
411
1
NTSW   = 14
412
!NSW    = 6    !!!!! Maintenant dans config.def (MPL 20140213)
413
1
NSWNL  = 6
414
1
NSWTL  = 2
415
1
NCSRADF= 1
416
1
IF(NSMAX >= 106) THEN
417
  NRPROMA = 80
418
1
ELSEIF(NSMAX == 63) THEN
419
  NRPROMA=48
420
ELSE
421
1
  NRPROMA=64
422
ENDIF
423
424
!*         2.3      SET SECURITY PARAMETERS
425
!                   -----------------------
426
427
1
REPSC  = 1.E-04_JPRB
428
1
REPSCO = 1.E-12_JPRB
429
1
REPSCQ = 1.E-12_JPRB
430
1
REPSCT = 1.E-12_JPRB
431
1
REPSCW = 1.E-12_JPRB
432
1
REPLOG = 1.E-12_JPRB
433
434
435
!*          2.4     BACKGROUND GAS CONCENTRATIONS (IPCC/SACC, 1990)
436
!                   -----------------------------------------------
437
438
1
LECO2VAR=.FALSE.
439
1
LHGHG   =.FALSE.
440
1
NHINCSOL= 0
441
1
NSCEN   = 1
442
1
RSOLINC = RI0
443
444
! Valeurs d origine MPL 18052010
445
!RCCO2   = 353.E-06_JPRB
446
!RCCH4   = 1.72E-06_JPRB
447
!RCN2O   = 310.E-09_JPRB
448
!RCCFC11 = 280.E-12_JPRB
449
!RCCFC12 = 484.E-12_JPRB
450
451
! Valeurs LMDZ (physiq.def) MPL 18052010
452
!RCCO2   = 348.E-06_JPRB
453
!RCCH4   = 1.65E-06_JPRB
454
!RCN2O   = 306.E-09_JPRB
455
!RCCFC11 = 280.E-12_JPRB
456
!RCCFC12 = 484.E-12_JPRB
457
458
!MPL/IM 20160915 on prend GES de phylmd
459
1
RCCO2   = CO2_ppm * 1.0e-06
460
1
RCCH4   = CH4_ppb * 1.0e-09
461
1
RCN2O   = N2O_ppb * 1.0e-09
462
1
RCCFC11 = CFC11_ppt * 1.0e-12
463
1
RCCFC12 = CFC12_ppt * 1.0e-12
464
!print *,'LMDZSUECRAD-1 RCCO2=',RCCO2
465
!print *,'LMDZSUECRAD-1 RCCH4=',RCCH4
466
!print *,'LMDZSUECRAD-1 RCN2O=',RCN2O
467
!print *,'LMDZSUECRAD-1 RCCFC11=',RCCFC11
468
!print *,'LMDZSUECRAD-1 RCCFC12=',RCCFC12
469
!     ------------------------------------------------------------------
470
471
!*         3.       READ VALUES OF RADIATION CONFIGURATION
472
!                   --------------------------------------
473
474
!CALL POSNAM(NULNAM,'NAERAD')
475
!READ (NULNAM,NAERAD)
476
1
print *,'SUECRAD-2'
477
478
!CALL POSNAM(NULNAM,'NAEAER')
479
!READ (NULNAM,NAEAER)
480
481
!IF (NTYPAER(9) /= 0) THEN
482
!  RGEMUV=(RLATVOL+90._JPRB)*RPI/180._JPRB
483
!  RGELAV=RLONVOL*RPI/180._JPRB
484
!  RCLONV=COS(RGELAV)
485
!  RSLONV=SIN(RGELAV)
486
!  DO J=1,NGPTOT-1
487
!    IF (RGELAV > GELAM(J) .AND. RGELAV <= GELAM(J+1) .AND. &
488
!      & RGEMUV < RMU(JL) .AND. RGEMUV >= RMU(JL+1) ) THEN
489
!      RDGMUV=ABS( RMU(J+1) - RMU(J))
490
!      RDGLAV=ABS( GELAM(J+1)-GELAM(J) )
491
!      RDSLONV=ABS( SIN(GELAM(JL+1))-SIN(GELAM(JL)) )
492
!      RDCLONV=ABS( COS(GELAM(JL+1))-COS(GELAM(JL)) )
493
!    END IF
494
!  END DO
495
!END IF
496
497
!- reset some parameters if SW6 is used (revert to pre-CY3?R1 operational configuration)
498
1
IF (.NOT.LSRTM) THEN
499
1
  NMcICA = 0
500
1
  LCCNL  = .FALSE.
501
1
  LCCNO  = .FALSE.
502
1
  LDIFFC = .FALSE.
503
1
  NICEOPT= 1
504
1
  NLIQOPT= 0
505
1
  NRADIP = 4
506
1
  NRADLP = 3
507
1
  RRe2De = 0.5_JPRB
508
1
  NINHOM = 1
509
1
  RLWINHF= 0.7_JPRB
510
1
  RSWINHF= 0.7_JPRB
511
ENDIF
512
1
print *,'SUECRAD-3'
513
514
!- for McICA computations, make sure these parameters are as follows ...
515
1
IF (NMCICA /= 0) THEN
516
  NINHOM = 0
517
  RLWINHF= 1.0_JPRB
518
  RSWINHF= 1.0_JPRB
519
!-- read the XCW values for Raisanen-Cole-Barker cloud generator
520
  CALL SU_McICA
521
ENDIF
522
1
print *,'SUECRAD-4'
523
524
525
526
IF( LLDEBUG )THEN
527
1
  WRITE(NULOUT,'("SUECRAD: NRADINT=",I2)')NRADINT
528
1
  WRITE(NULOUT,'("SUECRAD: NRADRES=",I4)')NRADRES
529
ENDIF
530
531
!     DETERMINE WHETHER NRPROMA IS NEGATIVE AND SET LOPTRPROMA
532
533
1
LOPTRPROMA=NRPROMA > 0
534
1
NRPROMA=ABS(NRPROMA)
535
536

1
IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN
537
1
  WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")')
538
1
  NRADINT=0
539
ENDIF
540
541


1
IF( NRADINT > 0 .AND. LRAYFM .AND. NAER /= 0 .AND. .NOT.LHVOLCA )THEN
542
!   This combination is not supported as aerosol data would be
543
!   required to be interpolated (see radintg)
544
  WRITE(NULOUT,'("SUECRAD: NRADINT>0, LRAYFM=T NAER /= 0 .AND. LHVOLCA=F,",&
545
   & " NRADRES RESET TO NSMAX (NO INTERPOLATION)")')
546
  NRADRES=NSMAX
547
ENDIF
548
!CALL GSTATS(1818,1)      MPL 2.12.08
549
550
100 CONTINUE
551
552
1
IF( LERADI )THEN   ! START OF LERADI BLOCK
553
554
  IF( NRADINT == -1 )THEN
555
556
  !     INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION INTERPOLATION
557
558
    LODBGRADI=.FALSE.
559
    CALL SUECRADI
560
561
  !     INITIALISE DATA STRUCTURES REQUIRED FOR RADIATION COURSE GRID
562
  !     LOAD BALANCING
563
564
    LODBGRADL=.FALSE.
565
!   CALL SUECRADL    ! MPL 1.12.08
566
    CALL ABOR1('JUSTE APRES CALL SUECRADL COMMENTE')
567
568
  ELSEIF( NRADINT == 0 )THEN
569
570
    IF( NRADRES /= NSMAX )THEN
571
      WRITE(NULOUT,'("SUECRAD: NRADINT=0 REQUESTED, NRADRES RESET TO NSMAX")')
572
      NRADRES=NSMAX
573
    ENDIF
574
    RADGRID%NGPTOT=NGPTOT
575
576
    NARIB1=0
577
    NAROB1=0
578
579
  ELSEIF( NRADINT >=1 .AND. NRADINT <= 3 )THEN
580
581
    NARIB1=0
582
    NAROB1=0
583
584
! set the default radiation grid resolution for the current model resolution
585
! if not already specified
586
    IF( NRADRES == 0 )THEN
587
      IF( LLINEAR_GRID )THEN                ! RATIO OF GRID-POINTS (MODEL/RAD)
588
        IF( NSMAX == 63 )THEN
589
          NRADRES=21                        ! 3.62
590
          LLINEAR_GRID=.FALSE.
591
        ENDIF
592
        IF( NSMAX ==   95 ) NRADRES=   95   ! 1.00
593
        IF( NSMAX ==  159 ) NRADRES=   63   ! 5.84
594
        IF( NSMAX ==  255 ) NRADRES=   95   ! 6.69
595
        IF( NSMAX ==  319 ) NRADRES=  159   ! 3.87
596
        IF( NSMAX ==  399 ) NRADRES=  159   ! 5.99
597
        IF( NSMAX ==  511 ) NRADRES=  255   ! 3.92
598
        IF( NSMAX ==  639 ) NRADRES=  319   ! 3.92
599
        IF( NSMAX ==  799 ) NRADRES=  399   ! 3.94
600
        IF( NSMAX == 1023 ) NRADRES=  511   ! 3.94
601
        IF( NSMAX == 1279 ) NRADRES=  639       !
602
        IF( NSMAX == 2047 ) NRADRES= 1023       !
603
      ELSE ! NOT LINEAR GRID
604
        IF( NSMAX ==   21 ) NRADRES=   21   ! 1.00
605
        IF( NSMAX ==   42 ) NRADRES=   21   ! 3.62
606
        IF( NSMAX ==   63 ) NRADRES=   42   ! 2.17
607
        IF( NSMAX ==  106 ) NRADRES=   63   ! 2.69
608
        IF( NSMAX ==  170 ) NRADRES=   63   ! 6.69
609
        IF( NSMAX ==  213 ) NRADRES=  106   ! 3.87
610
        IF( NSMAX ==  266 ) NRADRES=  106   ! 5.99
611
        IF( NSMAX ==  341 ) NRADRES=  170   ! 3.92
612
        IF( NSMAX ==  426 ) NRADRES=  213   ! 3.92
613
        IF( NSMAX ==  533 ) NRADRES=  266   ! 3.94
614
        IF( NSMAX ==  682 ) NRADRES=  341   ! 3.94
615
      ENDIF
616
    ENDIF
617
print *,'SUECRAD-5'
618
619
! test if radiation grid resolution has been set
620
    IF( NRADRES == 0 )THEN
621
      WRITE(NULOUT,'("SUECRAD: NRADRES NOT SET OR DEFAULT FOUND,NSMAX=",I4)')NSMAX
622
      CALL ABOR1('SUECRAD: NRADRES NOT SET OR DEFAULT FOUND')
623
    ENDIF
624
625
! test if no interpolation is required
626
    IF( NRADINT > 0 .AND. NRADRES == NSMAX )THEN
627
      WRITE(NULOUT,'("SUECRAD: NRADINT > 0 .AND. NRADRES = NSMAX, NRADINT RESET TO 0")')
628
      NRADINT=0
629
      GOTO 100
630
    ENDIF
631
632
!    CALL GSTATS(1818,0)       MPL 2.12.08
633
    IF( CRTABLEFIL == 'not set' )THEN
634
      IF( LLINEAR_GRID )THEN
635
        IF( NRADRES < 1000 )THEN
636
          WRITE(CRTABLEFIL,'("rtablel_2",I3.3)')NRADRES
637
        ELSE
638
          WRITE(CRTABLEFIL,'("rtablel_2",I4.4)')NRADRES
639
        ENDIF
640
      ELSE
641
        IF( NRADRES < 1000 )THEN
642
          WRITE(CRTABLEFIL,'("rtable_2" ,I3.3)')NRADRES
643
        ELSE
644
          WRITE(CRTABLEFIL,'("rtable_2" ,I4.4)')NRADRES
645
        ENDIF
646
      ENDIF
647
    ENDIF
648
!    CALL GSTATS(1818,1)       MPL 2.12.08
649
650
    RADGRID%NSMAX=NRADRES
651
652
    IF( MYPROC == JPIOMASTER )THEN
653
      IDIR=LEN_TRIM(CRTABLEDIR)
654
      IFIL=LEN_TRIM(CRTABLEFIL)
655
      CLFN=CRTABLEDIR(1:IDIR)//CRTABLEFIL(1:IFIL)
656
! Ce qui concerne NULRAD commente par MPL le 15.04.09
657
!     OPEN(NULRAD,FILE=CLFN,ACTION="READ",ERR=999)
658
!     GOTO 1000
659
!     999 CONTINUE
660
!     WRITE(NULOUT,'("SUECRAD: UNABLE TO OPEN FILE ",A)')CLFN
661
!     CALL ABOR1('SUECRAD: UNABLE TO OPEN RADIATION GRID RTABLE FILE')
662
!     1000 CONTINUE
663
      NRGRI(:)=0
664
! Ce qui concerne NAMRGRI commente par MPL le 15.04.09
665
!     CALL POSNAM(NULRAD,'NAMRGRI')
666
!     READ (NULRAD,NAMRGRI)
667
      IDGL=1
668
      DO WHILE( NRGRI(IDGL)>0 )
669
        IF( LLDEBUG )THEN
670
          WRITE(NULOUT,'("SUECRAD: NRGRI(",I4,")=",I4)')IDGL,NRGRI(IDGL)
671
        ENDIF
672
        IDGL=IDGL+1
673
      ENDDO
674
      IDGL=IDGL-1
675
      RADGRID%NDGLG=IDGL
676
      IF( LLDEBUG )THEN
677
        WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG=",I4)')RADGRID%NDGLG
678
      ENDIF
679
!     CLOSE(NULRAD)
680
    ENDIF
681
!    CALL GSTATS(667,0)     MPL 2.12.08
682
    IF( NPROC > 1 )THEN
683
      stop 'Pas pret pour proc > 1'
684
!     CALL MPL_BROADCAST (RADGRID%NDGLG,MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:')
685
    ENDIF
686
    ALLOCATE(RADGRID%NRGRI(RADGRID%NDGLG))
687
    IF( MYPROC == JPIOMASTER )THEN
688
      RADGRID%NRGRI(1:RADGRID%NDGLG)=NRGRI(1:RADGRID%NDGLG)
689
    ENDIF
690
    IF( NPROC > 1 )THEN
691
      stop 'Pas pret pour proc > 1'
692
!     CALL MPL_BROADCAST (RADGRID%NRGRI(1:RADGRID%NDGLG),MTAGRAD,JPIOMASTER,CDSTRING='SUECRAD:')
693
    ENDIF
694
!    CALL GSTATS(667,1)      MPL 2.12.08
695
696
!    CALL GSTATS(1818,0)     MPL 2.12.08
697
    IF    ( NRADINT == 1 )THEN
698
      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - SPECTRAL TRANSFORM")')
699
      RADGRID%NDGSUR=0
700
      NRIWIDEN=0
701
      NRIWIDES=0
702
      NRIWIDEW=0
703
      NRIWIDEE=0
704
      NROWIDEN=0
705
      NROWIDES=0
706
      NROWIDEW=0
707
      NROWIDEE=0
708
    ELSEIF( NRADINT == 2 )THEN
709
      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 4 POINT")')
710
      RADGRID%NDGSUR=2
711
    ELSEIF( NRADINT == 3 )THEN
712
      WRITE(NULOUT,'("SUECRAD: INTERPOLATION METHOD - 12 POINT")')
713
      RADGRID%NDGSUR=2
714
    ENDIF
715
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSUR       =",I8)')RADGRID%NDGSUR
716
717
    RADGRID%NDGSAG=1-RADGRID%NDGSUR
718
    RADGRID%NDGENG=RADGRID%NDGLG+RADGRID%NDGSUR
719
    RADGRID%NDLON=RADGRID%NRGRI(RADGRID%NDGLG/2)
720
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAG       =",I8)')RADGRID%NDGSAG
721
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENG       =",I8)')RADGRID%NDGENG
722
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGLG        =",I8)')RADGRID%NDGLG
723
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDLON        =",I8)')RADGRID%NDLON
724
    CALL FLUSH(NULOUT)
725
726
    ALLOCATE(RADGRID%NLOENG(RADGRID%NDGSAG:RADGRID%NDGENG))
727
    RADGRID%NLOENG(1:RADGRID%NDGLG)=RADGRID%NRGRI(1:RADGRID%NDGLG)
728
    IF(RADGRID%NDGSUR >= 1)THEN
729
      DO JGLSUR=1,RADGRID%NDGSUR
730
        RADGRID%NLOENG(1-JGLSUR)=RADGRID%NLOENG(JGLSUR)
731
      ENDDO
732
      DO JGLSUR=1,RADGRID%NDGSUR
733
        RADGRID%NLOENG(RADGRID%NDGLG+JGLSUR)=RADGRID%NLOENG(RADGRID%NDGLG+1-JGLSUR)
734
      ENDDO
735
    ENDIF
736
!     CALL GSTATS(1818,1)     MPL 2.12.08
737
738
! Setup the transform package for the radiation grid
739
    CALL SETUP_TRANS (KSMAX=RADGRID%NSMAX, &
740
     & KDGL=RADGRID%NDGLG, &
741
     & KLOEN=RADGRID%NLOENG(1:RADGRID%NDGLG), &
742
     & LDLINEAR_GRID=LLINEAR_GRID, &
743
     & LDSPLIT=LSPLIT, &
744
     & KAPSETS=NAPSETS, &
745
     & KRESOL=RADGRID%NRESOL_ID)
746
747
    ALLOCATE(RADGRID%NSTA(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW))
748
    ALLOCATE(RADGRID%NONL(RADGRID%NDGSAG:RADGRID%NDGENG+N_REGIONS_NS-1,N_REGIONS_EW))
749
    ALLOCATE(RADGRID%NPTRFRSTLAT(N_REGIONS_NS))
750
    ALLOCATE(RADGRID%NFRSTLAT(N_REGIONS_NS))
751
    ALLOCATE(RADGRID%NLSTLAT(N_REGIONS_NS))
752
    ALLOCATE(RADGRID%RMU(RADGRID%NDGSAG:RADGRID%NDGENG))
753
    ALLOCATE(RADGRID%RSQM2(RADGRID%NDGSAG:RADGRID%NDGENG))
754
    ALLOCATE(RADGRID%RLATIG(RADGRID%NDGSAG:RADGRID%NDGENG))
755
756
! Interrogate the transform package for the radiation grid
757
!    CALL GSTATS(1818,0)    MPL 2.12.08
758
    CALL TRANS_INQ (KRESOL     =RADGRID%NRESOL_ID, &
759
     & KSPEC2     =RADGRID%NSPEC2, &
760
     & KNUMP      =RADGRID%NUMP, &
761
     & KGPTOT     =RADGRID%NGPTOT, &
762
     & KGPTOTG    =RADGRID%NGPTOTG, &
763
     & KGPTOTMX   =RADGRID%NGPTOTMX, &
764
     & KPTRFRSTLAT=RADGRID%NPTRFRSTLAT, &
765
     & KFRSTLAT   =RADGRID%NFRSTLAT, &
766
     & KLSTLAT    =RADGRID%NLSTLAT, &
767
     & KFRSTLOFF  =RADGRID%NFRSTLOFF, &
768
     & KSTA       =RADGRID%NSTA(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), &
769
     & KONL       =RADGRID%NONL(1:RADGRID%NDGLG+N_REGIONS_NS-1,:), &
770
     & KPTRFLOFF  =RADGRID%NPTRFLOFF, &
771
     & PMU        =RADGRID%RMU(1:) )
772
773
    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
774
      DO JGL=1,RADGRID%NDGLG
775
        RADGRID%RSQM2(JGL) = SQRT(1.0_JPRB - RADGRID%RMU(JGL)*RADGRID%RMU(JGL))
776
        RADGRID%RLATIG(JGL) = ASIN(RADGRID%RMU(JGL))
777
!       WRITE(NULOUT,'("SUECRAD: JGL=",I6," RADGRID%RLATIG=",F10.3)')&
778
!        & JGL,RADGRID%RLATIG(JGL)
779
      ENDDO
780
      IF(RADGRID%NDGSUR >= 1)THEN
781
        DO JGLSUR=1,RADGRID%NDGSUR
782
          RADGRID%RMU(1-JGLSUR)=RADGRID%RMU(JGLSUR)
783
          RADGRID%RSQM2(1-JGLSUR)=RADGRID%RSQM2(JGLSUR)
784
          RADGRID%RLATIG(1-JGLSUR)=RPI-RADGRID%RLATIG(JGLSUR)
785
        ENDDO
786
        DO JGLSUR=1,RADGRID%NDGSUR
787
          RADGRID%RMU(RADGRID%NDGLG+JGLSUR)=RADGRID%RMU(RADGRID%NDGLG+1-JGLSUR)
788
          RADGRID%RSQM2(RADGRID%NDGLG+JGLSUR)=RADGRID%RSQM2(RADGRID%NDGLG+1-JGLSUR)
789
          RADGRID%RLATIG(RADGRID%NDGLG+JGLSUR)=-RPI-RADGRID%RLATIG(RADGRID%NDGLG+1-JGLSUR)
790
        ENDDO
791
      ENDIF
792
    ENDIF
793
794
    RADGRID%NDGSAL=1
795
    RADGRID%NDGENL=RADGRID%NLSTLAT(MY_REGION_NS)-RADGRID%NFRSTLOFF
796
    RADGRID%NDSUR1=3-MOD(RADGRID%NDLON,2)
797
    IDLSUR=MAX(RADGRID%NDLON,2*RADGRID%NSMAX+1)
798
    RADGRID%NDLSUR=IDLSUR+RADGRID%NDSUR1
799
    RADGRID%MYFRSTACTLAT=RADGRID%NFRSTLAT(MY_REGION_NS)
800
    RADGRID%MYLSTACTLAT=RADGRID%NLSTLAT(MY_REGION_NS)
801
802
    WRITE(NULOUT,'("SUECRAD: RADGRID%NRESOL_ID    =",I8)')RADGRID%NRESOL_ID
803
    WRITE(NULOUT,'("SUECRAD: RADGRID%NSMAX        =",I8)')RADGRID%NSMAX
804
    WRITE(NULOUT,'("SUECRAD: RADGRID%NSPEC2       =",I8)')RADGRID%NSPEC2
805
    WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOT       =",I8)')RADGRID%NGPTOT
806
    WRITE(NULOUT,'("SUECRAD: RADGRID%NGPTOTG      =",I8)')RADGRID%NGPTOTG
807
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAL       =",I8)')RADGRID%NDGSAL
808
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENL       =",I8)')RADGRID%NDGENL
809
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDSUR1       =",I8)')RADGRID%NDSUR1
810
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDLSUR       =",I8)')RADGRID%NDLSUR
811
    WRITE(NULOUT,'("SUECRAD: RADGRID%MYFRSTACTLAT =",I8)')RADGRID%MYFRSTACTLAT
812
    WRITE(NULOUT,'("SUECRAD: RADGRID%MYLSTACTLAT  =",I8)')RADGRID%MYLSTACTLAT
813
    CALL FLUSH(NULOUT)
814
815
    ALLOCATE(RADGRID%NASM0(0:RADGRID%NSPEC2))
816
    ALLOCATE(RADGRID%MYMS(RADGRID%NUMP))
817
    CALL TRANS_INQ (KRESOL     =RADGRID%NRESOL_ID, &
818
     & KASM0      =RADGRID%NASM0, &
819
     & KMYMS      =RADGRID%MYMS )
820
821
    ALLOCATE(RADGRID%GELAM(RADGRID%NGPTOT))
822
    ALLOCATE(RADGRID%GELAT(RADGRID%NGPTOT))
823
    ALLOCATE(RADGRID%GESLO(RADGRID%NGPTOT))
824
    ALLOCATE(RADGRID%GECLO(RADGRID%NGPTOT))
825
    ALLOCATE(RADGRID%GEMU (RADGRID%NGPTOT))
826
827
    IOFF=0
828
    ILAT=RADGRID%NPTRFLOFF
829
    DO JGLAT=RADGRID%NFRSTLAT(MY_REGION_NS), &
830
       & RADGRID%NLSTLAT(MY_REGION_NS)
831
      ZGEMU=RADGRID%RMU(JGLAT)
832
      ILAT=ILAT+1
833
      ISTLON  = RADGRID%NSTA(ILAT,MY_REGION_EW)
834
      IENDLON = ISTLON-1 + RADGRID%NONL(ILAT,MY_REGION_EW)
835
836
      DO JLON=ISTLON,IENDLON
837
        ZLON=  REAL(JLON-1,JPRB)*2.0_JPRB*RPI &
838
         & /REAL(RADGRID%NLOENG(JGLAT),JPRB)
839
        IOFF=IOFF+1
840
        RADGRID%GELAM(IOFF) = ZLON
841
        RADGRID%GELAT(IOFF) = ASIN(ZGEMU)
842
        RADGRID%GESLO(IOFF) = SIN(ZLON)
843
        RADGRID%GECLO(IOFF) = COS(ZLON)
844
        RADGRID%GEMU (IOFF) = ZGEMU
845
      ENDDO
846
    ENDDO
847
848
    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
849
850
!   For grid point interpolations we need to calculate the halo size
851
!   required by each processor
852
853
      ALLOCATE(ZLATX(RADGRID%NGPTOTMX))
854
      ALLOCATE(ZLONX(RADGRID%NGPTOTMX))
855
      DO J=1,RADGRID%NGPTOT
856
        ZLATX(J)=RADGRID%GELAT(J)/RPI*2.0_JPRB*90.0
857
        ZLONX(J)=(RADGRID%GELAM(J)-RPI)/RPI*180.0
858
      ENDDO
859
      ZMINRADLAT=MINVAL(ZLATX(1:RADGRID%NGPTOT))
860
      ZMAXRADLAT=MAXVAL(ZLATX(1:RADGRID%NGPTOT))
861
      ZMINRADLON=MINVAL(ZLONX(1:RADGRID%NGPTOT))
862
      ZMAXRADLON=MAXVAL(ZLONX(1:RADGRID%NGPTOT))
863
      IF( LLDEBUG )THEN
864
        WRITE(NULOUT,'("RADGRID,BEGIN")')
865
        IF( MYPROC /= 1 )THEN
866
          stop 'Pas pret pour proc > 1'
867
!         CALL MPL_SEND(RADGRID%NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.R')
868
!         CALL MPL_SEND(ZLATX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD.R')
869
!         CALL MPL_SEND(ZLONX(1:RADGRID%NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD.R')
870
        ENDIF
871
        IF( MYPROC == 1 )THEN
872
          DO JROC=1,NPROC
873
            IF( JROC == MYPROC )THEN
874
              DO J=1,RADGRID%NGPTOT
875
                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),MYPROC
876
              ENDDO
877
            ELSE
878
              stop 'Pas pret pour proc > 1'
879
!             CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.M')
880
!             CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD.M')
881
!             CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD.M')
882
              DO J=1,IGPTOT
883
                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6)')ZLATX(J),ZLONX(J),JROC
884
              ENDDO
885
            ENDIF
886
          ENDDO
887
        ENDIF
888
        WRITE(NULOUT,'("RADGRID,END")')
889
      ENDIF
890
      DEALLOCATE(ZLATX)
891
      DEALLOCATE(ZLONX)
892
893
      ALLOCATE(ZLATX(NGPTOTMX))
894
      ALLOCATE(ZLONX(NGPTOTMX))
895
      DO J=1,NGPTOT
896
        ZLATX(J)=GELAT(J)/RPI*2.0_JPRB*90.0
897
        ZLONX(J)=(GELAM(J)-RPI)/RPI*180.0
898
      ENDDO
899
      ZMINMDLLAT=MINVAL(ZLATX(1:NGPTOT))
900
      ZMAXMDLLAT=MAXVAL(ZLATX(1:NGPTOT))
901
      ZMINMDLLON=MINVAL(ZLONX(1:NGPTOT))
902
      ZMAXMDLLON=MAXVAL(ZLONX(1:NGPTOT))
903
      IF( LLDEBUG )THEN
904
        WRITE(NULOUT,'("MODELGRID,BEGIN")')
905
        IF( MYPROC /= 1 )THEN
906
          stop 'Pas pret pour proc > 1'
907
!         CALL MPL_SEND(NGPTOT,KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD')
908
!         CALL MPL_SEND(ZLATX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=2,CDSTRING='SUECRAD')
909
!         CALL MPL_SEND(ZLONX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=3,CDSTRING='SUECRAD')
910
!         CALL MPL_SEND(NGLOBALINDEX(1:NGPTOT),KDEST=NPRCIDS(1),KTAG=4,CDSTRING='SUECRAD')
911
        ENDIF
912
        IF( MYPROC == 1 )THEN
913
          DO JROC=1,NPROC
914
            IF( JROC == MYPROC )THEN
915
              DO J=1,NGPTOT
916
                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),MYPROC,NGLOBALINDEX(J)
917
              ENDDO
918
            ELSE
919
              stop 'Pas pret pour proc > 1'
920
!             CALL MPL_RECV(IGPTOT,KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD')
921
!             CALL MPL_RECV(ZLATX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=2,CDSTRING='SUECRAD')
922
!             CALL MPL_RECV(ZLONX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=3,CDSTRING='SUECRAD')
923
              ALLOCATE(IGLOBALINDEX(1:IGPTOT))
924
!             CALL MPL_RECV(IGLOBALINDEX(1:IGPTOT),KSOURCE=NPRCIDS(JROC),KTAG=4,CDSTRING='SUECRAD')
925
              DO J=1,IGPTOT
926
                WRITE(NULOUT,'(F7.2,2X,F7.2,2X,I6,2X,I12)')ZLATX(J),ZLONX(J),JROC,IGLOBALINDEX(J)
927
              ENDDO
928
              DEALLOCATE(IGLOBALINDEX)
929
            ENDIF
930
          ENDDO
931
        ENDIF
932
        WRITE(NULOUT,'("MODELGRID,END")')
933
      ENDIF
934
      DEALLOCATE(ZLATX)
935
      DEALLOCATE(ZLONX)
936
937
      IF( LLDEBUG )THEN
938
        WRITE(NULOUT,'("ZMINRADLAT=",F10.2)')ZMINRADLAT
939
        WRITE(NULOUT,'("ZMINMDLLAT=",F10.2)')ZMINMDLLAT
940
        WRITE(NULOUT,'("ZMAXRADLAT=",F10.2)')ZMAXRADLAT
941
        WRITE(NULOUT,'("ZMAXMDLLAT=",F10.2)')ZMAXMDLLAT
942
        WRITE(NULOUT,'("ZMINRADLON=",F10.2)')ZMINRADLON
943
        WRITE(NULOUT,'("ZMINMDLLON=",F10.2)')ZMINMDLLON
944
        WRITE(NULOUT,'("ZMAXRADLON=",F10.2)')ZMAXRADLON
945
        WRITE(NULOUT,'("ZMAXMDLLON=",F10.2)')ZMAXMDLLON
946
      ENDIF
947
948
      ZLAT=NDGLG/180.
949
      ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
950
      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
951
      IF( ZMINRADLAT < ZMINMDLLAT )THEN
952
        NRIWIDES=JP_MIN_HALO+ILATS_DIFF_C
953
      ELSE
954
        NRIWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
955
      ENDIF
956
      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
957
      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
958
      IF( ZMAXRADLAT < ZMAXMDLLAT )THEN
959
        NRIWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
960
      ELSE
961
        NRIWIDEN=JP_MIN_HALO+ILATS_DIFF_C
962
      ENDIF
963
      ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
964
      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
965
      IF( ZMINRADLON < ZMINMDLLON )THEN
966
        NRIWIDEW=JP_MIN_HALO+ILATS_DIFF_C
967
      ELSE
968
        NRIWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
969
      ENDIF
970
      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
971
      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
972
      IF( ZMAXRADLON < ZMAXMDLLON )THEN
973
        NRIWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
974
      ELSE
975
        NRIWIDEE=JP_MIN_HALO+ILATS_DIFF_C
976
      ENDIF
977
978
      ZLAT=RADGRID%NDGLG/180.
979
      ILATS_DIFF_C=CEILING(ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
980
      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLAT-ZMINMDLLAT)*ZLAT)
981
      IF( ZMINMDLLAT < ZMINRADLAT )THEN
982
        NROWIDES=JP_MIN_HALO+ILATS_DIFF_C
983
      ELSE
984
        NROWIDES=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
985
      ENDIF
986
      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
987
      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLAT-ZMAXMDLLAT)*ZLAT)
988
      IF( ZMAXMDLLAT < ZMAXRADLAT )THEN
989
        NROWIDEN=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
990
      ELSE
991
        NROWIDEN=JP_MIN_HALO+ILATS_DIFF_C
992
      ENDIF
993
      ILATS_DIFF_C=CEILING(ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
994
      ILATS_DIFF_F=FLOOR  (ABS(ZMINRADLON-ZMINMDLLON)*ZLAT)
995
      IF( ZMINMDLLON < ZMINRADLON )THEN
996
        NROWIDEW=JP_MIN_HALO+ILATS_DIFF_C
997
      ELSE
998
        NROWIDEW=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
999
      ENDIF
1000
      ILATS_DIFF_C=CEILING(ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
1001
      ILATS_DIFF_F=FLOOR  (ABS(ZMAXRADLON-ZMAXMDLLON)*ZLAT)
1002
      IF( ZMAXMDLLON < ZMAXRADLON )THEN
1003
        NROWIDEE=MAX(0,JP_MIN_HALO-ILATS_DIFF_F)
1004
      ELSE
1005
        NROWIDEE=JP_MIN_HALO+ILATS_DIFF_C
1006
      ENDIF
1007
1008
    ENDIF
1009
1010
    RADGRID%NDGSAH=MAX(RADGRID%NDGSAG,&
1011
     & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF
1012
    RADGRID%NDGENH=MIN(RADGRID%NDGENG,&
1013
     & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF
1014
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGSAH       =",I8)')RADGRID%NDGSAH
1015
    WRITE(NULOUT,'("SUECRAD: RADGRID%NDGENH       =",I8)')RADGRID%NDGENH
1016
1017
    IF( NRADINT == 2 .OR. NRADINT == 3 )THEN
1018
1019
      ILBRLATI = MAX(RADGRID%NDGSAG,&
1020
       & RADGRID%NDGSAL+RADGRID%NFRSTLOFF-NROWIDEN)-RADGRID%NFRSTLOFF
1021
      IUBRLATI = MIN(RADGRID%NDGENG,&
1022
       & RADGRID%NDGENL+RADGRID%NFRSTLOFF+NROWIDES)-RADGRID%NFRSTLOFF
1023
      ALLOCATE(RADGRID%RLATI(ILBRLATI:IUBRLATI))
1024
      ALLOCATE(RADGRID%RIPI0(ILBRLATI:IUBRLATI))
1025
      ALLOCATE(RADGRID%RIPI1(ILBRLATI:IUBRLATI))
1026
      ALLOCATE(RADGRID%RIPI2(ILBRLATI:IUBRLATI))
1027
1028
      DO JGL= ILBRLATI,IUBRLATI
1029
        IGLGLO=JGL+RADGRID%NFRSTLOFF
1030
        IF(IGLGLO >= 0.AND.IGLGLO <= RADGRID%NDGLG) THEN
1031
          ZD1=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO)
1032
          ZD2=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+1)
1033
          ZD3=RADGRID%RLATIG(IGLGLO-1)-RADGRID%RLATIG(IGLGLO+2)
1034
          ZD4=RADGRID%RLATIG(IGLGLO  )-RADGRID%RLATIG(IGLGLO+1)
1035
          ZD5=RADGRID%RLATIG(IGLGLO  )-RADGRID%RLATIG(IGLGLO+2)
1036
          ZD6=RADGRID%RLATIG(IGLGLO+1)-RADGRID%RLATIG(IGLGLO+2)
1037
          RADGRID%RIPI0(JGL)=-1.0_JPRB/(ZD1*ZD4*ZD5)
1038
          RADGRID%RIPI1(JGL)= 1.0_JPRB/(ZD2*ZD4*ZD6)
1039
          RADGRID%RIPI2(JGL)=-1.0_JPRB/(ZD3*ZD5*ZD6)
1040
        ENDIF
1041
        RADGRID%RLATI(JGL)=RADGRID%RLATIG(IGLGLO)
1042
      ENDDO
1043
1044
      IF( NPROC > 1 )THEN
1045
        IRIRPTSUR=NGPTOTG
1046
        IRISPTSUR=2*NGPTOTG
1047
      ELSE
1048
        IRIRPTSUR=0
1049
        IRISPTSUR=0
1050
      ENDIF
1051
1052
      ALLOCATE(NRISTA(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1053
      ALLOCATE(NRIONL(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1054
      ALLOCATE(NRIOFF(NDGSAL-NRIWIDEN:NDGENL+NRIWIDES))
1055
      ALLOCATE(NRIEXT(1-NDLON:NDLON+NDLON,1-NRIWIDEN:NDGENL+NRIWIDES))
1056
      ALLOCATE(NRICORE(NGPTOT))
1057
      ALLOCATE(IRISENDPOS(IRISPTSUR))
1058
      ALLOCATE(IRIRECVPOS(IRIRPTSUR))
1059
      ALLOCATE(IRISENDPTR(NPROC+1))
1060
      ALLOCATE(IRIRECVPTR(NPROC+1))
1061
      ALLOCATE(IRICOMM(NPROC))
1062
      ALLOCATE(IRIMAP(4,NDGLG))
1063
! MPL 1.12.08
1064
!     CALL RDCSET('RI',NRIWIDEN,NRIWIDES,NRIWIDEW,NRIWIDEE,&
1065
!      & IRIRPTSUR,IRISPTSUR,&
1066
!      & NDGLG,NDLON,NDGSAG,NDGENG,IDUM,IDUM,NDGSAL,NDGENL,&
1067
!      & NDSUR1,NDLSUR,NDGSUR,NGPTOT,IDUM,&
1068
!      & NPTRFLOFF,NFRSTLOFF,MYFRSTACTLAT,MYLSTACTLAT,&
1069
!      & NSTA,NONL,NLOENG,NPTRFRSTLAT,NFRSTLAT,NLSTLAT,&
1070
!      & RMU,RSQM2,&
1071
!      & NRISTA,NRIONL,NRIOFF,NRIEXT,NRICORE,NARIB1,&
1072
!      & NRIPROCS,NRIMPBUFSZ,NRIRPT,NRISPT,&
1073
!      & IRISENDPOS,IRIRECVPOS,IRISENDPTR,IRIRECVPTR,IRICOMM,IRIMAP,IRIMAPLEN)
1074
      CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE')
1075
      WRITE(NULOUT,'("SUECRAD: NARIB1=",I12)')NARIB1
1076
      ALLOCATE(NRISENDPOS(NRISPT))
1077
      ALLOCATE(NRIRECVPOS(NRIRPT))
1078
      ALLOCATE(NRISENDPTR(NRIPROCS+1))
1079
      ALLOCATE(NRIRECVPTR(NRIPROCS+1))
1080
      ALLOCATE(NRICOMM(NRIPROCS))
1081
      NRISENDPOS(1:NRISPT)=IRISENDPOS(1:NRISPT)
1082
      NRIRECVPOS(1:NRIRPT)=IRIRECVPOS(1:NRIRPT)
1083
      NRISENDPTR(1:NRIPROCS+1)=IRISENDPTR(1:NRIPROCS+1)
1084
      NRIRECVPTR(1:NRIPROCS+1)=IRIRECVPTR(1:NRIPROCS+1)
1085
      NRICOMM(1:NRIPROCS)=IRICOMM(1:NRIPROCS)
1086
      DEALLOCATE(IRISENDPOS)
1087
      DEALLOCATE(IRIRECVPOS)
1088
      DEALLOCATE(IRISENDPTR)
1089
      DEALLOCATE(IRIRECVPTR)
1090
      DEALLOCATE(IRICOMM)
1091
      DEALLOCATE(IRIMAP)
1092
1093
      IF( NPROC > 1 )THEN
1094
        IRORPTSUR=RADGRID%NGPTOTG
1095
        IROSPTSUR=2*RADGRID%NGPTOTG
1096
      ELSE
1097
        IRORPTSUR=0
1098
        IROSPTSUR=0
1099
      ENDIF
1100
1101
      ALLOCATE(NROSTA(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1102
      ALLOCATE(NROONL(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1103
      ALLOCATE(NROOFF(RADGRID%NDGSAL-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1104
      ALLOCATE(NROEXT(1-RADGRID%NDLON:RADGRID%NDLON+RADGRID%NDLON,&
1105
       & 1-NROWIDEN:RADGRID%NDGENL+NROWIDES))
1106
      ALLOCATE(NROCORE(RADGRID%NGPTOT))
1107
      ALLOCATE(IROSENDPOS(IROSPTSUR))
1108
      ALLOCATE(IRORECVPOS(IRORPTSUR))
1109
      ALLOCATE(IROSENDPTR(NPROC+1))
1110
      ALLOCATE(IRORECVPTR(NPROC+1))
1111
      ALLOCATE(IROCOMM(NPROC))
1112
      ALLOCATE(IROMAP(4,RADGRID%NDGLG))
1113
! MPL 1.12.08
1114
!     CALL RDCSET('RO',NROWIDEN,NROWIDES,NROWIDEW,NROWIDEE,&
1115
!      & IRORPTSUR,IROSPTSUR,&
1116
!      & RADGRID%NDGLG,RADGRID%NDLON,RADGRID%NDGSAG,&
1117
!      & RADGRID%NDGENG,IDUM,IDUM,RADGRID%NDGSAL,RADGRID%NDGENL,&
1118
!      & RADGRID%NDSUR1,RADGRID%NDLSUR,RADGRID%NDGSUR,RADGRID%NGPTOT,IDUM,&
1119
!      & RADGRID%NPTRFLOFF,RADGRID%NFRSTLOFF,RADGRID%MYFRSTACTLAT,RADGRID%MYLSTACTLAT,&
1120
!      & RADGRID%NSTA,RADGRID%NONL,RADGRID%NLOENG,RADGRID%NPTRFRSTLAT,&
1121
!      & RADGRID%NFRSTLAT,RADGRID%NLSTLAT,&
1122
!      & RADGRID%RMU,RADGRID%RSQM2,&
1123
!      & NROSTA,NROONL,NROOFF,NROEXT,NROCORE,NAROB1,&
1124
!      & NROPROCS,NROMPBUFSZ,NRORPT,NROSPT,&
1125
!      & IROSENDPOS,IRORECVPOS,IROSENDPTR,IRORECVPTR,IROCOMM,IROMAP,IROMAPLEN)
1126
      CALL ABOR1('JUSTE APRES CALL RDCSET COMMENTE')
1127
      WRITE(NULOUT,'("SUECRAD: NAROB1=",I12)')NAROB1
1128
      ALLOCATE(NROSENDPOS(NROSPT))
1129
      ALLOCATE(NRORECVPOS(NRORPT))
1130
      ALLOCATE(NROSENDPTR(NROPROCS+1))
1131
      ALLOCATE(NRORECVPTR(NROPROCS+1))
1132
      ALLOCATE(NROCOMM(NROPROCS))
1133
      NROSENDPOS(1:NROSPT)=IROSENDPOS(1:NROSPT)
1134
      NRORECVPOS(1:NRORPT)=IRORECVPOS(1:NRORPT)
1135
      NROSENDPTR(1:NROPROCS+1)=IROSENDPTR(1:NROPROCS+1)
1136
      NRORECVPTR(1:NROPROCS+1)=IRORECVPTR(1:NROPROCS+1)
1137
      NROCOMM(1:NROPROCS)=IROCOMM(1:NROPROCS)
1138
      DEALLOCATE(IROSENDPOS)
1139
      DEALLOCATE(IRORECVPOS)
1140
      DEALLOCATE(IROSENDPTR)
1141
      DEALLOCATE(IRORECVPTR)
1142
      DEALLOCATE(IROCOMM)
1143
      DEALLOCATE(IROMAP)
1144
1145
      IF( LLDEBUG )THEN
1146
        WRITE(NULOUT,'("")')
1147
        IRIWIDEMAXN=0
1148
        IRIWIDEMAXS=0
1149
        IRIWIDEMAXW=0
1150
        IRIWIDEMAXE=0
1151
        IROWIDEMAXN=0
1152
        IROWIDEMAXS=0
1153
        IROWIDEMAXW=0
1154
        IROWIDEMAXE=0
1155
        IARIB1MAX=0
1156
        IAROB1MAX=0
1157
        IWIDE(1)=NRIWIDEN
1158
        IWIDE(2)=NRIWIDES
1159
        IWIDE(3)=NRIWIDEW
1160
        IWIDE(4)=NRIWIDEE
1161
        IWIDE(5)=NROWIDEN
1162
        IWIDE(6)=NROWIDES
1163
        IWIDE(7)=NROWIDEW
1164
        IWIDE(8)=NROWIDEE
1165
        IWIDE(9)=NARIB1
1166
        IWIDE(10)=NAROB1
1167
        IF( MYPROC /= 1 )THEN
1168
          stop 'Pas pret pour proc > 1'
1169
!         CALL MPL_SEND(IWIDE(1:10),KDEST=NPRCIDS(1),KTAG=1,CDSTRING='SUECRAD.W')
1170
        ENDIF
1171
        IF( MYPROC == 1 )THEN
1172
          DO JROC=1,NPROC
1173
            IF( JROC /= MYPROC )THEN
1174
              stop 'Pas pret pour proc > 1'
1175
!             CALL MPL_RECV(IWIDE(1:10),KSOURCE=NPRCIDS(JROC),KTAG=1,CDSTRING='SUECRAD.W')
1176
            ENDIF
1177
            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEN=",I3,2X,"NROWIDEN=",I3 )')&
1178
             & JROC,IWIDE(1),IWIDE(5)
1179
            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDES=",I3,2X,"NROWIDES=",I3 )')&
1180
             & JROC,IWIDE(2),IWIDE(6)
1181
            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEW=",I3,2X,"NROWIDEW=",I3 )')&
1182
             & JROC,IWIDE(3),IWIDE(7)
1183
            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NRIWIDEE=",I3,2X,"NROWIDEE=",I3 )')&
1184
             & JROC,IWIDE(4),IWIDE(8)
1185
            WRITE(NULOUT,'("SUECRAD: PROC=",I5,2X,"NARIB1=",I10,2X,"NAROB1=",I10 )')&
1186
             & JROC,IWIDE(9),IWIDE(10)
1187
            WRITE(NULOUT,'("")')
1188
            IF( IWIDE(1) > IRIWIDEMAXN ) IRIWIDEMAXN=IWIDE(1)
1189
            IF( IWIDE(2) > IRIWIDEMAXS ) IRIWIDEMAXS=IWIDE(2)
1190
            IF( IWIDE(3) > IRIWIDEMAXW ) IRIWIDEMAXW=IWIDE(3)
1191
            IF( IWIDE(4) > IRIWIDEMAXE ) IRIWIDEMAXE=IWIDE(4)
1192
            IF( IWIDE(5) > IROWIDEMAXN ) IROWIDEMAXN=IWIDE(5)
1193
            IF( IWIDE(6) > IROWIDEMAXS ) IROWIDEMAXS=IWIDE(6)
1194
            IF( IWIDE(7) > IROWIDEMAXW ) IROWIDEMAXW=IWIDE(7)
1195
            IF( IWIDE(8) > IROWIDEMAXE ) IROWIDEMAXE=IWIDE(8)
1196
            IF( IWIDE(9)  > IARIB1MAX  ) IARIB1MAX  =IWIDE(9)
1197
            IF( IWIDE(10) > IAROB1MAX  ) IAROB1MAX  =IWIDE(10)
1198
          ENDDO
1199
          WRITE(NULOUT,'("")')
1200
          WRITE(NULOUT,'("SUECRAD: NRIWIDEN(MAX)  =",I8)')IRIWIDEMAXN
1201
          WRITE(NULOUT,'("SUECRAD: NRIWIDES(MAX)  =",I8)')IRIWIDEMAXS
1202
          WRITE(NULOUT,'("SUECRAD: NRIWIDEW(MAX)  =",I8)')IRIWIDEMAXW
1203
          WRITE(NULOUT,'("SUECRAD: NRIWIDEE(MAX)  =",I8)')IRIWIDEMAXE
1204
          WRITE(NULOUT,'("SUECRAD: NROWIDEN(MAX)  =",I8)')IROWIDEMAXN
1205
          WRITE(NULOUT,'("SUECRAD: NROWIDES(MAX)  =",I8)')IROWIDEMAXS
1206
          WRITE(NULOUT,'("SUECRAD: NROWIDEW(MAX)  =",I8)')IROWIDEMAXW
1207
          WRITE(NULOUT,'("SUECRAD: NROWIDEE(MAX)  =",I8)')IROWIDEMAXE
1208
          WRITE(NULOUT,'("SUECRAD: NARIB1(MAX)    =",I10)')IARIB1MAX
1209
          WRITE(NULOUT,'("SUECRAD: NAROB1(MAX)    =",I10)')IAROB1MAX
1210
          WRITE(NULOUT,'("")')
1211
        ENDIF
1212
        CALL FLUSH(NULOUT)
1213
      ENDIF
1214
1215
    ENDIF
1216
!    CALL GSTATS(1818,1)      MPL 2.12.08
1217
1218
  ELSE
1219
1220
    WRITE(NULOUT,'("SUECRAD: INVALID VALUE FOR NRADINT=",I6)')NRADINT
1221
    CALL ABOR1('SUECRAD: NRADINT INVALID')
1222
1223
  ENDIF
1224
1225
ENDIF              ! END OF LERADI BLOCK
1226
1227
!      ----------------------------------------------------------------
1228
1229
!*       4.    INITIALIZE RADIATION COEFFICIENTS.
1230
!              ----------------------------------
1231
1232
1
RCDAY   = RDAY * RG / RCPD
1233
1
DIFF   = 1.66_JPRB
1234
1
R10E   = 0.4342945_JPRB
1235
1236
! CALL GSTATS(1818,0)    MPL 2.12.08
1237
1
CALL SURDI
1238
1239
1
IF (NINHOM == 0) THEN
1240
  RLWINHF=1._JPRB
1241
  RSWINHF=1._JPRB
1242
ENDIF
1243
1244
!      ----------------------------------------------------------------
1245
1246
!*       5.    INITIALIZE RADIATION ABSORPTION COEFFICIENTS
1247
!              --------------------------------------------
1248
1249
!*       5.1.  Initialization routine for RRTM
1250
!              -------------------------------
1251
1252
1
CALL SURRTAB
1253
1
CALL SURRTPK
1254
1
CALL SURRTRF
1255
1
CALL SURRTFTR
1256
1257
1
IF (LRRTM) THEN
1258
1
  IF (KLEV > JPLAY) THEN
1259
    WRITE(UNIT=KULOUT,&
1260
     & FMT='('' RRTM MAXIMUM NUMBER OF LAYERS IS REACHED'',&
1261
     & '' CALL ABORT'')')
1262
    CALL ABOR1(' ABOR1 CALLED SUECRAD')
1263
  ENDIF
1264
1265
! Read the absorption coefficient data and reduce from 256 to 140 g-points
1266
1267
1
  CALL RRTM_INIT_140GP
1268
1269
1
  INBLW=16
1270
1271
ELSE
1272
  INBLW=6
1273
1274
ENDIF
1275
1276
1
CALL SULWN
1277
1
CALL SUSWN   (NTSW, NSW)
1278
1
CALL SUCLOPN (NTSW, NSW, KLEV)
1279
1280
!-- routines specific to SRTM
1281
1
IF (LSRTM) THEN
1282
  NTSW=14
1283
  ISW =14
1284
  CALL SRTM_INIT
1285
  CALL SUSRTAER
1286
  CALL SUSRTCOP
1287
  WRITE(UNIT=KULOUT,FMT='(''SRTM Configuration'',L8,3I4)')LSRTM,NTSW,ISW,JPGPT
1288
1289
ELSE
1290

1
  IF (.NOT.LONEWSW .OR. ((NSW /= 2).AND.(NSW /= 4).AND.(NSW /= 6)) ) THEN
1291
    WRITE(UNIT=KULOUT,FMT='(''Wrong SW Configuration'',L8,I3)')LONEWSW,NSW
1292
  ENDIF
1293
1294
1
  CALL SUSWN   (NTSW,NSW)
1295
1
  CALL SUAERSN (NTSW,NSW)
1296
ENDIF
1297
1
WRITE(UNIT=KULOUT,FMT='('' NLW,NTSW,NSW SET EQUAL TO:'',3I3)') INBLW,NTSW,NSW
1298
1299
1300
!-- routine specific to the UV processor
1301
1
IF (LUVPROC) THEN
1302
  NUVTIM = NUVTIM * 86400
1303
  CALL SU_UVRAD ( NUV )
1304
ENDIF
1305
1306
!      ----------------------------------------------------------------
1307
1308
!*       6.    INITIALIZE AEROSOL OPTICAL PARAMETERS AND DISTRIBUTION
1309
!              ------------------------------------------------------
1310
1311
!- LW optical properties
1312
1
CALL SUAERL
1313
!- SW optical properties moved above
1314
!CALL SUAERSN (NTSW,NSW)
1315
1316
!- horizontal distribution
1317
1
CALL SUAERH
1318
1319
!- vertical distribution
1320
CALL SUAERV ( KLEV  , PETAH,&
1321
 & CVDAES , CVDAEL , CVDAEU , CVDAED,&
1322
 & RCTRBGA, RCVOBGA, RCSTBGA, RCAEOPS, RCAEOPL, RCAEOPU,&
1323
 & RCAEOPD, RCTRPT , RCAEADK, RCAEADM, RCAEROS &
1324
1
 & )
1325
1326
!-- Overlap function (only used if NOVLP=4)
1327
! Appel supprime par MPL (30042010) car NOVLP=4 pas utilise
1328
! sinon il faudrait calculer le geopotentiel STZ
1329
!CALL SUOVLP ( KLEV )
1330
1331
!-- parameters for prognostic aerosols
1332
1
CALL SU_AERW
1333
1334
!      ----------------------------------------------------------------
1335
1336
!*       7.    INITIALIZE SATELLITE GEOMETRICAL/RADIOMETRIC PARAMETERS
1337
!              -------------------------------------------------------
1338
1339

1
IF (LEPHYS .AND. NMODE > 1) THEN
1340
  CALL SUSAT
1341
ENDIF
1342
!CALL GSTATS(1818,1)   MPL 2.12.08
1343
1344
!      ----------------------------------------------------------------
1345
1346
!*       8.    INITIALIZE CLIMATOLOGICAL OZONE DISTRIBUTION
1347
!              --------------------------------------------
1348
!                  (not done here!!!  called from APLPAR as it depends
1349
!                     on model pressure levels!)
1350
1351
!      ----------------------------------------------------------------
1352
1353
!*       9.    SET UP MODEL CONFIGURATION FOR TIME-SPACE INTERPOLATION
1354
!              -------------------------------------------------------
1355
1356
1
ZTSTEP=MAX(TSTEP,1.0_JPRB)
1357
1
ZSTPHR=3600._JPRB/ZTSTEP
1358
1
IRADFR=NRADFR
1359
1
IF(NRADFR < 0) THEN
1360
1
  NRADFR=-NRADFR*ZSTPHR+0.5_JPRB
1361
ENDIF
1362
1
NRADPFR=NRADPFR*NRADFR
1363

1
IF (MOD(NRADPLA,2) == 0.AND. NRADPLA /= 0) THEN
1364
  NRADPLA=NRADPLA+1
1365
ENDIF
1366
1367
1
IF(NRADUV < 0) THEN
1368
1
  NRADUV=-NRADUV*ZSTPHR+0.5_JPRB
1369
ENDIF
1370
1371
1
IST1HR=ZSTPHR+0.05_JPRB
1372
1
ISTNHR=  NLNGR1H *ZSTPHR+0.05_JPRB
1373
1
IF (MOD(3600._JPRB,ZTSTEP) > 0.1_JPRB) THEN
1374
  801 CONTINUE
1375
  IST1HR=IST1HR+1
1376
  IF (MOD(ISTNHR,IST1HR) /= 0) GO TO 801
1377
ENDIF
1378
1
IF (NRADFR == 1) THEN
1379
  NRADSFR=NRADFR
1380
ELSE
1381
1
  NRADSFR=IST1HR
1382
ENDIF
1383
1
NRADNFR=NRADFR
1384
1385
1
IF(LRAYFM) THEN
1386
  NRPROMA=NDLON+6+(1-MOD(NDLON,2))
1387
ENDIF
1388
1389
!      ----------------------------------------------------------------
1390
1391
!*       10.    ALLOCATE WORK ARRAYS
1392
!               --------------------
1393
1394
1
IU = NULOUT
1395

1
LLP = NPRINTLEV >= 1.OR. LALLOPR
1396
1397
1
IF (LEPHYS) THEN
1398
  ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS))
1399
  IF(LLP)WRITE(IU,9) 'EMTD     ',SIZE(EMTD     ),SHAPE(EMTD     )
1400
  ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS))
1401
  IF(LLP)WRITE(IU,9) 'TRSW     ',SIZE(TRSW     ),SHAPE(TRSW     )
1402
  ALLOCATE(EMTC(NPROMA,NFLEVG+1,NGPBLKS))
1403
  IF(LLP)WRITE(IU,9) 'EMTC     ',SIZE(EMTC     ),SHAPE(EMTC     )
1404
  ALLOCATE(TRSC(NPROMA,NFLEVG+1,NGPBLKS))
1405
  IF(LLP)WRITE(IU,9) 'TRSC     ',SIZE(TRSC     ),SHAPE(TRSC     )
1406
  ALLOCATE(SRSWD(NPROMA,NGPBLKS))
1407
  IF(LLP)WRITE(IU,9) 'SRSWD    ',SIZE(SRSWD    ),SHAPE(SRSWD    )
1408
  ALLOCATE(SRLWD(NPROMA,NGPBLKS))
1409
  IF(LLP)WRITE(IU,9) 'SRLWD    ',SIZE(SRLWD    ),SHAPE(SRLWD    )
1410
  ALLOCATE(SRSWDCS(NPROMA,NGPBLKS))
1411
  IF(LLP)WRITE(IU,9) 'SRSWDCS  ',SIZE(SRSWDCS  ),SHAPE(SRSWDCS  )
1412
  ALLOCATE(SRLWDCS(NPROMA,NGPBLKS))
1413
  IF(LLP)WRITE(IU,9) 'SRLWDCS  ',SIZE(SRLWDCS  ),SHAPE(SRLWDCS  )
1414
  ALLOCATE(SRSWDV(NPROMA,NGPBLKS))
1415
  IF(LLP)WRITE(IU,9) 'SRSWDV   ',SIZE(SRSWDV   ),SHAPE(SRSWDV   )
1416
  ALLOCATE(SRSWDUV(NPROMA,NGPBLKS))
1417
  IF(LLP)WRITE(IU,9) 'SRSWDUV  ',SIZE(SRSWDUV  ),SHAPE(SRSWDUV  )
1418
  ALLOCATE(EDRO(NPROMA,NGPBLKS))
1419
  IF(LLP)WRITE(IU,9) 'EDRO     ',SIZE(EDRO     ),SHAPE(EDRO     )
1420
  ALLOCATE(SRSWPAR(NPROMA,NGPBLKS))
1421
  IF(LLP)WRITE(IU,9) 'SRSWPAR  ',SIZE(SRSWPAR  ),SHAPE(SRSWPAR  )
1422
  ALLOCATE(SRSWUVB(NPROMA,NGPBLKS))
1423
  IF(LLP)WRITE(IU,9) 'SRSWUVB  ',SIZE(SRSWUVB  ),SHAPE(SRSWUVB  )
1424
1425

1
ELSEIF(LMPHYS .AND. (LRAYFM.OR.LRAYFM15)) THEN
1426
  ALLOCATE(EMTD(NPROMA,NFLEVG+1,NGPBLKS))
1427
  IF(LLP)WRITE(IU,9) 'EMTD     ',SIZE(EMTD     ),SHAPE(EMTD     )
1428
  ALLOCATE(TRSW(NPROMA,NFLEVG+1,NGPBLKS))
1429
  IF(LLP)WRITE(IU,9) 'TRSW     ',SIZE(TRSW     ),SHAPE(TRSW     )
1430
  ALLOCATE(EMTU(NPROMA,NFLEVG+1,NGPBLKS))
1431
  IF(LLP)WRITE(IU,9) 'EMTC     ',SIZE(EMTU     ),SHAPE(EMTU     )
1432
  ALLOCATE(RMOON(NPROMA,NGPBLKS))
1433
  IF(LLP)WRITE(IU,9) 'RMOON    ',SIZE(RMOON    ),SHAPE(RMOON    )
1434
ENDIF
1435


2
ALLOCATE(SRSWPARC(NPROMA,NGPBLKS))
1436

1
IF(LLP)WRITE(IU,9) 'SRSWPARC ',SIZE(SRSWPARC ),SHAPE(SRSWPARC )
1437


2
ALLOCATE(SRSWTINC(NPROMA,NGPBLKS))
1438

1
IF(LLP)WRITE(IU,9) 'SRSWTINC ',SIZE(SRSWTINC ),SHAPE(SRSWTINC )
1439
1440
9 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8)
1441
1442
!      ----------------------------------------------------------------
1443
1444
!*       10.    PRINT FINAL VALUES.
1445
!               -------------------
1446
1447
1
IF (LOUTPUT) THEN
1448
  WRITE(UNIT=KULOUT,FMT='('' COMMON YOERAD '')')
1449
  WRITE(UNIT=KULOUT,FMT='('' LERADI  = '',L5 &
1450
   & ,'' LERAD1H = '',L5,'' LECO2VAR= '',L5,'' LHGHG = '',L5 &
1451
   & ,'' NLNGR1H = '',I2,'' NRADSFR = '',I2)')&
1452
   & LERADI,LERAD1H,LECO2VAR,LHGHG,NLNGR1H,NRADSFR
1453
  WRITE(UNIT=KULOUT,FMT='('' LEPO3RA  = '',L5,'' YO3%LGP = '',L5 )') LEPO3RA,YO3%LGP
1454
  WRITE(UNIT=KULOUT,FMT='('' NRADFR  = '',I2 &
1455
   & ,'' NRADPFR = '',I3 &
1456
   & ,'' NRADPLA = '',I2 &
1457
   & ,'' NRINT   = '',I1 &
1458
   & ,'' NRPROMA = '',I5 &
1459
   & )')&
1460
   & NRADFR,NRADPFR,NRADPLA,NRINT, NRPROMA
1461
  WRITE(UNIT=KULOUT,FMT='('' LERADHS= '',L5 &
1462
   & ,'' LRRTM = '',L5 &
1463
   & ,'' LSRTM = '',L5 &
1464
   & ,'' NMODE = '',I1 &
1465
   & ,'' NOZOCL= '',I1 &
1466
   & ,'' NAER  = '',I1 &
1467
   & ,'' NHINCSOL='',I2 &
1468
   & )')&
1469
   & LERADHS,LRRTM,LSRTM,NMODE,NOZOCL,NAER,NHINCSOL
1470
  IF (.NOT.LHGHG .AND. .NOT.LECO2VAR) WRITE(UNIT=KULOUT,FMT='('' RCCO2= '',E10.3 &
1471
    &,'' RCCH4= '',E10.3,'' RCN2O= '',E10.3,'' RCCFC11= '',E10.3,'' RCFC12= '',E10.3 &
1472
    &)')&
1473
    & RCCO2,RCCH4,RCN2O,RCCFC11,RCCFC12
1474
  WRITE(UNIT=KULOUT,FMT='('' NINHOM = '',I1 &
1475
   & ,'' NLAYINH='',I1   &
1476
   & ,'' RLWINHF='',F4.2 &
1477
   & ,'' RSWINHF='',F4.2 &
1478
   & )')&
1479
   & NINHOM,NLAYINH,RLWINHF,RSWINHF
1480
  IF (NPERTAER /= 0 .OR. NPERTOZ /= 0) THEN
1481
    WRITE(UNIT=KULOUT,FMT='('' NPERTAER= '',I2 &
1482
   & ,'' LNOTROAER='',L5 &
1483
   & ,'' NPERTOZ = '',I1 &
1484
   & ,'' RPERTOZ = '',F5.0 &
1485
   & )')&
1486
   & NPERTAER,LNOTROAER,NPERTOZ,RPERTOZ
1487
  ENDIF
1488
  WRITE(UNIT=KULOUT,FMT='('' NRADINT = '',I2)')NRADINT
1489
  WRITE(UNIT=KULOUT,FMT='('' NRADRES = '',I4)')NRADRES
1490
  WRITE(UNIT=KULOUT,FMT='('' LRADONDEM = '',L5)')LRADONDEM
1491
  IF( NRADINT > 0 )THEN
1492
    IDIR=LEN_TRIM(CRTABLEDIR)
1493
    IFIL=LEN_TRIM(CRTABLEFIL)
1494
    WRITE(UNIT=KULOUT,FMT='('' CRTABLEDIR = '',A,'' CRTABLEFIL = '',A)')&
1495
     & CRTABLEDIR(1:IDIR),CRTABLEFIL(1:IFIL)
1496
  ENDIF
1497
  WRITE(UNIT=KULOUT,FMT='('' LCCNL = '',L5 &
1498
   & ,'' LCCNO = '',L5 &
1499
   & ,'' RCCNLND= '',F5.0 &
1500
   & ,'' RCCNSEA= '',F5.0 &
1501
   & ,'' LE4ALB = '',L5 &
1502
   &)')&
1503
   & LCCNL,LCCNO,RCCNLND,RCCNSEA,LE4ALB
1504
  IF (LHVOLCA) THEN
1505
    WRITE(UNIT=KULOUT,FMT='('' HISTORY OF VOLCANIC AEROSOLS= '',L5)')LHVOLCA
1506
  ENDIF
1507
  WRITE(UNIT=KULOUT,FMT='('' LONEWSW= '',L5 &
1508
   & ,'' NRADIP = '',I1 &
1509
   & ,'' NRADLP = '',I1 &
1510
   & ,'' NICEOPT= '',I1 &
1511
   & ,'' NLIQOPT= '',I1 &
1512
   & ,'' LDIFFC = '',L5 &
1513
   & )')&
1514
   & LONEWSW,NRADIP,NRADLP,NICEOPT,NLIQOPT,LDIFFC
1515
  WRITE(UNIT=KULOUT,FMT='('' WARNING! CLOUD OVERLAP ASSUMPT. IS''&
1516
   & ,'' NOVLP   = '',I2 &
1517
   & )')&
1518
   & NOVLP
1519
  IF (LUVPROC) THEN
1520
    IDAYUV=NUVTIM/86400
1521
    WRITE(UNIT=KULOUT,FMT='('' LUVPROC = '',L5 &
1522
   & ,'' LUVTDEP= '',L5 &
1523
   & ,'' NRADUV = '',I2 &
1524
   & ,'' NUV = '',I2 &
1525
   & ,'' NDAYUV = '',I5 &
1526
   & ,'' RMUZUV = '',E9.3 &
1527
   & )')&
1528
   & LUVPROC,LUVTDEP,NRADUV,NUV,IDAYUV,RMUZUV
1529
    WRITE(UNIT=KULOUT,FMT='('' RUVLAM = '',24F6.1)') (RUVLAM(JUV),JUV=1,NUV)
1530
    WRITE(UNIT=KULOUT,FMT='('' JUVLAM = '',24(3X,I1,2X))') (JUVLAM(JUV),JUV=1,NUV)
1531
  ENDIF
1532
  WRITE(UNIT=KULOUT,FMT='('' NMCICA= '',I2 &
1533
   & )')&
1534
   & NMCICA
1535
ENDIF
1536
1537
!     ------------------------------------------------------------------
1538
1539
1540
1
IF (LHOOK) CALL DR_HOOK('SUECRAD',1,ZHOOK_HANDLE)
1541
1
END SUBROUTINE SUECRAD