source: LMDZ6/branches/Optimisation_LMDZ/libf/phymar/radlsw.F90 @ 5428

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

Inclusion de la physique de MAR


Integration of MAR physics

File size: 47.8 KB
Line 
1SUBROUTINE RADLSW &
2      &( KIDIA, KFDIA , KLON , KTDIA, KLEV  , KMODE, KAER, KBOX, NBOX &
3      &, NDUMP, KLWRAD &
4      &, PRII0 &
5      &, PAER , PALBD , PALBP, PAPH , PAP &
6      &, PCCO2, PFRCL , PDP  , PEMIS, PEMIW , PLSM , PMU0, POZON &
7      &, PQ   , PQIWP , PQLWP, PSQIW, PSQLW , PQS  , PQRAIN, PRAINT &
8      &, PRLVRI,PRLVRL, PTH  , PT   , PTS   , PNBAS, PNTOP &
9      &, PEMIT, PFCT  , PFLT , PFCS , PFLS  , PFRSOD, PSUDU, PUVDF, PPARF &
10      &, PFDCT, PFUCT , PFDLT, PFULT, PFDCS , PFUCS , PFDLS, PFULS &
11      &, ZTAU , ZTAUINT &
12      &, ASWBOX, OLRBOX, SLWBOX, SSWBOX, TAUBOX, PCLBX &
13! #DB &, k2iii, k2jjj &
14      &)
15
16!**** *RADLSW* - INTERFACE TO ECMWF LW AND SW RADIATION SCHEMES
17
18!     PURPOSE.
19!     --------
20!           CONTROLS RADIATION COMPUTATIONS
21
22!**   INTERFACE.
23!     ----------
24
25!        EXPLICIT ARGUMENTS :
26!        --------------------
27! PAER   : (KLON,6,KLEV)     ; OPTICAL THICKNESS OF THE AEROSOLS
28! PALBD  : (KLON,NSW)        ; SURF. SW ALBEDO FOR DIFFUSE RADIATION
29! PALBP  : (KLON,NSW)        ; SURF. SW ALBEDO FOR PARALLEL RADIATION
30! PAPH   : (KLON,KLEV+1)     ; HALF LEVEL PRESSURE
31! PAP    : (KLON,KLEV)       ; FULL LEVEL PRESSURE
32! PCCO2  :                   ; CONCENTRATION IN CO2 (PA/PA)
33! PFRCL  : (KLON,KLEV)       ; CLOUD FRACTIONAL COVER
34! PDP    : (KLON,KLEV)       ; LAYER PRESSURE THICKNESS
35! PEMIS  : (KLON)            ; SURFACE LW EMISSIVITY
36! PEMIW  : (KLON)            ; SURFACE LW WINDOW EMISSIVITY
37! PLSM   : (KLON)            ; LAND-SEA MASK
38! PMU0   : (KLON)            ; SOLAR ANGLE
39! PNBAS  : (KLON)            ; INDEX OF BASE OF CONVECTIVE LAYER
40! PNTOP  : (KLON)            ; INDEX OF TOP OF CONVECTIVE LAYER
41! POZON  : (KLON,KLEV)       ; CONCENTRATION IN OZONE (PA/PA)
42! PQ     : (KLON,KLEV)       ; SPECIFIC HUMIDITY PA/PA
43! PQIWP  : (KLON,KLEV)       ; SOLID  WATER KG/KG
44! PQLWP  : (KLON,KLEV)       ; LIQUID WATER KG/KG
45! PQS    : (KLON,KLEV)       ; SATURATION WATER VAPOR  KG/KG
46! PQRAIN : (KLON,KLEV)       ; RAIN WATER KG/KG
47! PRAINT : (KLON,KLEV)       ; RAIN RATE (m/s)
48! PRLVRI : (KLON,KLEV)       ; RELATIVE VARIANCE OF ICE WATER
49! PRLVRL : (KLON,KLEV)       ; RELATIVE VARIANCE OF LIQUID WATER
50! PTH    : (KLON,KLEV+1)     ; HALF LEVEL TEMPERATURE
51! PT     : (KLON,KLEV)       ; FULL LEVEL TEMPERATURE
52! PTS    : (KLON)            ; SURFACE TEMPERATURE
53!     ==== OUTPUTS ===
54! PFCT   : (KLON,KLEV+1)     ; CLEAR-SKY LW NET FLUXES
55! PFLT   : (KLON,KLEV+1)     ; TOTAL LW NET FLUXES
56! PFCS   : (KLON,KLEV+1)     ; CLEAR-SKY SW NET FLUXES
57! PFLS   : (KLON,KLEV+1)     ; TOTAL SW NET FLUXES
58! PFRSOD : (KLON)            ; TOTAL-SKY SURFACE SW DOWNWARD FLUX
59! PEMIT  : (KLON)            ; SURFACE TOTAL LONGWAVE EMISSIVITY
60! PSUDU  : (KLON)            ; SOLAR RADIANCE IN SUN'S DIRECTION
61! PUVDF  : (KLON)            ; SURFACE DOWNWARD U.V. RADIATION
62! PPARF  : (KLON)            ; PHOTOSYNTHETICALLY ACTIVE RADIATION
63
64!        IMPLICIT ARGUMENTS :   NONE
65!        --------------------
66
67!     METHOD.
68!     -------
69!        SEE DOCUMENTATION
70
71!     EXTERNALS.
72!     ----------
73
74!     REFERENCE.
75!     ----------
76!        ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
77
78!     AUTHORS.
79!     --------
80!        J.-J. MORCRETTE         *ECMWF*
81
82!     MODIFICATIONS.
83!     --------------
84!        ORIGINAL : 88-02-04
85!        J.-J. MORCRETTE 94-11-15 DIRECT/DIFFUSE SURFACE ALBEDO
86!        08/96: J.-J. Morcrette/Ph. Dandin: tests of eff. radius param.
87!        9909 : JJMorcrette effect.radius + inhomogeneity factors
88!        JJMorcrette 990128 : sunshine duration
89!        JJMorcrette : 990831 RRTM-140gp
90!-----------------------------------------------------------------------
91
92#include "tsmbkind.h"
93
94!USE YOMCT3   , ONLY : NSTEP
95USE YOMCST   , ONLY : RG       ,RD       ,RTT      ,RPI
96USE YOERAD   , ONLY : NSW      ,LRRTM    ,LINHOM, &
97            &LOIFUEC, LTEMPDS, LOWASYF, LOWHSSS, NRADIP, NRADLP, &
98            &NICEOPT, NLIQOPT, NOVLP  , NHOWINH, RMINICE
99USE YOELW    , ONLY : NSIL     ,NTRA     ,NUA      ,TSTAND   ,XP
100USE YOESW    , ONLY : RYFWCA   ,RYFWCB   ,RYFWCC   ,RYFWCD   ,&
101            &RYFWCE   ,RYFWCF   ,REBCUA   ,REBCUB   ,REBCUC   ,&
102            &REBCUD   ,REBCUE   ,REBCUF   ,REBCUI   ,REBCUJ   ,&
103            &REBCUG   ,REBCUH   ,RHSAVI   ,RFULIO   ,RFLAA0   ,&
104            &RFLAA1   ,RFLBB0   ,RFLBB1   ,RFLBB2   ,RFLBB3   ,&
105            &RFLCC0   ,RFLCC1   ,RFLCC2   ,RFLCC3   ,RFLDD0   ,&
106            &RFLDD1   ,RFLDD2   ,RFLDD3   ,RFUAA0   ,RFUAA1   ,&
107            &RFUBB0   ,RFUBB1   ,RFUBB2   ,RFUBB3   ,RFUCC0   ,&
108            &RFUCC1   ,RFUCC2   ,RFUCC3   ,RFUETA   ,RASWCA   ,&
109            &RASWCB   ,RASWCC   ,RASWCD   ,RASWCE   ,RASWCF   ,&
110            &RLINLI
111USE YOERDU   , ONLY : NUAER    ,NTRAER   ,REPLOG   ,REPSC    ,DIFF
112USE YOERDI   , ONLY : REPCLC
113USE YOETHF   , ONLY : RTICE
114USE YOEPHLI  , ONLY : LPHYLIN
115USE YOERRTWN , ONLY : NG        ,NSPA      ,NSPB      ,WAVENUM1  ,&
116           &WAVENUM2  ,DELWAVE   ,TOTPLNK   ,TOTPLK16
117USE YOEDBUG  , ONLY : LDEBUG
118
119
120IMPLICIT NONE
121
122
123!     DUMMY INTEGER SCALARS
124INTEGER_M :: KAER
125INTEGER_M :: KFDIA
126INTEGER_M :: KIDIA
127INTEGER_M :: KLEV
128INTEGER_M :: KLON
129INTEGER_M :: KMODE
130INTEGER_M :: KTDIA
131INTEGER_M :: KBOX
132INTEGER_M :: NBOX
133INTEGER_M :: NDUMP, KLWRAD
134
135!     DUMMY REAL SCALARS
136REAL_B :: PRII0
137
138
139
140!     -----------------------------------------------------------------
141
142!*       0.1   ARGUMENTS.
143!              ----------
144REAL_B :: PALBD(KLON,NSW) , PALBP(KLON,NSW)
145REAL_B :: PEMIS(KLON)     , PEMIW(KLON)
146REAL_B :: PLSM(KLON)      , PMU0(KLON)
147REAL_B :: PCCO2           , POZON(KLON,KLEV)
148REAL_B :: PTS(KLON)       , PNBAS(KLON)     , PNTOP(KLON)
149REAL_B :: PT (KLON,KLEV)  , PAP (KLON,KLEV)
150REAL_B :: PTH(KLON,KLEV+1), PAPH(KLON,KLEV+1)
151REAL_B :: PDP(KLON,KLEV)
152REAL_B :: PQ (KLON,KLEV)  , PQS(KLON,KLEV)
153REAL_B :: PQIWP(KLON,KLEV), PQLWP(KLON,KLEV), PQRAIN(KLON,KLEV)
154REAL_B :: PRAINT(KLON,KLEV)
155REAL_B :: PRLVRI(KLON,KLEV),PRLVRL(KLON,KLEV)
156REAL_B :: PSQIW(KLON,KLEV), PSQLW(KLON,KLEV)
157REAL_B :: PFRCL(KLON,KLEV), PCLFR(KLON,KLEV), PCLBX(KLON,100,KLEV)
158REAL_B :: PAER (KLON,6,KLEV)
159
160! #DB integer :: k2iii(KLON),k2jjj(KLON),kio,kjo
161
162!     ==== COMPUTED IN RADLSW ===
163REAL_B :: PFCS(KLON,KLEV+1), PFCT(KLON,KLEV+1)
164REAL_B :: PFLS(KLON,KLEV+1), PFLT(KLON,KLEV+1)
165REAL_B :: PFRSOD(KLON)     , PEMIT(KLON)
166REAL_B :: PSUDU(KLON)      , PUVDF(KLON)        , PPARF(KLON)
167REAL_B :: PFDCT(KLON,KLEV+1), PFUCT(KLON,KLEV+1)
168REAL_B :: PFDLT(KLON,KLEV+1), PFULT(KLON,KLEV+1)
169REAL_B :: PFDCS(KLON,KLEV+1), PFUCS(KLON,KLEV+1)
170REAL_B :: PFDLS(KLON,KLEV+1), PFULS(KLON,KLEV+1)
171
172REAL_B :: ASWBOX(KLON, 100), OLRBOX(KLON, 100)
173REAL_B :: SLWBOX(KLON, 100), SSWBOX(KLON, 100), TAUBOX(KLON, 100)
174
175!     -----------------------------------------------------------------
176
177!*       0.2   LOCAL ARRAYS.
178!              -------------
179!     -----------------------------------------------------------------
180
181!-- ARRAYS FOR LOCAL VARIABLES -----------------------------------------
182
183INTEGER_M :: IBAS(KLON)     , ITOP(KLON)
184
185! #DB integer :: jkjllw, jkjlsw, JAERmin, JAERmax, jTAUCLDmin, jTAUCLDmax
186! #DB real :: PAERmin, PAERmax, TAUCLDmin, TAUCLDmax
187
188REAL_B ::&
189    &ZALBD(KLON,NSW)    , ZALBP(KLON,NSW)&
190  &, ZCG(KLON,NSW,KLEV) , ZOMEGA(KLON,NSW,KLEV)&
191  &, ZTAU (KLON,NSW,KLEV) &
192  &, ZTAUCLD(KLON,KLEV,16), ZTCLEAR(KLON)
193REAL_B ::&
194    &ZCLDLD(KLON,KLEV)  , ZCLDLU(KLON,KLEV)&
195  &, ZCLDSW(KLON,KLEV)  , ZCLD0(KLON,KLEV)&
196  &, ZDT0(KLON)        &
197  &, ZEMIS(KLON)        , ZEMIW(KLON)&
198  &, ZFLUX (KLON,2,KLEV+1)                 , ZFLUC(KLON,2,KLEV+1)&
199  &, ZFIWP(KLON)        , ZFLWP(KLON)      , ZFRWP(KLON)&
200  &, ZIWC(KLON)         , ZLWC(KLON)&
201  &, ZBICFU(KLON)       , ZKICFU1(KLON)    , ZKICFU2(KLON)&
202!cc            , ZRWC(KLON)
203  &, ZMU0(KLON)         , ZOZ(KLON,KLEV)   , ZOZN(KLON,KLEV)&
204  &, ZOZON(KLON,KLEV)   , ZPMB(KLON,KLEV+1), ZPSOL(KLON)&
205  &, ZTAVE (KLON,KLEV)  , ZTL(KLON,KLEV+1)&
206  &, ZVIEW(KLON)
207REAL_B ::&
208    &ZFCDWN(KLON,KLEV+1), ZFCUP(KLON,KLEV+1)&
209  &, ZFSDWN(KLON,KLEV+1), ZFSUP(KLON,KLEV+1)&
210  &, ZFSUPN(KLON)       , ZFSUPV(KLON)&
211  &, ZFCUPN(KLON)       , ZFCUPV(KLON)&
212  &, ZFSDNN(KLON)       , ZFSDNV(KLON)&
213  &, ZFCDNN(KLON)       , ZFCDNV(KLON)&
214  &, ZCOOLR(KLON,KLEV)  , ZCOOLC(KLON,KLEV)&
215  &, ZHEATR(KLON,KLEV)  , ZHEATC(KLON,KLEV)
216REAL_B ::&
217    &ZALFICE(KLON)      , ZGAMICE(KLON)     , ZBICE(KLON),  ZDESR(KLON) &
218  &, ZRADIP(KLON)       , ZRADLP(KLON)      , ZCFUDG(KLON)&
219!cc           , ZRADRD(KLON)
220  &, ZRAINT(KLON)       , ZRES(KLON)&
221  &, ZTICE(KLON)        , ZEMIT(KLON)       , ZTAUINT(KLON)
222REAL_B :: ZSUDU(KLON)   , ZUVDF(KLON)       , ZPARF(KLON),  ZCOL(KLON) &
223  &, ZTCC(KLON)         , ZTCA(KLON)
224
225!-- box-type arrays
226
227REAL_B :: CPFCS(KLON,KLEV+1) , CPFCT(KLON,KLEV+1)
228REAL_B :: CPFLS(KLON,KLEV+1) , CPFLT(KLON,KLEV+1)
229REAL_B :: CPFRSOD(KLON)      , CPEMIT(KLON)
230REAL_B :: CPSUDU(KLON)       , CPUVDF(KLON)       , CPPARF(KLON)
231REAL_B :: CPFDCT(KLON,KLEV+1), CPFUCT(KLON,KLEV+1)
232REAL_B :: CPFDLT(KLON,KLEV+1), CPFULT(KLON,KLEV+1)
233REAL_B :: CPFDCS(KLON,KLEV+1), CPFUCS(KLON,KLEV+1)
234REAL_B :: CPFDLS(KLON,KLEV+1), CPFULS(KLON,KLEV+1)
235
236!     LOCAL INTEGER SCALARS
237INTEGER_M :: IKL, JAE, JK, JKL, JKLP1, JKP1, JL, JNU, JRTM, JSW &
238  &, NBOXL, ICBOX, IMOV, INDLAY
239
240!     LOCAL LOGICAL SCALARS
241LOGICAL :: LLINTRP
242
243!     LOCAL REAL SCALARS
244REAL_B :: ZASYMX, ZDIFFD, ZGI, ZGL, ZGR, ZIWGKG, ZLWGKG,&
245          &ZMSAID, ZMSAIU, ZMSALD, ZMSALU, ZMTCONV, &
246          &ZMTFUDG, ZLWFUDG, ZSWFUDG, ZMULTL, ZOI, ZOL, ZOMGMX, ZOR, &
247          &ZRMUZ, ZRWGKG, ZTAUD, ZTAUMX, ZTEMPC, &
248          &ZTOI, ZTOL, ZTOR, ZZFIWP, ZZFLWP, ZDPOG, ZPODT
249REAL_B :: ZALND, ZASEA, ZD, ZDEN, ZNTOT, ZNUM, ZRATIO, ZCOEFF, Z1RADI,&
250          &Z1RADL, ZBETAI, ZOMGI, ZOMGP, ZFDEL, ZWGHT, ZVI, ZVL, ZVR
251REAL_B :: ZASW, ZOLR, ZSLW, ZSSW, ZMULTI, ZAIWC, ZBIWC,&
252          &ZDICE, ZFSR, ZLGIWC, ZTCELS, ZTBLAY, ZADDPLK, ZPLANCK
253REAL_B :: ZTOL1, ZTOI1, ZTOR1
254
255
256!     -----------------------------------------------------------------
257
258! #DB kio = 66
259! #DB kjo = 53
260
261!if (NDUMP.LE.3) then
262!  JL=KIDIA
263!  DO jk=1,klev
264!    print 9104,jk,PAPH(JL,JK),PTH(JL,JK),PAP(JL,JK),PT(JL,JK)&
265!    &            ,PDP(JL,JK)&
266!    &            ,PQ(JL,JK),PFRCL(JL,JK),PQIWP(JL,JK),PQLWP(JL,JK)&
267!    &            ,POZON(JL,JK),PQS(JL,JK)
2689104 format(1x,i3,f9.1,f8.2,f9.1,f8.2,f9.1,e10.3,f7.4,4e10.3)
269!  ENDDO
270!  jk=klev+1
271!  print 9104,jk,PAPH(JL,JK),PTH(JL,JK)
272!  print 9105,PTS(JL),(PALBD(JL,JSW),PALBP(JL,JSW),JSW=1,NSW)
2739105 FORMAT(13X,f8.2,12f8.4)
274!end if
275
276!print *,'NICEOPT, NLIQOPT, NRADIP, NRADLP',NICEOPT,NLIQOPT,NRADIP,NRADLP
277
278!-- compute total cloud cover
279DO JL=KIDIA,KFDIA
280  ZTCC(JL)=1.-PFRCL(JL,1)
281  ZTCA(JL)=0.
282END DO
283DO JK=2,KLEV
284  DO JL=KIDIA,KFDIA 
285    ZTCC(JL)=ZTCC(JL)*(1.-MAX(PFRCL(JL,JK),PFRCL(JL,JK-1))) &
286    & /(1.-MIN(PFRCL(JL,JK-1),1.-REPCLC))
287  END DO
288END DO
289DO JL=KIDIA,KFDIA
290  ZTCC(JL)=1.-ZTCC(JL)
291END DO
292
293!JL=KIDIA
294!print 9106,ZTCC(JL)
2959106 format(1x,'TCC :',F7.4)
296!print 9107,LINHOM,NHOWINH
2979107 format(1x,'LINHOM=',L8,' NHOWINH=',I2)
298 
299
300
301
302
303
304!*         1.     SET-UP INPUT QUANTITIES FOR RADIATION
305!                 -------------------------------------
306
307IF (.NOT.LINHOM) THEN
308  ZMTFUDG=1.0_JPRB
309  ZMTCONV=1.0_JPRB
310  ZSWFUDG=1.0_JPRB
311  ZLWFUDG=1.0_JPRB
312ELSE IF (LINHOM) THEN
313  IF (NHOWINH.EQ.1) THEN 
314    ZMTFUDG=0.7_JPRB
315    ZMTCONV=0.7_JPRB
316    ZSWFUDG=0.7_JPRB
317    ZLWFUDG=0.7_JPRB   
318  ELSE
319    ZMTFUDG=1.0_JPRB
320    ZMTCONV=1.0_JPRB
321    ZSWFUDG=1.0_JPRB
322    ZLWFUDG=1.0_JPRB
323  ENDIF   
324ENDIF   
325!print 9108,LINHOM,NHOWINH,ZSWFUDG
3269108 format(1x,'LINHOM=',L8,' NHOWINH=',I2,' FUDG=',f4.2)
327
328DO JL = KIDIA,KFDIA
329  ZFCUP(JL,KLEV+1) = _ZERO_
330  ZFCDWN(JL,KLEV+1) = REPLOG
331  ZFSUP(JL,KLEV+1) = _ZERO_
332  ZFSDWN(JL,KLEV+1) = REPLOG
333  ZFLUX(JL,1,KLEV+1) = _ZERO_
334  ZFLUX(JL,2,KLEV+1) = _ZERO_
335  ZFLUC(JL,1,KLEV+1) = _ZERO_
336  ZFLUC(JL,2,KLEV+1) = _ZERO_
337  ZFSDNN(JL) = _ZERO_
338  ZFSDNV(JL) = _ZERO_
339  ZFCDNN(JL) = _ZERO_
340  ZFCDNV(JL) = _ZERO_
341  ZFSUPN(JL) = _ZERO_
342  ZFSUPV(JL) = _ZERO_
343  ZFCUPN(JL) = _ZERO_
344  ZFCUPV(JL) = _ZERO_
345  ZPSOL(JL) = PAPH(JL,KLEV+1)
346  ZPMB(JL,1) = ZPSOL(JL) / 100._JPRB
347  ZDT0(JL) = PTS(JL) - PTH(JL,KLEV+1)
348  PSUDU(JL) = _ZERO_
349  PUVDF(JL) = _ZERO_
350  PPARF(JL) = _ZERO_
351  ZSUDU(JL) = _ZERO_
352  IBAS(JL) = INT ( 0.01_JPRB + PNBAS(JL) )
353  ITOP(JL) = INT ( 0.01_JPRB + PNTOP(JL) )
354ENDDO
355
356DO JK=1,KLEV+1
357  DO JL=KIDIA,KFDIA
358    CPFLS(JL,JK)  = _ZERO_
359    CPFLT(JL,JK)  = _ZERO_
360    CPFCS(JL,JK)  = _ZERO_
361    CPFCT(JL,JK)  = _ZERO_
362    CPFDCT(JL,JK) = _ZERO_
363    CPFUCT(JL,JK) = _ZERO_
364    CPFDLT(JL,JK) = _ZERO_
365    CPFULT(JL,JK) = _ZERO_
366    CPFDCS(JL,JK) = _ZERO_
367    CPFUCS(JL,JK) = _ZERO_
368    CPFDLS(JL,JK) = _ZERO_
369    CPFULS(JL,JK) = _ZERO_
370  ENDDO
371ENDDO
372
373DO JL = KIDIA,KFDIA
374  CPFRSOD(JL) = _ZERO_
375  CPEMIT (JL) = _ZERO_
376  CPSUDU (JL) = _ZERO_
377  CPUVDF (JL) = _ZERO_
378  CPPARF (JL) = _ZERO_
379END DO   
380
381
382!*         1.1    INITIALIZE VARIOUS FIELDS
383!                 -------------------------
384
385
386DO JSW=1,NSW
387  DO JL = KIDIA,KFDIA
388    ZALBD(JL,JSW)=PALBD(JL,JSW)
389    ZALBP(JL,JSW)=PALBP(JL,JSW)
390  ENDDO
391ENDDO
392DO JL = KIDIA,KFDIA
393  ZEMIS(JL)  =PEMIS(JL)
394  ZEMIW(JL)  =PEMIW(JL)
395  ZMU0(JL)   =PMU0(JL)
396  ZUVDF(JL)  = _ZERO_
397  ZSUDU(JL)  = _ZERO_
398  ZPARF(JL)  = _ZERO_
399ENDDO
400
401DO JK = 1 , KLEV
402  JKP1 = JK + 1
403  JKL = KLEV+ 1 - JK
404  JKLP1 = JKL + 1
405  DO JL = KIDIA,KFDIA
406    ZPMB(JL,JK+1)=PAPH(JL,JKL)/100._JPRB
407    ZOZ(JL,JK)   = POZON(JL,JKL) * 46.6968_JPRB / RG
408    ZOZON(JL,JK) = POZON(JL,JKL)
409    ZCLD0(JL,JK) = _ZERO_
410    ZFCUP(JL,JK) = _ZERO_
411    ZFCDWN(JL,JK) = _ZERO_
412    ZFSUP(JL,JK) = _ZERO_
413    ZFSDWN(JL,JK) = _ZERO_
414    ZFLUX(JL,1,JK) = _ZERO_
415    ZFLUX(JL,2,JK) = _ZERO_
416    ZFLUC(JL,1,JK) = _ZERO_
417    ZFLUC(JL,2,JK) = _ZERO_
418  ENDDO
419ENDDO
420
421
422!** INPUTS ARE FULL LEVEL TEMPERATURES + SURFACE TEMPERATURE
423!        INTERPOLATION TO GET HALF-LEVEL TEMPERATURES FOLLOWS
424!        WHAT IS DONE IN *RADINT* AND *RADHEAT*
425
426!* LLINTRP=.T.  Half-level temperatures on the coarse grid are
427!               vertically interpolated linearly with horizontal
428!               sampled pressure from the full-level temperatures
429!               of the sampled grid.
430
431!* LLINTRP=.F.  Half-level temperatures are those horizontally
432!               sampled on the coarse grid
433
434LLINTRP=.FALSE.
435IF (LLINTRP) THEN
436  DO JK=2,KLEV
437    DO JL=KIDIA,KFDIA
438      PTH(JL,JK)=(PT  (JL,JK-1)*PAP  (JL,JK-1)&
439       &*(PAP  (JL,JK)-PAPH  (JL,JK))&
440       &+PT  (JL,JK)*PAP  (JL,JK)*(PAPH  (JL,JK)-PAP  (JL,JK-1)))&
441       &*(_ONE_/(PAPH  (JL,JK)*(PAP  (JL,JK)-PAP  (JL,JK-1))))
442    ENDDO
443  ENDDO
444  IF (LTEMPDS) THEN
445    DO JL=KIDIA,KFDIA
446      PTH(JL,1)= PT  (JL,1)-PAP  (JL,1)*(PT  (JL,1)-PTH(JL,2))&
447        &/(PAP  (JL,1)-PAPH  (JL,2))
448      PTH(JL,KLEV+1)=PT(JL,KLEV)&
449        &            +(PAPH(JL,KLEV+1)-PAP(JL,KLEV))&
450        &            *(PT(JL,KLEV)-PTH(JL,KLEV))&
451        &            /(PAP(JL,KLEV)-PAPH(JL,KLEV))
452    ENDDO
453  ELSE     
454    DO JL=KIDIA,KFDIA
455      PTH(JL,1)= PT  (JL,1)-PAP  (JL,1)*(PT  (JL,1)-PTH(JL,2))&
456        &/(PAP  (JL,1)-PAPH  (JL,2))
457      PTH(JL,KLEV+1)= PTS(JL)
458    ENDDO
459  ENDIF   
460ENDIF
461
462DO JK=1,KLEV
463  JKL=KLEV+1-JK
464  JKLP1=JKL+1
465  DO JL=KIDIA,KFDIA
466    ZTL(JL,JK)=PTH(JL,JKLP1)
467    ZTAVE(JL,JK)=PT(JL,JKL)
468  ENDDO
469ENDDO
470DO JL=KIDIA,KFDIA
471  ZTL(JL,KLEV+1)= PTH(JL,1)
472  ZPMB(JL,KLEV+1) = PAPH(JL,1)/100._JPRB
473ENDDO
474!***
475
476!     ------------------------------------------------------------------
477
478!*         2.     CLOUD AND AEROSOL PARAMETERS
479!                 ----------------------------
480
481NBOXL=1
482IF (KBOX.EQ.1) THEN
483  CALL COL2BOX &
484   & ( KIDIA, KFDIA, KLON, KLEV, NBOX, NOVLP &
485   & , PFRCL, PCLBX &
486   & )
487  NBOXL=NBOX
488END IF
489ZWGHT=1./FLOAT(NBOXL)
490       
491!-- initialise box-type outputs OLR, ASW, SDLW, SDSW, TAU
492DO ICBOX=1,NBOXL
493  DO JL=KIDIA,KFDIA
494    OLRBOX(JL,ICBOX)=_ZERO_             
495    ASWBOX(JL,ICBOX)=_ZERO_             
496    SLWBOX(JL,ICBOX)=_ZERO_             
497    SSWBOX(JL,ICBOX)=_ZERO_
498    TAUBOX(JL,ICBOX)=_ZERO_
499  END DO 
500END DO             
501
502DO ICBOX=1,NBOXL
503  IF (KBOX.EQ.1) THEN
504    DO JK=1,KLEV
505      DO JL=KIDIA,KFDIA
506        PCLFR(JL,JK)=PCLBX(JL,ICBOX,JK)
507      END DO
508    END DO
509   
510  ELSE       
511    DO JK=1,KLEV
512      DO JL=KIDIA,KFDIA
513        PCLFR(JL,JK)=PFRCL(JL,JK)
514      END DO
515    END DO
516  END IF 
517  DO JL=KIDIA,KFDIA
518    PSUDU(JL) = _ZERO_
519    ZTAUINT(JL) = _ZERO_
520  END DO 
521 
522!-- compute total cloud cover for that particular calculation
523  DO JL=KIDIA,KFDIA
524    ZCOL(JL)=1.-PCLFR(JL,1)
525  END DO
526  DO JK=2,KLEV
527    DO JL=KIDIA,KFDIA 
528      ZCOL(JL)=ZCOL(JL)*(1.-MAX(PCLFR(JL,JK),PCLFR(JL,JK-1))) &
529       & /(1.-MIN(PCLFR(JL,JK-1),1.-REPCLC))
530    END DO
531  END DO
532  DO JL=KIDIA,KFDIA
533    ZCOL(JL)=1.-ZCOL(JL)
534  END DO
535 
536
537
538
539
540
541DO JK = 1 , KLEV
542  IKL = KLEV + 1 - JK
543
544!          2.1    INITIALIZE OPTICAL PROPERTIES TO CLEAR SKY VALUES
545!                 -------------------------------------------------
546
547  DO JSW = 1,NSW
548    DO JL = KIDIA,KFDIA
549      ZTAU(JL,JSW,JK)  = _ZERO_
550      ZOMEGA(JL,JSW,JK)= _ONE_
551      ZCG(JL,JSW,JK)   = _ZERO_
552    ENDDO
553  ENDDO
554  DO JL = KIDIA,KFDIA
555    ZCLDSW(JL,JK)  = _ZERO_
556    ZCLDLD(JL,JK)  = _ZERO_
557    ZCLDLU(JL,JK)  = _ZERO_
558  ENDDO
559
560
561!          2.2    CLOUD ICE AND LIQUID CONTENT AND PATH
562!                 -------------------------------------
563
564  DO JL = KIDIA,KFDIA
565!    PCLFR(JL,IKL)=MAX(REPSC,MIN(PCLFR(JL,IKL),_ONE_-REPSC))
566    PCLFR(JL,IKL)=MAX( _ZERO_ ,MIN( PCLFR(JL,IKL), _ONE_ ))
567
568! --- LIQUID WATER CONTENT (g.m-3) AND LIQUID WATER PATH (g.m-2)
569    ZLWGKG=MAX(PQLWP(JL,IKL)*1000._JPRB,_ZERO_)
570    ZIWGKG=MAX(PQIWP(JL,IKL)*1000._JPRB,_ZERO_)
571!!    IF (PCLFR(JL,IKL) > (_TWO_*REPCLC)) THEN
572!!      ZLWGKG=ZLWGKG/PCLFR(JL,IKL)
573!!      ZIWGKG=ZIWGKG/PCLFR(JL,IKL)
574!!  IF (PCLFR(JL,IKL) > REPCLC) THEN
575    IF (PCLFR(JL,IKL) > 15.E-06_JPRB) THEN
576      ZLWGKG=ZLWGKG/PFRCL(JL,IKL)
577      ZIWGKG=ZIWGKG/PFRCL(JL,IKL)
578    ELSE
579      ZLWGKG=_ZERO_
580      ZIWGKG=_ZERO_
581    ENDIF
582
583! --- RAIN LIQUID WATER CONTENT (g.m-3) AND LIQUID WATER PATH (g.m-2)
584!    IF (PRAINT(JL,IKL).GT.(2.*REPCLC)) THEN
585!      ZRWGKG=MAX(PQRAIN(JL,IKL)*1000., 0.0)
586!      ZRAINT(JL)=PRAINT(JL,IKL)*3600.*1000.
587!- no radiative effect of rain (for the moment)
588!      ZRWGKG=0.
589!      ZRAINT(JL)=0.
590! ===========================================================
591
592! Modifications Martin et al.
593!    ELSE
594    ZRWGKG=_ZERO_
595    ZRAINT(JL)=_ZERO_
596!    END IF
597
598    IF (IBAS(JL) /= 1.AND. ITOP(JL) /= 1 ) THEN
599      ZCFUDG(JL)=ZMTCONV
600    ELSE
601      ZCFUDG(JL)=ZMTFUDG
602    ENDIF
603
604    ZDPOG=PDP(JL,IKL)/RG
605    ZFLWP(JL)= ZLWGKG*ZDPOG
606    ZFIWP(JL)= ZIWGKG*ZDPOG
607    ZFRWP(JL)= ZRWGKG*ZDPOG
608    ZPODT=PAP(JL,IKL)/(RD*PT(JL,IKL))
609    ZLWC(JL)=ZLWGKG*ZPODT
610    ZIWC(JL)=ZIWGKG*ZPODT
611!    ZRWC(JL)=ZRWGKG*ZPODT
612
613! --- EFFECTIVE RADIUS FOR WATER, ICE AND RAIN PARTICLES
614
615    IF (NRADLP.EQ.0) THEN
616! very old parametrization as f(pressure)
617      ZRADLP(JL)=10._JPRB + (100000._JPRB-PAP(JL,IKL))*3.5E-04_JPRB
618
619    ELSE IF (NRADLP.EQ.1) THEN
620! old simple distinction between land (10) and ocean (13)
621      IF (PLSM(JL) < _HALF_) THEN
622        ZRADLP(JL)=13._JPRB
623      ELSE
624        ZRADLP(JL)=10._JPRB
625      ENDIF
626
627    ELSE IF (NRADLP.EQ.2) THEN
628!--  based on Martin et al., 1994, JAS
629      IF (PLSM(JL) < _HALF_) THEN
630        ZASEA=150._JPRB
631        ZD=0.33_JPRB
632        ZNTOT=-1.15E-03_JPRB*ZASEA*ZASEA+0.963_JPRB*ZASEA+5.30_JPRB
633      ELSE
634        ZALND=900._JPRB
635!        ZALND=600._JPRB
636!        ZALND=300._JPRB
637!        ZALND=1200._JPRB
638        ZD=0.43_JPRB
639        ZNTOT=-2.10E-04_JPRB*ZALND*ZALND+0.568_JPRB*ZALND-27.9_JPRB
640      ENDIF
641     
642      ZNUM=3._JPRB*ZLWC(JL)*(1._JPRB+3._JPRB*ZD*ZD)**2
643      ZDEN=4._JPRB*RPI*ZNTOT*(1._JPRB+ZD*ZD)**3
644      ZRADLP(JL)=100.*(ZNUM/ZDEN)**0.333_JPRB
645     
646! 9001   format(1x,I3,1E13.5,F5.0,F5.2,f8.2,3E13.5)
647      ZRADLP(JL)=MAX(ZRADLP(JL), 4._JPRB)
648      ZRADLP(JL)=MIN(ZRADLP(JL),16._JPRB)
649    END IF 
650!    print *,'ZRADLP(JL) for JK=',JK,ZRADLP(JL)
651
652! ===========================================================
653! ___________________________________________________________
654
655! rain drop from          : unused as ZRAINT is 0.
656!    ZRADRD(JL)=500._JPRB*ZRAINT(JL)**0.22_JPRB
657!    IF (ZFLWP(JL).GT.0.) THEN
658!      ZRADRD(JL)=ZRADLP(JL)+ZRADRD(JL)
659!    END IF   
660
661!- ice particle effective radius =f(T) from Liou and Ou (1994)
662 
663    IF (PT(JL,IKL) < RTICE) THEN
664      ZTEMPC=PT(JL,IKL)-RTT
665    ELSE
666      ZTEMPC=RTICE-RTT
667    ENDIF
668   
669    ZRADIP(JL)=326.3_JPRB+ZTEMPC*(12.42_JPRB + ZTEMPC*(0.197_JPRB + ZTEMPC*&
670     &0.0012_JPRB))
671    ZDESR(JL)=2._JPRB*ZRADIP(JL)
672!    print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
673     
674    IF (NRADIP.EQ. 0) THEN
675      ZRADIP(JL)= 40._JPRB
676      ZDESR(JL)=2._JPRB*ZRADIP(JL)
677!      print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
678     
679    ELSE IF (NRADIP.EQ. 1) THEN
680!-- old formulation based on temperature (40-130microns)   
681      ZRADIP(JL)=MAX(ZRADIP(JL),40._JPRB)
682      ZDESR(JL)=2._JPRB*ZRADIP(JL)
683!      print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
684     
685    ELSE IF (NRADIP.EQ. 2) THEN 
686!-- formulation following Jakob, Klein modifications to ice content   
687      ZRADIP(JL)=MAX(ZRADIP(JL),30._JPRB)
688      ZRADIP(JL)=MIN(ZRADIP(JL),60._JPRB)
689      ZDESR(JL)=2._JPRB*ZRADIP(JL)
690!      print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
691     
692!-- new Sun and Rikus, 1999  D_ice = f(T, IWC)   
693    ELSE IF (NRADIP.EQ. 3 .AND. ZIWC(JL).GT. _ZERO_ ) THEN
694      ZTEMPC=PT(JL,IKL)-83.15_JPRB
695      ZTCELS=PT(JL,IKL)-RTT
696      ZFSR = 1.2351_JPRB +0.0105_JPRB * ZTCELS
697! Sun & Rikus, 1999     
698!      ZLGIWC=LOG10( REPCLC + ZIWC(JL))
699!      ZAIWC=26.1571_JPRB / ( ABS(ZLGIWC) **0.5995_JPRB )
700!      ZBIWC=0.6402_JPRB + 0.1810_JPRB * ZLGIWC
701! Sun, 2001
702      ZAIWC = 45.8966_JPRB * ZIWC(JL)**0.2214_JPRB
703      ZBIWC = 0.7957_JPRB * ZIWC(JL)**0.2535_JPRB
704      ZDESR(JL) = ZFSR * (ZAIWC + ZBIWC*ZTEMPC)
705      ZDESR(JL) = MIN ( MAX( ZDESR(JL), RMINICE ), 350._JPRB)
706      ZRADIP(JL)= 0.5 * ZDESR(JL)
707!      print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
708    END IF
709   
710!-- ERA-15 definition of effective radii   
711    IF (KLWRAD.EQ.2 .AND. NSW.EQ.2) THEN
712      ZRADIP(JL)=40._JPRB
713      ZRADLP(JL)=10._JPRB + (100000._JPRB-PAP(JL,IKL))*3.5_JPRB
714!      ZSWFUDG=1._JPRB
715!      ZLWFUDG=1._JPRB
716      LOWASYF=.FALSE.     
717      LOIFUEC=.FALSE.
718      LRRTM=.FALSE.
719      ZDESR(JL)=2._JPRB*ZRADIP(JL)
720!      print *,'ZRADIP(JL) for JK=',JK,ZRADIP(JL),ZDESR(JL)
721    END IF 
722   
723  ENDDO
724
725
726
727!          2.3    CLOUD SHORTWAVE OPTICAL PROPERTIES
728!                 ----------------------------------
729
730!   -------------------------
731! --+ SW OPTICAL PARAMETERS +  Water clouds after Fouquart (1987)
732!   -------------------------  Ice clouds (Ebert, Curry, 1992)
733
734  DO JSW=1,NSW
735    DO JL = KIDIA,KFDIA
736      ZTOL=_ZERO_
737      ZGL =_ZERO_
738      ZOL =_ZERO_
739      ZTOI=_ZERO_
740      ZGI =_ZERO_
741      ZOI =_ZERO_
742      ZTOR=_ZERO_
743      ZGR =_ZERO_
744      ZOR =_ZERO_
745      IF (ZFLWP(JL)+ZFIWP(JL)+ZFRWP(JL)  /= _ZERO_) THEN
746        IF (ZFLWP(JL)  /=  _ZERO_) THEN
747          IF (NLIQOPT.NE.0 ) THEN
748!-- SW: Slingo, 1989
749            ZTOL = ZFLWP(JL)*(RASWCA(JSW)+RASWCB(JSW)/ZRADLP(JL))
750            ZGL  = RASWCE(JSW)+RASWCF(JSW)*ZRADLP(JL)
751            ZOL  = 1. - RASWCC(JSW)-RASWCD(JSW)*ZRADLP(JL)
752          ELSE         
753!-- SW: Fouquart, 1991
754            ZTOL = ZFLWP(JL)*(RYFWCA(JSW)+RYFWCB(JSW)/ZRADLP(JL))
755            ZGL  = RYFWCF(JSW)
756            ZOL  = RYFWCC(JSW)-RYFWCD(JSW)*EXP(-RYFWCE(JSW)*ZTOL)
757          ENDIF
758        ENDIF
759
760        IF (ZFIWP(JL)  /=  _ZERO_) THEN
761          IF (NICEOPT.LE.1) THEN
762!-- SW: Ebert-Curry         
763            ZTOI = ZFIWP(JL)*(REBCUA(JSW)+REBCUB(JSW)/ZRADIP(JL))
764            ZGI  = REBCUE(JSW)+REBCUF(JSW)*ZRADIP(JL)
765            ZOI  = _ONE_ - REBCUC(JSW)-REBCUD(JSW)*ZRADIP(JL)
766           
767          ELSE IF (NICEOPT.EQ.2) THEN
768!-- SW: Fu-Liou, 1993
769            Z1RADI = 0.5 / ZRADIP(JL)
770            ZBETAI = RFLAA0(JSW)+Z1RADI* RFLAA1(JSW)
771            ZTOI = ZFIWP(JL) * ZBETAI
772            ZOMGI= RFLBB0(JSW)+ZRADIP(JL)*(RFLBB1(JSW) + ZRADIP(JL) &
773             &   *(RFLBB2(JSW)+ZRADIP(JL)* RFLBB3(JSW) ))           
774            ZOI  = _ONE_ - ZOMGI
775            ZOMGP= RFLCC0(JSW)+ZRADIP(JL)*(RFLCC1(JSW) + ZRADIP(JL) &
776             &   *(RFLCC2(JSW)+ZRADIP(JL)* RFLCC3(JSW) ))
777            ZFDEL= RFLDD0(JSW)+ZRADIP(JL)*(RFLDD1(JSW) + ZRADIP(JL) &
778             &   *(RFLDD2(JSW)+ZRADIP(JL)* RFLDD3(JSW) ))
779            ZGI  = ((1.-ZFDEL)*ZOMGP + ZFDEL*3.) / 3.   
780                   
781          ELSE IF (NICEOPT.EQ.3) THEN
782!-- SW: Fu 1996
783            Z1RADI = _ONE_ / ZDESR(JL)
784            ZBETAI = RFUAA0(JSW)+Z1RADI* RFUAA1(JSW)
785            ZTOI = ZFIWP(JL) * ZBETAI
786            ZOMGI= RFUBB0(JSW)+ZDESR(JL)*(RFUBB1(JSW) + ZDESR(JL) &
787             &   *(RFUBB2(JSW)+ZDESR(JL)* RFUBB3(JSW) ))           
788            ZOI  = _ONE_ - ZOMGI
789            ZGI  = RFUCC0(JSW)+ZDESR(JL)*(RFUCC1(JSW) + ZDESR(JL) &
790             &   *(RFUCC2(JSW)+ZDESR(JL)* RFUCC3(JSW) ))
791             
792          ENDIF
793        ENDIF
794
795!        IF (ZFRWP(JL) .NE. 0.) THEN
796!          ZTOR= ZFRWP(JL)*0.003_JPRB*_JPRBZRAINT(JL)**(-0.22_JPRB)         
797!          ZOR = 1._JPRB - RROMA(JSW)*ZRAINT(JL)**RROMB(JSW)
798!          ZGR = RRASY(JSW)
799!        END IF   
800
801!  - MIX of WATER and ICE CLOUDS
802!        ZTAUMX= ZTOL + ZTOI + ZTOR
803!        ZOMGMX= ZTOL*ZOL + ZTOI*ZOI + ZTOR*ZOR
804!        ZASYMX= ZTOL*ZOL*ZGL + ZTOI*ZOI*ZGI + ZTOR*ZOR*ZGR
805!
806!        ZASYMX= ZASYMX/ZOMGMX
807!        ZOMGMX= ZOMGMX/ZTAUMX
808
809        IF (.NOT.LINHOM .OR. (LINHOM .AND. NHOWINH.EQ.1) ) THEN
810          ZVL=ZSWFUDG
811          ZVI=ZSWFUDG
812          ZVR=0.
813          ZTAUMX= ZTOL*ZVL + ZTOI*ZVI + ZTOR*ZVR
814          ZOMGMX= ZTOL*ZVL*ZOL + ZTOI*ZVI*ZOI + ZTOR*ZVR*ZOR
815          ZASYMX= ZTOL*ZVL*ZOL*ZGL + ZTOI*ZVI*ZOI*ZGI + ZTOR*ZVR*ZOR*ZGR
816          ZASYMX= ZASYMX/ZOMGMX
817          ZOMGMX= ZOMGMX/ZTAUMX
818        ELSE IF (LINHOM .AND. NHOWINH.EQ.2) THEN
819          ZVL=PSQLW(JL,IKL)
820          ZVI=PSQIW(JL,IKL)
821          ZVR=0.
822          ZTAUMX= ZTOL*ZVL + ZTOI*ZVI + ZTOR*ZVR
823          ZOMGMX= ZTOL*ZVL*ZOL + ZTOI*ZVI*ZOI + ZTOR*ZVR*ZOR
824          ZASYMX= ZTOL*ZVL*ZOL*ZGL + ZTOI*ZVI*ZOI*ZGI + ZTOR*ZVR*ZOR*ZGR
825          ZASYMX= ZASYMX/ZOMGMX
826          ZOMGMX= ZOMGMX/ZTAUMX
827        ELSE IF (LINHOM .AND. NHOWINH.EQ.3) THEN
828          ZVL=PRLVRL(JL,IKL)
829          ZVI=PRLVRI(JL,IKL)
830          ZVR=0.
831          ZTOL1 = ZTOL/(1.+ZVL)
832          ZTOI1 = ZTOI/(1.+ZVI)
833          ZTOR1 = ZTOR/(1.+ZVR)
834          ZTAUMX= ZTOL1 + ZTOI1 + ZTOR1
835          ZOI=ZOI/(1.+ZVI*(1.-ZOI))
836          ZGI=ZGI*(1.+ZVI*(1.-ZOI))/(1.+ZVI*(1.-ZOI*ZGI))
837          ZOL=ZOL/(1.+ZVL*(1.-ZOL))
838          ZGL=ZGL*(1.+ZVL*(1.-ZOL))/(1.+ZVL*(1.-ZOL*ZGL))
839         
840          ZOMGMX= ZTOL1*ZOL + ZTOI1*ZOI + ZTOR1*ZOR
841          ZASYMX= ZTOL1*ZOL*ZGL + ZTOI1*ZOI*ZGI + ZTOR1*ZOR*ZGR
842          ZASYMX= ZASYMX/ZOMGMX
843          ZOMGMX= ZOMGMX/ZTAUMX
844        END IF 
845!        print 9009,JK,JL,JSW,ZSWFUDG,PSQLW(JL,IKL),PSQIW(JL,IKL) &
846!         & , PRLVRL(JL,IKL),PRLVRI(JL,IKL),ZTOL,ZOL,ZGL,ZTOI,ZOI,ZGI &
847!         & , ZTAUMX,ZOMGMX,ZASYMX
8489009    format(1x,3I3,14E13.6)         
849       
850! --- SW FINAL CLOUD OPTICAL PARAMETERS
851
852        ZCLDSW(JL,JK)  = PCLFR(JL,IKL)
853        ZTAU(JL,JSW,JK)  = ZTAUMX
854        ZOMEGA(JL,JSW,JK)= ZOMGMX
855        ZCG(JL,JSW,JK)   = ZASYMX
856      ENDIF
857
858! #DB             jkjlsw = 0
859! #DB   IF (ZTAU(JL,JSW,JK)    .LT.00..OR.ZTAU(JL,JSW,JK)    .GT.75. .OR. &
860! #DB &     (k2iii(JL)         .EQ.kio.AND.k2jjj(JL)         .EQ.kjo)     ) THEN
861! #DB     IF (mod(jkjlsw,20).EQ.0)                                               &
862! #DB &     write(6,575)      NLIQOPT,NICEOPT
863! #DB               575  format('IN   RADLSW: CLOUD SHrtWAVE OPTICAL PROPERTIES                 '  &
864! #DB &                        ,3x,'   NLIQOPT =',I3,'   NICEOPT =',I3,/                           &
865! #DB &                        ,'    i    j   JL   JK',7x,'ZTAU',5x,'ZCLDSW',6x,'ZDESR'            &
866! #DB &                        ,5x,'PRLVRL',5x,'PRLVRI',6x,'PQIWP',6x,'PQLWP',3x,'JSW')
867! #DB             jkjlsw=jkjlsw+1
868! #DB       write(6,603) k2iii(JL),k2jjj(JL),JL,IKL,ZTAU(JL,JSW,JK) ,ZCLDSW(JL,JK) , ZDESR(JL)     &
869! #DB &                                                             ,PRLVRL(JL,IKL),PRLVRI(JL,IKL) &
870! #DB &                                                              ,PQIWP(JL,IKL), PQLWP(JL,IKL),JSW
871! #DB               603  format(4i5,7e11.3,I6)
872! #DB   ENDIF
873
874    ENDDO
875  ENDDO
876 
877  DO JL=KIDIA,KFDIA
878    ZTAUINT(JL)=ZTAUINT(JL)+ZTAU(JL,1,JK)
879  END DO 
880 
881 
882!JL=KIDIA
883!print 9109,JK,ZCLDSW(JL,JK),ZRADLP(JL),ZRADIP(JL) &
884!  & , (ZTAU(JL,JSW,JK),ZOMEGA(JL,JSW,JK),ZCG(JL,JSW,JK),JSW=1,NSW)
8859109 format(1x,'ClOptProp: ',I2,f7.4,2f6.1,6(1x,F7.2,1x,F7.4,1x,f6.3)) 
886!print *,'Radlsw after SW cloud optical properties for level JK=',JK
887
888
889
890!          2.4    CLOUD LONGWAVE OPTICAL PROPERTIES FOR EC-OPE
891!                 --------------------------------------------
892
893!   -------------------------
894! --+ LW OPTICAL PARAMETERS +  Water (and Ice) from Smith and Shi (1992)
895!   -------------------------  Ice clouds (Ebert, Curry, 1992)
896
897  IF (.NOT.LRRTM) THEN
898
899    DO JL = KIDIA,KFDIA
900      ZALFICE(JL)=_ZERO_
901      ZGAMICE(JL)=_ZERO_
902      ZBICE(JL)=_ZERO_
903      ZTICE(JL)=(PT(JL,IKL)-TSTAND)/TSTAND
904      ZBICFU(JL)=_ZERO_
905      ZKICFU1(JL)=_ZERO_
906      ZKICFU2(JL)=_ZERO_
907    ENDDO
908   
909    DO JNU= 1,NSIL
910      DO JL = KIDIA,KFDIA
911        ZRES(JL)  = XP(1,JNU)+ZTICE(JL)*(XP(2,JNU)+ZTICE(JL)*(XP(3,&
912         &JNU)&
913         &+ZTICE(JL)*(XP(4,JNU)+ZTICE(JL)*(XP(5,JNU)+ZTICE(JL)*(XP(6,&
914         &JNU)&
915         &)))))
916        ZBICE(JL) = ZBICE(JL) + ZRES(JL)
917        ZGAMICE(JL) = ZGAMICE(JL) + REBCUI(JNU)*ZRES(JL)
918        ZALFICE(JL) = ZALFICE(JL) + REBCUJ(JNU)*ZRES(JL)
919      ENDDO
920    ENDDO
921       
922!-- Fu et al. (1998) with M'91 LW scheme   
923    DO JRTM=1,16
924      DO JL=KIDIA,KFDIA
925        IF (PT(JL,IKL) < 339._JPRB .AND. PT(JL,IKL) >= 160._JPRB) THEN
926          INDLAY=PT(JL,IKL)-159._JPRB
927          ZTBLAY =PT(JL,IKL)-INT(PT(JL,IKL))
928        ELSE IF (PT(JL,IKL) >= 339._JPRB ) THEN
929          INDLAY=180
930          ZTBLAY =PT(JL,IKL)-339._JPRB
931        ELSE IF (PT(JL,IKL) < 160._JPRB) THEN
932          INDLAY=1
933          ZTBLAY =PT(JL,IKL)-160._JPRB
934        END IF     
935        ZADDPLK = TOTPLNK(INDLAY+1,JRTM)-TOTPLNK(INDLAY,JRTM)
936        ZPLANCK = DELWAVE(JRTM) * (TOTPLNK(INDLAY,JRTM) + ZTBLAY*ZADDPLK)
937        ZBICFU(JL) = ZBICFU(JL) + ZPLANCK
938       
939        IF (ZIWC(JL) > _ZERO_ ) THEN
940! ice cloud spectral emissivity a la Fu & Liou (1993)
941          ZRATIO= 0.5 / ZRADIP(JL)
942          ZMSAID = RFULIO(JRTM,1) + ZRATIO&
943             &*(RFULIO(JRTM,2) + ZRATIO*RFULIO(JRTM,3))
944          ZKICFU1(JL) = ZKICFU1(JL)+ ZMSAID*ZPLANCK
945         
946! ice cloud spectral emissivity a la Fu et al (1998)
947          Z1RADI = _ONE_ / ZDESR(JL)
948          ZMSAID = RFUETA(JRTM,1) + Z1RADI&
949             &*(RFUETA(JRTM,2) + Z1RADI*RFUETA(JRTM,3))
950          ZKICFU2(JL) = ZKICFU2(JL)+ ZMSAID*ZPLANCK
951        END IF 
952      END DO
953    END DO
954           
955    DO JL = KIDIA,KFDIA
956      ZGAMICE(JL) = ZGAMICE(JL) / ZBICE(JL)
957      ZALFICE(JL) = ZALFICE(JL) / ZBICE(JL)
958      ZKICFU1(JL) = ZKICFU1(JL) / ZBICFU(JL)
959      ZKICFU2(JL) = ZKICFU2(JL) / ZBICFU(JL)
960     
961      IF (ZFLWP(JL)+ZFIWP(JL) /= _ZERO_) THEN
962
963        IF (KLWRAD.EQ.2) THEN       
964! ice cloud emissivity a la Smith-Shi
965          ZMULTI=1.2_JPRB-0.006_JPRB*ZRADIP(JL)
966          ZMSAID= 0.113_JPRB*ZMULTI
967          ZMSAIU= 0.093_JPRB*ZMULTI
968          ZMULTL=1.2_JPRB-0.006_JPRB*ZRADLP(JL)
969          ZMSALD= 0.158_JPRB*ZMULTL
970          ZMSALU= 0.130_JPRB*ZMULTL
971          ZZFLWP= ZFLWP(JL)
972          ZZFIWP= ZFIWP(JL)
973         
974        ELSE IF (KLWRAD.EQ.0) THEN 
975         
976          IF (NLIQOPT.EQ.0) THEN
977! water cloud emissivity a la Smith & Shi (1992)
978            ZMULTL=1.2_JPRB-0.006_JPRB*ZRADLP(JL)
979            ZMSALD= 0.158_JPRB*ZMULTL
980            ZMSALU= 0.130_JPRB*ZMULTL
981         
982          ELSE
983! water cloud emissivity a la Savijarvi (1997)
984            ZMSALU= 0.2441_JPRB-0.0105_JPRB*ZRADLP(JL)
985            ZMSALD= 1.2154_JPRB*ZMSALU
986         
987          END IF 
988         
989          IF (NICEOPT.EQ.0) THEN         
990! ice cloud emissivity a la Smith & Shi (1992)
991            ZMULTI=1.2_JPRB-0.006_JPRB*ZRADIP(JL)
992            ZMSAID= 0.113_JPRB*ZMULTI
993            ZMSAIU= 0.093_JPRB*ZMULTI
994
995          ELSE IF (NICEOPT.EQ.1) THEN
996! ice cloud emissivity a la Ebert & Curry (1992)
997            ZMSAID= 1.66_JPRB*(ZALFICE(JL)+ZGAMICE(JL)/ZRADIP(JL))
998            ZMSAIU= ZMSAID
999         
1000          ELSE IF (NICEOPT.EQ.2) THEN 
1001! ice cloud emissivity a la Fu & Liou (1993)
1002            ZMSAID= 1.66_JPRB*ZKICFU1(JL)
1003            ZMSAIU= ZMSAID
1004         
1005          ELSE IF (NICEOPT.EQ.3) THEN 
1006! ice cloud emissivity a la Fu et al. (1998)
1007            ZMSAID= 1.66_JPRB*ZKICFU2(JL)
1008            ZMSAIU= ZMSAID
1009          END IF 
1010         
1011! introduce inhomogeneity factor also in LW         
1012          ZZFLWP= ZFLWP(JL) * ZLWFUDG
1013          ZZFIWP= ZFIWP(JL) * ZLWFUDG
1014        END IF
1015         
1016! effective cloudiness accounting for condensed water
1017        ZCLDLD(JL,JK) = PCLFR(JL,IKL)*(_ONE_-EXP(-ZMSALD*ZZFLWP-ZMSAID* &
1018          &ZZFIWP))
1019        ZCLDLU(JL,JK) = PCLFR(JL,IKL)*(_ONE_-EXP(-ZMSALU*ZZFLWP-ZMSAIU* &
1020          &ZZFIWP))
1021         
1022      END IF   
1023    ENDDO
1024   
1025!  print *,'Radlsw after LW0 cloud optical properties for level JK=',JK
1026
1027  ELSE
1028
1029!          2.5    CLOUD LONGWAVE OPTICAL PROPERTIES FOR RRTM
1030!                 ------------------------------------------
1031
1032!   -------------------------
1033! --+ LW OPTICAL PARAMETERS +  Water (and Ice) from Savijarvi (1998)
1034!   -------------------------  Ice clouds (Ebert, Curry, 1992)
1035
1036! No need for a fixed diffusivity factor, accounted for spectrally below
1037! The detailed spectral structure does not require defining upward and
1038! downward effective optical properties
1039
1040! #DB             jkjllw=0
1041
1042    DO JRTM=1,16
1043      DO JL = KIDIA,KFDIA
1044        ZTAUCLD(JL,JK,JRTM) = _ZERO_
1045        ZMSALD = _ZERO_
1046        ZMSAID = _ZERO_
1047       
1048        IF (ZFLWP(JL)+ZFIWP(JL) /= _ZERO_) THEN
1049   
1050          IF (NLIQOPT.EQ.0) THEN
1051! water cloud total emissivity a la Smith and Shi (1992)
1052            ZMULTL=1.2_JPRB-0.006_JPRB*ZRADLP(JL)
1053            ZMSALD= 0.144_JPRB*ZMULTL / 1.66_JPRB
1054           
1055          ELSE IF (NLIQOPT.EQ.1) THEN
1056! water cloud spectral emissivity a la Savijarvi (1997)
1057            ZMSALD= RHSAVI(JRTM,1) + ZRADLP(JL)&
1058             &*(RHSAVI(JRTM,2) + ZRADLP(JL)*RHSAVI(JRTM,3))
1059             
1060          ELSE IF (NLIQOPT.EQ.2) THEN
1061! water cloud spectral emissivity a la Lindner and Li (2000)
1062            Z1RADL = _ONE_ / ZRADLP(JL)
1063!            ZMSALD = RLINLI(JRTM,1) + Z1RADL*(RLINLI(JRTM,2) + Z1RADL*&
1064!            &       (RLINLI(JRTM,3) + Z1RADL*(RLINLI(JRTM,4) + Z1RADL*&
1065!            &        RLINLI(JRTM,5) )))
1066           
1067            ZMSALD = RLINLI(JRTM,1)+ZRADLP(JL)*RLINLI(JRTM,2)+ Z1RADL*&
1068            &       (RLINLI(JRTM,3) + Z1RADL*(RLINLI(JRTM,4) + Z1RADL*&
1069            &        RLINLI(JRTM,5) ))
1070         
1071          END IF 
1072
1073          IF (NICEOPT.EQ.0) THEN
1074! ice cloud emissivity a la Smith & Shi (1992)
1075            ZMULTI=1.2_JPRB-0.006_JPRB*ZRADIP(JL)
1076            ZMSAID= 0.108_JPRB*ZMULTI / 1.66_JPRB
1077                   
1078          ELSE IF (NICEOPT.EQ.1) THEN
1079! ice cloud spectral emissivity a la Ebert-Curry (1992)
1080            ZMSAID= REBCUH(JRTM)+REBCUG(JRTM)/ZRADIP(JL)
1081           
1082          ELSE IF (NICEOPT.EQ.2) THEN
1083! ice cloud spectral emissivity a la Fu & Liou (1993)
1084            ZRATIO= 0.5 / ZRADIP(JL)
1085            ZMSAID = RFULIO(JRTM,1) + ZRATIO&
1086             &*(RFULIO(JRTM,2) + ZRATIO*RFULIO(JRTM,3))
1087             
1088          ELSE IF (NICEOPT.EQ.3) THEN
1089! ice cloud spectral emissivity a la Fu et al (1998)
1090            Z1RADI = _ONE_ / ZDESR(JL)
1091            ZMSAID = RFUETA(JRTM,1) + Z1RADI&
1092             &*(RFUETA(JRTM,2) + Z1RADI*RFUETA(JRTM,3))
1093             
1094          END IF   
1095
1096          IF (.NOT.LINHOM .OR. (LINHOM .AND. NHOWINH.EQ.1) ) THEN
1097            ZVL=ZLWFUDG
1098            ZVI=ZLWFUDG
1099          ELSE IF (LINHOM .AND. NHOWINH.EQ.2) THEN
1100            ZVL=PSQLW(JL,IKL)
1101            ZVI=PSQIW(JL,IKL)
1102          ELSE IF (LINHOM .AND. NHOWINH.EQ.3) THEN
1103            ZVL=_ONE_/(_ONE_+PRLVRL(JL,IKL))
1104            ZVI=_ONE_/(_ONE_+PRLVRI(JL,IKL))
1105          END IF 
1106         
1107          ZTAUD = ZVL*ZMSALD*ZFLWP(JL)+ZVI*ZMSAID*ZFIWP(JL)
1108
1109! #DB     write(30,333) ZTAUD,ZVL,ZMSALD,ZFLWP(JL),ZVI,ZMSAID,ZFIWP(JL),PQIWP(JL,IKL),PQLWP(JL,IKL)
1110! #DB              333  format(9e14.6)
1111
1112! Diffusivity correction within clouds a la Savijarvi
1113!          ZDIFFD=MIN(MAX(1.517_JPRB-0.156_JPRB*LOG(ZTAUD) , _ONE_) , _TWO_)
1114
1115          ZDIFFD=1.66_JPRB
1116          ZTAUCLD(JL,JK,JRTM) = max(_ZERO_,ZTAUD*ZDIFFD)
1117        ENDIF
1118       
1119! #DB   IF (ZTAUCLD(JL,JK,JRTM).LT.00..OR.ZTAUCLD(JL,JK,JRTM).GT.75. .OR. &
1120! #DB &     (k2iii(JL)         .EQ.kio.AND.k2jjj(JL)         .EQ.kjo)     ) THEN
1121! #DB     IF (mod(jkjllw,20).EQ.0)                                                 &
1122! #DB &     write(6,600) JRTM,NLIQOPT,NICEOPT
1123! #DB               600  format('IN   RADLSW: CLOUD LONGWAVE OPTICAL PROPERTIES FOR RRTM, JRTM =',I3 &
1124! #DB &                        ,'   NLIQOPT =',I3,'   NICEOPT =',I3,/                                &
1125! #DB &                        ,'    i    j   JL   JK',7x,'ZTAU'  ,6x,'ZFLWP' ,6x,'ZFIWP'            &
1126! #DB &                        ,                       5x,'ZRADLP',5x,'ZRADIP',6x,'PQIWP',6x,'PQLWP')
1127! #DB             jkjllw=jkjllw+1
1128! #DB       write(6,601) k2iii(JL),k2jjj(JL),JL,IKL,ZTAUCLD(JL,JK,JRTM), ZFLWP(JL)    , ZFIWP(JL)    &
1129! #DB &                                                                ,ZRADLP(JL)    ,ZRADIP(JL)    &
1130! #DB &                                                                 ,PQIWP(JL,IKL), PQLWP(JL,IKL)
1131! #DB               601  format(4i5,10e11.3)
1132! #DB   ENDIF
1133
1134      ENDDO
1135    ENDDO
1136!  print *,'Radlsw after LW1 cloud optical properties for level JK=',JK
1137
1138  ENDIF
1139
1140ENDDO
1141
1142NUAER = NUA
1143NTRAER = NTRA
1144
1145!     ------------------------------------------------------------------
1146
1147!*         2.6    DIFFUSIVITY FACTOR OR SATELLITE VIEWING ANGLE
1148!                 ---------------------------------------------
1149
1150
1151DO JL = KIDIA,KFDIA
1152  ZVIEW(JL) = DIFF
1153  ZEMIT(JL) = _ZERO_
1154ENDDO
1155
1156!     ------------------------------------------------------------------
1157
1158!*         3.     CALL LONGWAVE RADIATION CODE
1159!                 ----------------------------
1160
1161
1162!*         3.1    FULL LONGWAVE RADIATION COMPUTATIONS
1163!                 ------------------------------------
1164
1165!print *,'Just before calling the radiation schemes'
1166!JL=KIDIA
1167!DO JK=1,KLEV
1168!  IKL=KLEV+1-JK
1169!  PRINT 9311,JK,PCLFR(JL,IKL),ZCLDLD(JL,JK),ZTAUCLD(JL,JK,1) &
1170!  & ,(ZTAU(JL,JSW,JK),ZOMEGA(JL,JSW,JK),ZCG(JL,JSW,JK),JSW=1,NSW) &
1171!  & ,(PAER(JL,JAE,JK),JAE=1,6)
11729311 format(1x,I2,2F8.5,26E12.5)
1173!END DO
1174!print *,'KLWRAD=',KLWRAD,'  LPHYLIN: ',LPHYLIN,'  LRRTM: ',LRRTM
1175
1176IF (.NOT.LPHYLIN) THEN
1177  IF ( .NOT. LRRTM) THEN
1178
1179     
1180    IF (KLWRAD .EQ. 2) THEN
1181      CALL OLW &
1182       & ( KIDIA, KFDIA , KLON  , KLEV &
1183       & , PCCO2, ZCLDLD, ZCLDLU &
1184       & , PDP  , ZDT0  , ZEMIS  &
1185       & , PAPH , POZON , PTH &
1186       & , PAER , PT    , ZVIEW , PQ &
1187       & , ZCOOLR,ZCOOLC, ZFLUX, ZFLUC &
1188       & )
1189       
1190    ELSE IF (KLWRAD .EQ. 0) THEN 
1191     
1192      CALL LW &
1193       &( KIDIA , KFDIA , KLON  , KLEV , KMODE &
1194       &, PCCO2 , ZCLDLD, ZCLDLU &
1195       &, PDP   , ZDT0  , ZEMIS , ZEMIW &
1196       &, ZPMB  , POZON , ZTL &
1197       &, PAER  , ZTAVE , ZVIEW , PQ &
1198       &, ZCOOLR, ZCOOLC, ZEMIT , ZFLUX, ZFLUC &
1199       &)
1200       
1201     END IF 
1202
1203  ELSE
1204
1205
1206!*         3.2    FULL LONGWAVE RADIATION COMPUTATIONS - RRTM
1207!                 ------------------------------------   ----
1208
1209!  i)  pass POZN (ozone mmr concentration) to RRTM; remove pressure
1210!      weighting applied to POZON in driverMC (below)
1211!  ii) pass ZEMIS and ZEMIW to RRTM; return ZEMIT from RRTM
1212!  iii)pass ZTAUCLD, cloud optical depths (water+ice) to RRTM,
1213!      computed from equations above
1214!  iv) pass ECRT arrays to RRTM arrays in interface routine ECRTATM
1215!      in module rrtm_ecrt.f
1216
1217    DO JL = KIDIA,KFDIA
1218      DO JK = 1, KLEV
1219        ZOZN(JL,JK) = POZON(JL,JK)/PDP(JL,JK)
1220      ENDDO
1221    ENDDO
1222
1223! #DB             jkjllw = 0
1224! #DB DO JL = KIDIA,KFDIA
1225! #DB DO JK = 1, KLEV
1226! #DB   IKL = KLEV + 1 - JK
1227! #DB      JAERmin=1
1228! #DB      JAERmax=6
1229! #DB      PAERmin=1000.
1230! #DB      PAERmax=0.
1231! #DB     jTAUCLDmin=1
1232! #DB     jTAUCLDmax=16
1233! #DB      TAUCLDmin=1000.
1234! #DB      TAUCLDmax=0.
1235! #DB   DO JRTM=1,16
1236! #DB    IF (ZTAUCLD(JL,JK,JRTM).LT.TAUCLDmin)                      THEN
1237! #DB      jTAUCLDmin=JRTM
1238! #DB       TAUCLDmin=ZTAUCLD(JL,JK,JRTM)
1239! #DB    END IF
1240! #DB    IF (ZTAUCLD(JL,JK,JRTM).GT.TAUCLDmax)                      THEN
1241! #DB      jTAUCLDmax=JRTM
1242! #DB       TAUCLDmax=ZTAUCLD(JL,JK,JRTM)
1243! #DB    END IF
1244! #DB   ENDDO
1245! #DB   DO JAE =1,6
1246! #DB    IF (PAER(JL,JAE,JK).LT.PAERmin)                            THEN
1247! #DB      JAERmin=JAE
1248! #DB      PAERmin=PAER(JL,JAE,JK)
1249! #DB    END IF
1250! #DB    IF (PAER(JL,JAE,JK).GT.PAERmax)                            THEN
1251! #DB      JAERmax=JAE
1252! #DB      PAERmax=PAER(JL,JAE,JK)
1253! #DB    END IF
1254! #DB   ENDDO
1255! #DB   IF (TAUCLDmin.LT.0..OR.TAUCLDmax.GT.75.)                    THEN
1256! #DB     IF (mod(jkjllw,20).EQ.0)                                                         &
1257! #DB &     write(6,515)
1258! #DB               515  format('IN   RADLSW: BEFORE RRTM_RRTM_140GP CALL',/               &
1259! #DB &                         ,'    i    j   JL   JK',7x,'ZOZN',5x,'ZCLDSW'              &
1260! #DB &                         ,4x,'ZTAUCLDmin',4x,'ZTAUCLDmax'                           &
1261! #DB &                         ,4x,'PAERmin',4x,'PAERmax',6x,'PQIWP',6x,'PQLWP',9x,'PQ')
1262! #DB             jkjllw = jkjllw + 1
1263! #DB       write(6,602) k2iii(JL),k2jjj(JL),JL,JK,ZOZN(JL,JK),ZCLDSW(JL,JK)               &
1264! #DB &                                           ,jTAUCLDmin,ZTAUCLD(JL,JK,jTAUCLDmin)    &
1265! #DB &                                           ,jTAUCLDmax,ZTAUCLD(JL,JK,jTAUCLDmax)    &
1266! #DB &                                           ,PAER(JL,JAERmin,JK),PAER(JL,JAERmax,JK) &
1267! #DB &                                           ,PQIWP(JL,IKL),PQLWP(JL,IKL),PQ(JL,IKL)
1268! #DB               602  format(4i5,2e11.3,2(i3,e11.3),8e11.3)
1269! #DB   ENDIF
1270! #DB ENDDO
1271! #DB ENDDO
1272
1273!    print *,'Just before calling RRTM'
1274
1275    CALL RRTM_RRTM_140GP &
1276     &( KIDIA , KFDIA , KLON  , KLEV &
1277     &, PAER  , PAPH  , PAP   &
1278     &, PTS   , PTH   , PT     &
1279     &, ZEMIS , ZEMIW &
1280     &, PQ    , PCCO2 , ZOZN  , ZCLDSW  , ZTAUCLD &
1281     &, ZEMIT , ZFLUX , ZFLUC , ZTCLEAR &
1282     &)
1283     
1284!     print *,'just after RRTM'   
1285
1286  ENDIF
1287ELSE
1288  ZCOOLR(:,:) = _ZERO_
1289  ZCOOLC(:,:) = _ZERO_
1290  ZEMIT (:)   = _ZERO_
1291  ZFLUX(:,:,:)= _ZERO_
1292  ZFLUC(:,:,:)= _ZERO_
1293ENDIF
1294
1295!     ------------------------------------------------------------------
1296
1297!*         4.     CALL SHORTWAVE RADIATION CODE
1298!                 -----------------------------
1299
1300
1301ZRMUZ=_ZERO_
1302DO JL = KIDIA,KFDIA
1303  ZRMUZ = MAX (ZRMUZ, ZMU0(JL))
1304ENDDO
1305
1306IF (ZRMUZ > _ZERO_) THEN
1307!print *,'CALL SW'   
1308
1309  CALL SW &
1310   &( KIDIA , KFDIA , KLON  , KLEV  , KAER &
1311   &, PRII0 , PCCO2 , ZPSOL , ZALBD , ZALBP , PQ   , PQS &
1312   &, ZMU0  , ZCG   , ZCLDSW, PDP   , ZOMEGA, ZOZ  , ZPMB &
1313   &, ZTAU  , ZTAVE , PAER &
1314   &, ZHEATR, ZFSDWN, ZFSUP , ZHEATC, ZFCDWN, ZFCUP &
1315   &, ZFSDNN, ZFSDNV, ZFSUPN, ZFSUPV &
1316   &, ZFCDNN, ZFCDNV, ZFCUPN, ZFCUPV &
1317   &, ZSUDU , ZUVDF , ZPARF &
1318   &)
1319   
1320!     print *,'just after SW'   
1321!     JL=KIDIA
1322!     print *,'just after SW UV & PAR ',ZUVDF(JL),ZPARF(JL)
1323
1324ENDIF
1325
1326! #DB             jkjlsw = 0
1327! #DB DO JL = KIDIA,KFDIA
1328! #DB DO JK = 1,KLEV
1329! #DB   IF (k2iii(JL).EQ.kio.AND.k2jjj(JL).EQ.kjo) THEN
1330! #DB     IF (mod(jkjlsw,20).EQ.0)                                                &
1331! #DB       write(6,525)
1332! #DB               525 format('IN   RADLSW: AFTER  SW              CALL',/       &
1333! #DB &                       ,'    i    j   JL   JK'                             &
1334! #DB &                       ,4x,'ZFCDWN',5x,'ZFCUP' ,4x,'ZFSDNN',4x,'ZFCDNN'    &
1335! #DB &                       ,4x,'ZFSDNV',4x,'ZFSUPN',4x,'ZFSUPV',4x,'ZFCDNN'    &
1336! #DB &                       ,4x,'ZFCDNV',4x,'ZFCUPN',4x,'ZFCUPV')
1337! #DB             jkjlsw = jkjlsw + 1
1338! #DB       write(6,605) k2iii(JL),k2jjj(JL),JL,JK,ZFCDWN(JL,JK),ZFCUP(JL,JK)     &
1339! #DB &               ,ZFSDNN(JL),ZFCDNN(JL),ZFSDNV(JL),ZFSUPN(JL),ZFSUPV(JL)     &
1340! #DB &               ,ZFCDNN(JL),ZFCDNV(JL),ZFCUPN(JL),ZFCUPV(JL)
1341! #DB               605  format(4i5,11e10.3)
1342! #DB   ENDIF
1343! #DB ENDDO
1344! #DB ENDDO
1345
1346!     ------------------------------------------------------------------
1347
1348!*         5.     FILL UP THE MODEL NET LW AND SW RADIATIVE FLUXES
1349!                 ------------------------------------------------
1350
1351
1352DO JKL = 1 , KLEV+1
1353  JK = KLEV+1 + 1 - JKL
1354  DO JL = KIDIA,KFDIA
1355!    print 9506,JK,ZFSDWN(JL,JK),ZFSUP(JL,JK),ZFLUX(JL,1,JK),ZFLUX(JL,2,JK) &
1356!    & , ZFCDWN(JL,JK),ZFCUP(JL,JK),ZFLUC(JL,1,JK),ZFLUC(JL,2,JK)
13579506 format(1x,I3,8f10.3)   
1358 
1359    CPFLS(JL,JKL) =CPFLS(JL,JKL) +ZWGHT*(ZFSDWN(JL,JK) - ZFSUP(JL,JK))
1360    CPFLT(JL,JKL) =CPFLT(JL,JKL) +ZWGHT*(- ZFLUX(JL,1,JK) - ZFLUX(JL,2,JK))
1361    CPFCS(JL,JKL) =CPFCS(JL,JKL) +ZWGHT*(ZFCDWN(JL,JK)  - ZFCUP(JL,JK))
1362    CPFCT(JL,JKL) =CPFCT(JL,JKL) +ZWGHT*(- ZFLUC(JL,1,JK) - ZFLUC(JL,2,JK))
1363    CPFDCT(JL,JKL)=CPFDCT(JL,JKL)+ZWGHT*ZFLUC(JL,2,JK)
1364    CPFUCT(JL,JKL)=CPFUCT(JL,JKL)+ZWGHT*ZFLUC(JL,1,JK)
1365    CPFDLT(JL,JKL)=CPFDLT(JL,JKL)+ZWGHT*ZFLUX(JL,2,JK)
1366    CPFULT(JL,JKL)=CPFULT(JL,JKL)+ZWGHT*ZFLUX(JL,1,JK)
1367    CPFDCS(JL,JKL)=CPFDCS(JL,JKL)+ZWGHT*ZFCDWN(JL,JK)
1368    CPFUCS(JL,JKL)=CPFUCS(JL,JKL)+ZWGHT*ZFCUP(JL,JK)
1369    CPFDLS(JL,JKL)=CPFDLS(JL,JKL)+ZWGHT*ZFSDWN(JL,JK)
1370    CPFULS(JL,JKL)=CPFULS(JL,JKL)+ZWGHT*ZFSUP(JL,JK)
1371  ENDDO
1372ENDDO
1373
1374DO JL = KIDIA,KFDIA
1375! print 9507,ZFSDWN(JL,1),ZSUDU(JL),ZUVDF(JL),ZPARF(JL)
13769507 format(1x,'SW Global Normal UV & PAR:',5f10.3)
1377 
1378  CPFRSOD(JL) = CPFRSOD(JL) + ZWGHT*ZFSDWN(JL,1)
1379  CPEMIT (JL) = CPEMIT (JL) + ZWGHT*ZEMIT (JL)
1380  CPSUDU (JL) = CPSUDU (JL) + ZWGHT*ZSUDU (JL)
1381  CPUVDF (JL) = CPUVDF (JL) + ZWGHT*ZUVDF (JL)
1382  CPPARF (JL) = CPPARF (JL) + ZWGHT*ZPARF (JL)
1383 
1384  ASWBOX(JL,ICBOX) = -ZFSDWN(JL,KLEV+1) + ZFSUP(JL,KLEV+1)
1385  OLRBOX(JL,ICBOX) = -ZFLUX(JL,1,KLEV+1)
1386  SLWBOX(JL,ICBOX) = -ZFLUX(JL,2,1)
1387  SSWBOX(JL,ICBOX) = -ZFSDWN(JL,1)
1388  TAUBOX(JL,ICBOX) = ZTAUINT(JL)
1389  ZTCA(JL) = ZTCA(JL) + ZWGHT*ZCOL(JL)
1390!  print 9508,ICBOX,ASWBOX(JL,ICBOX),OLRBOX(JL,ICBOX),SLWBOX(JL,ICBOX) &
1391!  & ,SSWBOX(JL,ICBOX),TAUBOX(JL,ICBOX),ZCOL(JL),ZTCA(JL),ZTCC(JL)
13929508 format(1x,'radlsw',I3,5F10.3,1x,3F7.4) 
1393ENDDO
1394
1395
1396ENDDO
1397!
1398!-- end of box-type calculations
1399!     
1400 
1401DO JK = 1 , KLEV+1
1402  DO JL = KIDIA,KFDIA
1403    PFLS(JL,JK)  = CPFLS(JL,JK)
1404    PFLT(JL,JK)  = CPFLT(JL,JK)
1405    PFCS(JL,JK)  = CPFCS(JL,JK)
1406    PFCT(JL,JK)  = CPFCT(JL,JK)
1407    PFDCT(JL,JK) = CPFDCT(JL,JK)
1408    PFUCT(JL,JK) = CPFUCT(JL,JK)
1409    PFDLT(JL,JK) = CPFDLT(JL,JK)
1410    PFULT(JL,JK) = CPFULT(JL,JK)
1411    PFDCS(JL,JK) = CPFDCS(JL,JK)
1412    PFUCS(JL,JK) = CPFUCS(JL,JK)
1413    PFDLS(JL,JK) = CPFDLS(JL,JK)
1414    PFULS(JL,JK) = CPFULS(JL,JK)
1415  ENDDO
1416ENDDO
1417
1418DO JL = KIDIA,KFDIA
1419  PFRSOD(JL) = CPFRSOD(JL)
1420  PEMIT (JL) = CPEMIT (JL)
1421  PSUDU (JL) = CPSUDU (JL)
1422  PUVDF (JL) = CPUVDF (JL)
1423  PPARF (JL) = CPPARF (JL)
1424ENDDO
1425
1426!-- re-organize the box-tyoe output arrays in decreasing order of TAU
1427DO JL=KIDIA,KFDIA
1428  DO ICBOX=2,NBOX
1429    ZTOI=TAUBOX(JL,ICBOX)
1430    DO IMOV=ICBOX-1,1,-1
1431      IF(TAUBOX(JL,IMOV).LE.ZTOI) GO TO 8001
1432        TAUBOX(JL,IMOV+1)=TAUBOX(JL,IMOV)
1433    END DO
1434    IMOV=0
14358001 CONTINUE
1436    TAUBOX(JL,IMOV+1)=ZTOI
1437  END DO 
1438END DO
1439
1440!-- re-organize the box-type output arrays in decreasing order of ASW
1441DO JL=KIDIA,KFDIA
1442  DO ICBOX=2,NBOX
1443    ZASW=ASWBOX(JL,ICBOX)
1444    DO IMOV=ICBOX-1,1,-1
1445      IF(ASWBOX(JL,IMOV).LE.ZASW) GO TO 8002
1446        ASWBOX(JL,IMOV+1)=ASWBOX(JL,IMOV)
1447    END DO
1448    IMOV=0
14498002 CONTINUE
1450    ASWBOX(JL,IMOV+1)=ZASW
1451  END DO 
1452END DO
1453
1454!-- re-organize the box-tyoe output arrays in decreasing order of -OLR
1455DO JL=KIDIA,KFDIA
1456  DO ICBOX=2,NBOX
1457    ZOLR=OLRBOX(JL,ICBOX)
1458    DO IMOV=ICBOX-1,1,-1
1459      IF(OLRBOX(JL,IMOV).LE.ZOLR) GO TO 8003
1460        OLRBOX(JL,IMOV+1)=OLRBOX(JL,IMOV)
1461    END DO
1462    IMOV=0
14638003 CONTINUE
1464    OLRBOX(JL,IMOV+1)=ZOLR
1465  END DO 
1466END DO
1467
1468!-- re-organize the box-tyoe output arrays in decreasing order of SLW
1469DO JL=KIDIA,KFDIA
1470  DO ICBOX=2,NBOX
1471    ZSLW=SLWBOX(JL,ICBOX)
1472    DO IMOV=ICBOX-1,1,-1
1473      IF(SLWBOX(JL,IMOV).LE.ZSLW) GO TO 8004
1474        SLWBOX(JL,IMOV+1)=SLWBOX(JL,IMOV)
1475    END DO
1476    IMOV=0
14778004 CONTINUE
1478    SLWBOX(JL,IMOV+1)=ZSLW
1479  END DO 
1480END DO
1481
1482!-- re-organize the box-type output arrays in decreasing order of -SSW
1483DO JL=KIDIA,KFDIA
1484  DO ICBOX=2,NBOX
1485    ZSSW=SSWBOX(JL,ICBOX)
1486    DO IMOV=ICBOX-1,1,-1
1487      IF(SSWBOX(JL,IMOV).LE.ZSSW) GO TO 8005
1488        SSWBOX(JL,IMOV+1)=SSWBOX(JL,IMOV)
1489    END DO
1490    IMOV=0
14918005 CONTINUE
1492    SSWBOX(JL,IMOV+1)=ZSSW
1493  END DO 
1494END DO
1495
1496!-- put all arrays as positive numbers for plotting
1497DO JL=KIDIA,KFDIA
1498  DO ICBOX=1,NBOX
1499    ASWBOX(JL,ICBOX)=-ASWBOX(JL,ICBOX)
1500    OLRBOX(JL,ICBOX)=-OLRBOX(JL,ICBOX)
1501    SSWBOX(JL,ICBOX)=-SSWBOX(JL,ICBOX)
1502  END DO 
1503END DO
1504
1505!     --------------------------------------------------------------
1506
1507RETURN
1508END SUBROUTINE RADLSW
Note: See TracBrowser for help on using the repository browser.