File: C:\NOAA\NEMS_11731\src\atmos\phys\module_RA_RRTM.F90
1
2
3 MODULE MODULE_RA_RRTM
4
5
6
7
8
9
10
11 USE MODULE_INCLUDE
12
13 USE MODULE_CONSTANTS,ONLY : R,CP,PI,EPSQ,STBOLT,EP_2
14 USE MODULE_n_RADIATION_DRIVER, ONLY : n_RADINIT, n_GRRAD
15 USE MODULE_n_RADIATION_ASTRONOMY,ONLY : n_ASTRONOMY
16
17 USE OZNE_DEF, ONLY: LEVOZC, LATSOZP, BLATC, TIMEOZC, TIMEOZ, &
18 KOZC, DPHIOZC, LATSOZC, PL_COEFF, LEVOZP
19
20 USE MODULE_MP_ETANEW,ONLY : RHgrd,T_ICE,FPVS
21
22
23
24 IMPLICIT NONE
25
26
27
28 PRIVATE
29
30 PUBLIC :: RRTM,RRTM_INIT
31
32
33
34
35
36 REAL, PRIVATE,PARAMETER :: XSDmax=3.1, DXSD=.01
37 INTEGER, PRIVATE,PARAMETER :: NXSD=XSDmax/DXSD
38 REAL, DIMENSION(NXSD),PRIVATE,SAVE :: AXSD
39 REAL, PRIVATE :: RSQR
40 LOGICAL, PRIVATE,SAVE :: SDprint=.FALSE.
41
42
43 INTEGER, SAVE, DIMENSION(3) :: LTOP
44 REAL,SAVE,DIMENSION(4) :: PTOPC
45
46
47 REAL, PARAMETER :: &
48 & TRAD_ice=0.5*T_ice &
49 , ABSCOEF_W=800. &
50 , ABSCOEF_I=0. &
51 , Qconv=0.01e-3 &
52
53 , CTauCW=ABSCOEF_W*Qconv &
54 &, CTauCI=ABSCOEF_I*Qconv
55
56
57
58
59
60
61
62
63 CONTAINS
64
65
66
67
68 SUBROUTINE RRTM (NTIMESTEP,DT_INT,JDAT &
69 & ,NPHS,GLAT,GLON &
70 & ,NRADS,NRADL &
71 & ,DSG2,SGML2,PDSG1,PSGML1 &
72 & ,PT,PD &
73 & ,T,Q,CW,O3 &
74 & ,ALBEDO &
75 & ,F_ICE,F_RAIN &
76 & ,P_QV,P_QC,P_QR,P_QI,P_QS,P_QG &
77 & ,SM,CLDFRA &
78 & ,NUM_WATER,WATER &
79 & ,RLWTT,RSWTT &
80 & ,RLWIN,RSWIN &
81 & ,RSWINC,RSWOUT &
82 & ,RLWTOA,RSWTOA &
83 & ,CZMEAN,SIGT4 &
84 & ,CFRACL,CFRACM,CFRACH &
85 & ,ACFRST,NCFRST &
86 & ,ACFRCV,NCFRCV &
87 & ,CUPPT,SNOW,SI &
88 & ,HTOP,HBOT &
89 & ,TSKIN,Z0,SICE,F_RIMEF,MXSNAL,SGM,STDH,OMGALF &
90 & ,IMS,IME,JMS,JME &
91 & ,ITS,ITE,JTS,JTE &
92 & ,LM &
93 & ,MYPE )
94
95
96
97 IMPLICIT NONE
98
99
100
101 INTEGER,INTENT(IN) :: IME,IMS,ITE,ITS &
102 & ,JME,JMS,JTE,JTS &
103 & ,LM,MYPE &
104 & ,NTIMESTEP,DT_INT &
105 & ,NPHS,NRADL,NRADS &
106 & ,NUM_WATER
107
108 INTEGER,INTENT(IN) :: JDAT(8)
109
110 INTEGER,INTENT(IN) :: P_QV,P_QC,P_QR,P_QI,P_QS,P_QG
111
112 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: NCFRCV,NCFRST
113
114 REAL,INTENT(IN) :: PT
115
116 REAL,DIMENSION(1:LM),INTENT(IN) :: DSG2,PDSG1,PSGML1,SGML2
117
118 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: CUPPT &
119 ,GLAT,GLON &
120 ,PD,SM,SNOW,SI
121
122 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: ALBEDO
123
124 REAL,DIMENSION(IMS:IME,JMS:JME,LM),INTENT(IN) :: CW,O3,Q,T
125
126 REAL,DIMENSION(IMS:IME,JMS:JME,1:LM),INTENT(IN) :: F_ICE,F_RAIN
127
128 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: ACFRCV,ACFRST &
129 ,RLWIN,RLWTOA &
130 ,RSWIN,RSWOUT &
131 ,HBOT,HTOP &
132 ,RSWINC,RSWTOA
133
134 REAL,DIMENSION(IMS:IME,JMS:JME,LM),INTENT(INOUT) :: RLWTT,RSWTT
135
136 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: CFRACH,CFRACL &
137 ,CFRACM,CZMEAN &
138 ,SIGT4
139
140 REAL,DIMENSION(IMS:IME,JMS:JME,LM,NUM_WATER),INTENT(INOUT) :: WATER
141
142 REAL,DIMENSION(IMS:IME,JMS:JME,1:LM),INTENT(OUT) :: CLDFRA
143
144 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: TSKIN,Z0,SICE &
145 ,MXSNAL,STDH
146
147 REAL,DIMENSION(1:LM+1),INTENT(IN) :: SGM
148
149 REAL,DIMENSION(IMS:IME,JMS:JME,1:LM),INTENT(IN) :: F_RIMEF,OMGALF
150
151
152
153
154
155 LOGICAL :: LSLWR, LSSAV, LDIAG3D, LPRNT, SASHAL, LSSWR
156
157 INTEGER,PARAMETER :: IFLIP=0
158
159 INTEGER :: NP3D, ISOL, ICO2, ICWP, IALB, IEMS, IAER, ALBTYPE, LONR, &
160 LATS_NODE_R, LATR, IPT_LATS_NODE_R, NFXR, NTRAC, KFLIP, &
161 I, L, J, K, NTOZ, NCLDX, NTCW, IOVR_SW, IOVR_LW
162
163 INTEGER,SAVE :: K1OZ, K2OZ
164
165 INTEGER,DIMENSION(JTS:JTE) :: LONSPERLAR, GLOBAL_LATS_R
166
167 REAL*8 :: FHSWR, FHLWR, FHAER, SOLCON,SLAG, SDEC, CDEC,DTSW, DTLW, RTvR
168
169 REAL*8,SAVE :: FACOZ
170
171 REAL*8,DIMENSION(1) :: FLGMIN_L, CV, CVB, CVT,XLAT, HPRIME_V, TSEA, &
172 TISFC, FICE, ZORL, SLMSK, SNWDPH, SNCOVR, &
173 SNOALB, ALVSF1, ALNSF1, ALVWF1, ALNWF1, &
174 FACSF1, FACWF1, SFCNSW, SFCDSW, SFALB, &
175 SFCDLW, TSFLW, TOAUSW, TOADSW, SFCCDSW, &
176 TOAULW, SFCUSW
177
178 REAL*8,DIMENSION(LM) :: CLDCOV_V,PRSL,PRSLK,GT,GQ, VVEL,F_ICEC, &
179 F_RAINC,R_RIME,TAUCLOUDS,CLDF
180
181 REAL*8,DIMENSION(LM+1) :: PRSI , RSGM
182
183 REAL*8,DIMENSION(JTS:JTE) :: COSLAT_R, SINLAT_R
184
185 REAL*8,DIMENSION(ITS:ITE,JTS:JTE) :: XLON, COSZEN, &
186 COSZDG, SFCALBEDO
187
188 REAL*8,DIMENSION(27) :: FLUXR_V
189
190 REAL*8,DIMENSION(1,LM,3) :: GR1
191
192 REAL*8,DIMENSION(LM) :: SWH, HLW
193
194 REAL,DIMENSION(ITS:ITE,JTS:JTE,27) :: FLUXR_VIJ
195
196 REAL :: BLATC4
197
198 REAL,DIMENSION(ITS:ITE,JTS:JTE,1:LM+1) :: P8W
199
200 REAL,DIMENSION(ITS:ITE,JTS:JTE,1:LM) :: P_PHY
201
202 LOGICAL,SAVE :: FIRST
203 DATA FIRST / .TRUE. /
204
205 INTEGER :: DAYS(13), IDAY, IMON, MIDMON, ID
206
207 INTEGER, SAVE :: MIDM, MIDP
208
209 LOGICAL :: CHANGE
210
211 DATA DAYS / 31,28,31,30,31,30,31,31,30,31,30,31,30 /
212
213 REAL :: ZEN,DZEN,ALB1,ALB2
214
215 INTEGER :: IR,IQ,JX
216
217 REAL,PARAMETER :: TWENTY=20.0, &
218 HP537=0.537, &
219 ONE=1., &
220 DEGRAD1=180.0/PI, &
221 H74E1=74.0, &
222 HAF=0.5, &
223 HNINETY=90., &
224 FIFTY=50., &
225 QUARTR=0.25, &
226 HNINE=9.0, &
227 HP1=0.1, &
228 H15E1=15.0
229 REAL,DIMENSION(20) :: ZA
230 REAL,DIMENSION(19) :: DZA
231 REAL,DIMENSION(21,20) :: ALBD
232 REAL,DIMENSION(21) :: TRN
233
234 DATA TRN/.00,.05,.10,.15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65, &
235 .70,.75,.80,.85,.90,.95,1.00/
236
237 DATA ALBD/.061,.062,.072,.087,.115,.163,.235,.318,.395,.472,.542, &
238 .604,.655,.693,.719,.732,.730,.681,.581,.453,.425,.061,.062,.070, &
239 .083,.108,.145,.198,.263,.336,.415,.487,.547,.595,.631,.656,.670, &
240 .652,.602,.494,.398,.370,.061,.061,.068,.079,.098,.130,.174,.228, &
241 .290,.357,.424,.498,.556,.588,.603,.592,.556,.488,.393,.342,.325, &
242 .061,.061,.065,.073,.086,.110,.150,.192,.248,.306,.360,.407,.444, &
243 .469,.480,.474,.444,.386,.333,.301,.290,.061,.061,.065,.070,.082, &
244 .101,.131,.168,.208,.252,.295,.331,.358,.375,.385,.377,.356,.320, &
245 .288,.266,.255,.061,.061,.063,.068,.077,.092,.114,.143,.176,.210, &
246 .242,.272,.288,.296,.300,.291,.273,.252,.237,.266,.220,.061,.061, &
247 .062,.066,.072,.084,.103,.127,.151,.176,.198,.219,.236,.245,.250, &
248 .246,.235,.222,.211,.205,.200, &
249 .061,.061,.061,.065,.071,.079,.094,.113,.134,.154,.173, &
250 .185,.190,.193,.193,.190,.188,.185,.182,.180,.178,.061,.061,.061, &
251 .064,.067,.072,.083,.099,.117,.135,.150,.160,.164,.165,.164,.162, &
252 .160,.159,.158,.157,.157,.061,.061,.061,.062,.065,.068,.074,.084, &
253 .097,.111,.121,.127,.130,.131,.131,.130,.129,.127,.126,.125,.122, &
254 .061,.061,.061,.061,.062,.064,.070,.076,.085,.094,.101,.105,.107, &
255 .106,.103,.100,.097,.096,.095,.095,.095,.061,.061,.061,.060,.061, &
256 .062,.065,.070,.075,.081,.086,.089,.090,.088,.084,.080,.077,.075, &
257 .074,.074,.074,.061,.061,.060,.060,.060,.061,.063,.065,.068,.072, &
258 .076,.077,.076,.074,.071,.067,.064,.062,.061,.061,.061,.061,.061, &
259 .060,.060,.060,.060,.061,.062,.065,.068,.069,.069,.068,.065,.061, &
260 .058,.055,.054,.053,.052,.052, &
261 .061,.061,.060,.060,.060,.060,.060,.060,.062,.065,.065, &
262 .063,.060,.057,.054,.050,.047,.046,.045,.044,.044,.061,.061,.060, &
263 .060,.060,.059,.059,.059,.059,.059,.058,.055,.051,.047,.043,.039, &
264 .035,.033,.032,.031,.031,.061,.061,.060,.060,.060,.059,.059,.058, &
265 .057,.056,.054,.051,.047,.043,.039,.036,.033,.030,.028,.027,.026, &
266 .061,.061,.060,.060,.060,.059,.059,.058,.057,.055,.052,.049,.045, &
267 .040,.036,.032,.029,.027,.026,.025,.025,.061,.061,.060,.060,.060, &
268 .059,.059,.058,.056,.053,.050,.046,.042,.038,.034,.031,.028,.026, &
269 .025,.025,.025,.061,.061,.060,.060,.059,.058,.058,.057,.055,.053, &
270 .050,.046,.042,.038,.034,.030,.028,.029,.025,.025,.025/
271
272 DATA ZA/90.,88.,86.,84.,82.,80.,78.,76.,74.,70.,66.,62.,58.,54., &
273 50.,40.,30.,20.,10.,0.0/
274
275 DATA DZA/8*2.0,6*4.0,5*10.0/
276
277 REAL :: ALBD0,ALVD1,ALND1
278
279 REAL,DIMENSION(1) :: ALVB,ALNB,ALVD,ALND
280
281 INTEGER :: IRTN, IERROR, o3clm_unit
282
283 REAL :: RJDAY, WEI2M, WEI1M, WEI1S, WEI2S, BLTO, BLNO
284
285 INTEGER :: JDOY, JDAY, JDOW, MMM, MMP, MM, IRET, MONEND, &
286 MON1, IS2, ISX, KPD9, IS1, NN, MON2, MON, IS, &
287 LUGB, LEN, M1, M2, K1, K2, JMSK, IMSK
288
289 INTEGER :: KPDALB(4)
290
291 CHARACTER*500 :: FNALBC,FNALBC2,FNMSKH
292
293 REAL :: ALBCLM(1,4), ALFCLM(1,2), &
294 DAYHF(13)
295
296 DATA DAYHF/ 15.5, 45.0, 74.5,105.0,135.5,166.0, &
297 196.5,227.5,258.0,288.5,319.0,349.5,380.5/
298
299 REAL,ALLOCATABLE :: ALB(:,:,:), ALF(:,:)
300
301 INTEGER :: MON1S, MON2S, SEA1S, SEA2S, SEA1, SEA2
302
303 DATA MON1S/0/, MON2S/0/, SEA1S/0/, SEA2S/0/
304
305 SAVE ALB, ALF, MON1S, MON2S, SEA1S, SEA2S, DAYHF, K1, K2, M1, M2
306
307 REAL :: ALBLMX,ALBLMN,ALBOMX,ALBOMN,ALBSMX, &
308 ALBSMN,ALBIMX,ALBIMN,ALBJMX,ALBJMN, &
309 EPSALB,PERCRIT
310
311 REAL :: WV,QICE,QCLD,CLFR,ESAT,QSAT,RHUM,RHtot,ARG,SDM, &
312 PMOD,CONVPRATE,CLSTP,P1,P2,CC1,CC2,CLDMAX,CL1,CL2, &
313 CR1,DPCL,PRS1,PRS2,DELP,TCLD,CTau,CFSmax,CFCmax, &
314 CFRAVG,TDUM
315
316 INTEGER :: IXSD,NTSPH,NRADPP,NC,NMOD,LCNVT,LCNVB,NLVL,MALVL, &
317 LLTOP,LLBOT,KBT2,KTH1,KBT1,KTH2,KTOP1,LM1,LL
318
319 REAL, PARAMETER :: EPSQ1=1.E-5,EPSQ=1.E-12,EPSO3=1.E-10,H0=0., &
320 H1=1.,HALF=.5,T0C=273.15,CUPRATE=24.*1000., &
321 HPINC=HALF*1.E1, CLFRmin=0.01, TAUCmax=4.161, &
322 XSDmin=-XSDmax, DXSD1=-DXSD, STSDM=0.01, &
323 CVSDM=.04,DXSD2=HALF*DXSD,DXSD2N=-DXSD2,PCLDY=0.25
324
325 REAL,DIMENSION(10),SAVE :: CC,PPT
326 LOGICAL, SAVE :: CNCLD=.TRUE.
327
328 DATA CC/0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0/
329 DATA PPT/0.,.14,.31,.70,1.6,3.4,7.7,17.,38.,85./
330
331 REAL,DIMENSION(0:LM) :: CLDAMT
332
333 LOGICAL :: BITX,BITY,BITZ,BITW,BIT1,BIT2,NEW_CLOUD
334
335 REAL :: CTHK(3)
336 DATA CTHK/20000.0,20000.0,20000.0/
337
338 REAL,DIMENSION(ITS:ITE,JTS:JTE,3):: CLDCFR
339 INTEGER,DIMENSION(ITS:ITE,JTS:JTE,3):: MBOT,MTOP
340
341 REAL,DIMENSION(ITS:ITE,JTS:JTE):: CUTOP,CUBOT
342
343 REAL,DIMENSION(ITS:ITE,JTS:JTE,LM) :: TauCI &
344 ,CSMID,CCMID
345
346 INTEGER,DIMENSION(ITS:ITE,JTS:JTE,LM+1) :: KTOP, KBTM
347
348 REAL,DIMENSION(ITS:ITE,JTS:JTE,LM+1) :: CAMT
349
350 INTEGER,DIMENSION(ITS:ITE,JTS:JTE) :: NCLDS, KCLD
351
352 REAL,DIMENSION(ITS:ITE,JTS:JTE,LM) :: TAUTOTAL
353
354 INTEGER :: NKTP,NBTM,NCLD,LML
355
356 REAL :: CLFR1,TauC,QSUM,DELPTOT
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449 =5
450
451
452
453 =0
454
455 =0
456
457
458 =1
459
460
461 =1
462
463
464 =0
465
466
467 = 11
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483 =0.
484
485
486
487
488
489 =27
490 =3
491 =.FALSE.
492 =.FALSE.
493 =.FALSE.
494 SASHAL=.FALSE.
495 =0
496
497 =1
498 =3
499
500 =1
501
502 =1
503
504
505
506
507 =0
508
509 =FLOAT(NRADS*DT_INT)/3600.
510 =FLOAT(NRADL*DT_INT)/3600.
511 =FLOAT(NRADL*DT_INT)
512 =FLOAT(NRADS*DT_INT)
513 =MOD(NTIMESTEP,NRADS)==0
514 LSLWR=MOD(NTIMESTEP,NRADL)==0
515
516
517
518 DO L=1,LM+1
519 RSGM(L)=SGM(L)
520 ENDDO
521
522 CALL n_RADINIT (RSGM, LM, IFLIP, NP3D, ISOL, ICO2, &
523 ICWP, IALB, IEMS, IAER, JDAT, MYPE, &
524 FHSWR, FHLWR, FHAER )
525
526 =ITE-ITS+1
527 LATS_NODE_R =JTE-JTS+1
528 LATR =1
529 IPT_LATS_NODE_R =1
530
531 DO J=JTS,JTE
532 GLOBAL_LATS_R(J)= J-JTS+1
533 LONSPERLAR(J) = ITE-ITS+1
534 SINLAT_R(J) = SIN(GLAT( (ITS+ITE)/2 ,J))
535 COSLAT_R(J) = SQRT( 1.d0 - SINLAT_R(J)*SINLAT_R(J) )
536 DO I=ITS,ITE
537 XLON(I,J) = GLON(I,J)
538 SFCALBEDO(I,J) = ALBEDO(I,J)
539 ENDDO
540 ENDDO
541
542 CALL n_ASTRONOMY &
543
544 ( LONSPERLAR, GLOBAL_LATS_R, SINLAT_R, COSLAT_R, XLON, &
545 FHSWR, JDAT, NRADS, &
546 LONR, LATS_NODE_R, LATR, IPT_LATS_NODE_R, LSSWR, &
547
548 , SLAG, SDEC, CDEC, COSZEN, COSZDG &
549 )
550
551
552
553
554
555 IF (NTOZ .LE. 0) THEN
556 = 17
557 LATSOZC = 18
558 BLATC = -85.0
559 TIMEOZC = 12
560 LATSOZP = 2
561 LEVOZP = 1
562 TIMEOZ = 1
563 PL_COEFF = 0
564 ENDIF
565 DPHIOZC = -(BLATC+BLATC)/(LATSOZC-1)
566
567
568
569 IF (NTOZ .LE. 0) THEN
570
571 = JDAT(3)
572 IMON = JDAT(2)
573 MIDMON = DAYS(IMON)/2 + 1
574 CHANGE = FIRST .OR.( (IDAY .EQ. MIDMON) .AND. (JDAT(5).EQ.0) )
575
576 IF (CHANGE) THEN
577 IF (IDAY .LT. MIDMON) THEN
578 K1OZ = MOD(IMON+10,12) + 1
579 MIDM = DAYS(K1OZ)/2 + 1
580 K2OZ = IMON
581 MIDP = DAYS(K1OZ) + MIDMON
582 ELSE
583 K1OZ = IMON
584 MIDM = MIDMON
585 K2OZ = MOD(IMON,12) + 1
586 MIDP = DAYS(K2OZ)/2 + 1 + DAYS(K1OZ)
587 ENDIF
588 ENDIF
589
590 IF (IDAY .LT. MIDMON) THEN
591 ID = IDAY + DAYS(K1OZ)
592 ELSE
593 ID = IDAY
594 ENDIF
595 FACOZ = REAL (ID-MIDM) / REAL (MIDP-MIDM)
596
597 ENDIF
598
599
600
601
602
603
604
605
606
607
608 =NINT(3600./FLOAT(DT_INT))
609 NRADPP=MIN(NRADS,NRADL)
610 CLSTP=1.0*NRADPP/NTSPH
611 CONVPRATE=CUPRATE/CLSTP
612
613 =LM-1
614
615 DO J=JTS,JTE
616 DO I=ITS,ITE
617
618 (I,J,1)=PT
619
620 DO K=1,LM
621 P8W(I,J,K+1)=P8W(I,J,K)+PDSG1(K)+DSG2(K)*PD(I,J)
622 P_PHY(I,J,K)=SGML2(K)*PD(I,J)+PSGML1(K)
623 CCMID(I,J,K)=0.
624 CSMID(I,J,K)=0.
625 ENDDO
626 ENDDO
627 ENDDO
628
629 DO K=1,LM
630 DO J=JTS,JTE
631 DO I=ITS,ITE
632 CLDFRA(I,J,K)=0.
633 TAUTOTAL(I,J,K)=0.
634 ENDDO
635 ENDDO
636 ENDDO
637
638 DO J=JTS,JTE
639 DO I=ITS,ITE
640 CFRACH(I,J)=0.
641 CFRACL(I,J)=0.
642 CFRACM(I,J)=0.
643 CZMEAN(I,J)=0.
644 SIGT4(I,J)=0.
645 ENDDO
646 ENDDO
647
648 DO K=1,3
649 DO J=JTS,JTE
650 DO I=ITS,ITE
651 CLDCFR(I,J,K)=0.
652 MTOP(I,J,K)=0
653 MBOT(I,J,K)=0
654 ENDDO
655 ENDDO
656 ENDDO
657
658 DO J=JTS,JTE
659 DO I=ITS,ITE
660 CUTOP(I,J)=LM+1-HTOP(I,J)
661 CUBOT(I,J)=LM+1-HBOT(I,J)
662 ENDDO
663 ENDDO
664
665
666
667
668
669
670
671
672
673
674 DO J=JTS,JTE
675 DO I=ITS,ITE
676
677 DO 255 L=1,LM
678
679 =MAX(EPSQ,Q(I,J,L))/(1.-MAX(EPSQ,Q(I,J,L)))
680
681 =MAX(WATER(I,J,L,P_QS),0.)
682
683 =QICE+MAX(WATER(I,J,L,P_QC),0.)
684
685 IF (QCLD .LE. EPSQ) GO TO 255
686 =H0
687
688 =MAX(EPSQ,Q(I,J,L))/(1.-MAX(EPSQ,Q(I,J,L)))
689
690
691
692 =1000.*FPVS(T(I,J,L))
693 =EP_2*ESAT/(P_PHY(I,J,L)-ESAT)
694
695 =WV/QSAT
696
697
698
699 =(WV+QCLD)/QSAT
700
701 =NINT(CUTOP(I,J))
702 LCNVT=MIN(LM,LCNVT)
703 LCNVB=NINT(CUBOT(I,J))
704 LCNVB=MIN(LM,LCNVB)
705 IF (L.GE.LCNVT .AND. L.LE.LCNVB) THEN
706 SDM=CVSDM
707 ELSE
708 SDM=STSDM
709 ENDIF
710 ARG=(RHtot-RHgrd)/SDM
711 IF (ARG.LE.DXSD2 .AND. ARG.GE.DXSD2N) THEN
712 CLFR=HALF
713 ELSE IF (ARG .GT. DXSD2) THEN
714 IF (ARG .GE. XSDmax) THEN
715 CLFR=H1
716 ELSE
717 IXSD=INT(ARG/DXSD+HALF)
718 IXSD=MIN(NXSD, MAX(IXSD,1))
719 CLFR=HALF+AXSD(IXSD)
720 ENDIF
721 ELSE
722 IF (ARG .LE. XSDmin) THEN
723 CLFR=H0
724 ELSE
725 IXSD=INT(ARG/DXSD1+HALF)
726 IXSD=MIN(NXSD, MAX(IXSD,1))
727 CLFR=HALF-AXSD(IXSD)
728 IF (CLFR .LT. CLFRmin) CLFR=H0
729 ENDIF
730 ENDIF
731 (I,J,L)=CLFR
732
733 CONTINUE
734
735 ENDDO
736 ENDDO
737
738
739
740
741
742
743
744
745
746
747
748
749
750 IF (CNCLD) THEN
751
752 DO J=JTS,JTE
753 DO I=ITS,ITE
754
755
756
757
758 IF (CUBOT(I,J)-CUTOP(I,J) .GT. 1.0) THEN
759
760 =CC(1)
761 PMOD=CUPPT(I,J)*CONVPRATE
762 IF (PMOD .GT. PPT(1)) THEN
763 DO NC=1,10
764 IF(PMOD.GT.PPT(NC)) NMOD=NC
765 ENDDO
766 IF (NMOD .GE. 10) THEN
767 CLFR=CC(10)
768 ELSE
769 CC1=CC(NMOD)
770 CC2=CC(NMOD+1)
771 P1=PPT(NMOD)
772 P2=PPT(NMOD+1)
773 CLFR=CC1+(CC2-CC1)*(PMOD-P1)/(P2-P1)
774 ENDIF
775 =MIN(H1, CLFR)
776 ENDIF
777
778
779
780 =NINT(CUTOP(I,J))
781 LCNVT=MIN(LM,LCNVT)
782 LCNVB=NINT(CUBOT(I,J))
783 LCNVB=MIN(LM,LCNVB)
784
785
786
787
788
789 DO L=LCNVT,LCNVB
790 ARG=MAX(H0, H1-CSMID(I,J,L))
791 CCMID(I,J,L)=MIN(ARG,CLFR)
792 ENDDO
793 ENDIF
794 ENDDO
795 ENDDO
796 ENDIF
797
798
799
800
801
802
803
804
805 DO I=ITS,ITE
806 DO J=JTS,JTE
807
808 =LM
809
810
811
812
813 (I,J,1)=LM+1
814 KBTM(I,J,1)=LM+1
815 CAMT(I,J,1)=1.0
816 KCLD(I,J)=2
817
818 DO 510 L=2,LM+1
819 CAMT(I,J,L)=0.0
820 KTOP(I,J,L)=1
821 KBTM(I,J,L)=1
822 510 CONTINUE
823
824
825
826
827
828
829
830
831
832
833
834
835 =.TRUE.
836
837 DO L=2,LML
838 LL=LML-L+1
839 =MAX(CCMID(I,J,LL),CSMID(I,J,LL))
840 =MAX(CCMID(I,J,LL+1),CSMID(I,J,LL+1))
841
842 IF (CLFR .GE. CLFRMIN) THEN
843
844 IF (NEW_CLOUD) THEN
845
846 IF(L==2.AND.CLFR1>=CLFRmin)THEN
847 KBTM(I,J,KCLD(I,J))=LL+1
848 CAMT(I,J,KCLD(I,J))=CLFR1
849 ELSE
850 KBTM(I,J,KCLD(I,J))=LL
851 CAMT(I,J,KCLD(I,J))=CLFR
852 ENDIF
853 NEW_CLOUD=.FALSE.
854 ELSE
855
856 (I,J,KCLD(I,J))=AMAX1(CAMT(I,J,KCLD(I,J)), CLFR)
857 ENDIF
858 ELSE IF (CLFR1 .GE. CLFRMIN) THEN
859
860 IF (L .EQ. 2) THEN
861
862 (I,J,KCLD(I,J))=LL+1
863 CAMT(I,J,KCLD(I,J))=CLFR1
864 ENDIF
865 KTOP(I,J,KCLD(I,J))=LL+1
866 NEW_CLOUD=.TRUE.
867 KCLD(I,J)=KCLD(I,J)+1
868 CAMT(I,J,KCLD(I,J))=0.0
869 ENDIF
870
871 ENDDO
872
873
874
875
876 (I,J)=KCLD(I,J)-2
877 NCLD=NCLDS(I,J)
878
879
880
881 IF(NCLD.GE.1)THEN
882
883
884
885 DO 580 NC=2,NCLD+1
886
887 =0.
888 =0.0
889 NKTP=LM+1
890 NBTM=0
891 BITX=CAMT(I,J,NC).GE.CLFRMIN
892 NKTP=MIN(NKTP,KTOP(I,J,NC))
893 NBTM=MAX(NBTM,KBTM(I,J,NC))
894
895 DO LL=NKTP,NBTM
896 L=NBTM-LL+NKTP
897 IF(LL.GE.KTOP(I,J,NC).AND.LL.LE.KBTM(I,J,NC).AND.BITX)THEN
898 PRS1=P8W(I,J,L)*0.01
899 PRS2=P8W(I,J,L+1)*0.01
900 DELP=PRS2-PRS1
901 TCLD=T(I,J,L)-T0C
902 QSUM=QSUM+Q(I,J,L)*DELP*(PRS1+PRS2) &
903 & /(120.1612*SQRT(T(I,J,L)))
904
905 =0.
906
907 IF (CCMID(I,J,L) .GE. CLFRmin) THEN
908 IF (TCLD .GE. TRAD_ice) THEN
909 CTau=CTauCW
910 ELSE
911 CTau=CTauCI
912 ENDIF
913 ENDIF
914
915
916
917
918
919 =CTau+ABSCOEF_W*WATER(I,J,L,P_QC)+ABSCOEF_I*WATER(I,J,L,P_QS)
920
921 TAUTOTAL(I,J,L)=CTau*DELP
922 (I,J,L)=MAX(CCMID(I,J,LL),CSMID(I,J,LL))
923 =TauC+DELP*CTau
924
925 ENDIF
926 ENDDO
927
928
929 CONTINUE
930
931 ENDIF
932
933 ENDDO
934 ENDDO
935
936
937
938 (1)= 0.20d0
939 = 0.0d0
940
941 (1)=0.d0
942 (1)=0.d0
943 (1)=0.d0
944
945 DO J=JTS,JTE
946 DO I=ITS,ITE
947
948 (I,J)=COSZEN(I,J)
949 XLAT(1)=GLAT(I,J)
950 TSEA(1)=TSKIN(I,J)
951 TISFC(1)=TSKIN(I,J)
952 (1)=Z0(I,J)*100.d0
953 SNWDPH(1)=SI(I,J)
954 (1)=SNOW(I,J)/(SNOW(I,J)+70.)
955 (1)=MXSNAL(I,J)
956 HPRIME_V(1)=STDH(I,J)
957
958 IF(SICE(I,J).GT.0.5) THEN
959 (1)= 2.0d0
960 (1)=SICE(I,J)
961 ELSE
962 (1)= 1.0d0-SM(I,J)
963 (1)= 0.0d0
964 ENDIF
965
966
967
968 IF (ALBTYPE==0) THEN
969
970
971 =INT(TWENTY*HP537+ONE)
972 IF(CZMEAN(I,J).GT.0.0 .AND. SM(I,J).GT.0.5) THEN
973 ZEN=DEGRAD1*ACOS(MAX(CZMEAN(I,J),0.0))
974 IF(ZEN.GE.H74E1) JX=INT(HAF*(HNINETY-ZEN)+ONE)
975 IF(ZEN.LT.H74E1.AND.ZEN.GE.FIFTY) &
976 JX=INT(QUARTR*(H74E1-ZEN)+HNINE)
977 IF(ZEN.LT.FIFTY) JX=INT(HP1*(FIFTY-ZEN)+H15E1)
978 DZEN=-(ZEN-ZA(JX))/DZA(JX)
979 ALB1=ALBD(IQ,JX)+DZEN*(ALBD(IQ,JX+1)-ALBD(IQ,JX))
980 ALB2=ALBD(IQ+1,JX)+DZEN*(ALBD(IQ+1,JX+1)-ALBD(IQ+1,JX))
981 SFCALBEDO(I,J)=ALB1+TWENTY*(ALB2-ALB1)*(HP537-TRN(IQ))
982 ENDIF
983
984 (1) = SFCALBEDO(I,J)
985 ALND(1) = SFCALBEDO(I,J)
986
987 (1) = SFCALBEDO(I,J)
988 ALNB(1) = SFCALBEDO(I,J)
989
990
991
992
993
994
995 IF (SM(I,J).LT.0.5) THEN
996 IF (SFCALBEDO(I,J).LE.0.5) THEN
997 ALBD0=-18.0 * (0.5 - ACOS(CZMEAN(I,J))/PI)
998 ALBD0=EXP (ALBD0)
999 ALVD1=(ALVD(1) - 0.054313) / 0.945687
1000 ALND1=(ALND(1) - 0.054313) / 0.945687
1001 ALVB(1)=ALVD1 + (1.0 - ALVD1) * ALBD0
1002 ALNB(1)=ALND1 + (1.0 - ALND1) * ALBD0
1003
1004 (1)=MIN(0.5,ALVB(1))
1005 ALNB(1)=MIN(0.5,ALNB(1))
1006 END IF
1007 END IF
1008
1009
1010 (1)=ALVB(1)
1011 (1)=ALNB(1)
1012 (1)=ALVD(1)
1013 (1)=ALND(1)
1014 (1)=0.
1015 (1)=0.
1016
1017 ENDIF
1018
1019
1020 (1)=P8W(I,J,1)/1000.
1021
1022 DO L=1,LM
1023 PRSI(L+1)=P8W(I,J,L+1)/1000.
1024 (L)=P_PHY(I,J,L)/1000.
1025 (L)=(PRSL(L)*0.01d0)**(R/CP)
1026 RTvR=1./(R*(Q(I,J,L)*0.608+1.-CW(I,J,L))*T(I,J,L))
1027 VVEL(L)=OMGALF(I,J,L)*1000.d0*PRSL(L)*RTvR
1028 (L)=T(I,J,L)
1029 GQ(L)=Q(I,J,L)
1030
1031 if(ntoz.le.0) then
1032 gr1(1,l,1)=0.d0
1033 else
1034 gr1(1,l,1)=max(o3(i,j,l),epso3)
1035 endif
1036
1037 (1,L,2)=0.d0
1038 GR1(1,L,3)=CW(I,J,L)
1039 CLDCOV_V(L)=0.
1040 (L)=F_ICE(I,J,L)
1041 F_RAINC(L)=F_RAIN(I,J,L)
1042 R_RIME(L)=F_RIMEF(I,J,L)
1043 TAUCLOUDS(L)=TAUTOTAL(I,J,L)
1044 (L)=CLDFRA(I,J,L)
1045 ENDDO
1046
1047
1048 CALL n_GRRAD &
1049
1050 ( PRSI,PRSL,PRSLK,GT,GQ,GR1,VVEL,SLMSK, &
1051 XLON(I,J),XLAT,TSEA,SNWDPH,SNCOVR,SNOALB,ZORL,HPRIME_V, &
1052 ALVSF1,ALNSF1,ALVWF1,ALNWF1,FACSF1,FACWF1,FICE,TISFC, &
1053 SOLCON,COSZEN(I,J),COSZDG(I,J),K1OZ,K2OZ,FACOZ, &
1054 CV,CVT,CVB,IOVR_SW, IOVR_LW, F_ICEC, F_RAINC, R_RIME, FLGMIN_L, &
1055 NP3D,NTCW,NCLDX,NTOZ,NTRAC,NFXR, &
1056 DTLW,DTSW,LSSWR,LSLWR,LSSAV,LDIAG3D,SASHAL, &
1057 1, 1, LM, IFLIP, MYPE, LPRNT, &
1058
1059 ,LEVOZC,BLATC,DPHIOZC,TIMEOZC, &
1060 TAUCLOUDS,CLDF,ALBTYPE, &
1061
1062 ,SFCNSW,SFCDSW,SFALB, &
1063 HLW,SFCDLW,TSFLW, &
1064
1065 ,TOADSW,SFCCDSW,TOAULW,SFCUSW, &
1066
1067 ,CLDCOV_V &
1068 )
1069
1070 DO L=1,LM
1071 RLWTT(I,J,L)=HLW(L)
1072 RSWTT(I,J,L)=SWH(L)
1073 ENDDO
1074
1075 (I,J)=SFCDLW(1)
1076 RSWIN(I,J)=SFCDSW(1)
1077 RSWINC(I,J)=SFCCDSW(1)
1078 RSWOUT(I,J)=RSWIN(I,J)*SFALB(1)
1079 RLWTOA(I,J)=TOAULW(1)
1080 RSWTOA(I,J)=TOAUSW(1)
1081
1082 ENDDO
1083 ENDDO
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093 DO J=JTS,JTE
1094 DO I=ITS,ITE
1095
1096 DO L=0,LM
1097 CLDAMT(L)=0.
1098 ENDDO
1099
1100
1101
1102 DO 480 NLVL=1,3
1103 CLDMAX=0.
1104 MALVL=LM
1105 LLTOP=LM+1-LTOP(NLVL)
1106
1107
1108
1109
1110 IF(LLTOP.GE.LM)GO TO 480
1111
1112 IF(NLVL.GT.1)THEN
1113 LLBOT=LM+1-LTOP(NLVL-1)-1
1114 LLBOT=MIN(LLBOT,LM1)
1115 ELSE
1116 LLBOT=LM1
1117 ENDIF
1118
1119 DO 435 L=LLTOP,LLBOT
1120 CLDAMT(L)=AMAX1(CSMID(I,J,L),CCMID(I,J,L))
1121 IF(CLDAMT(L).GT.CLDMAX)THEN
1122 MALVL=L
1123 CLDMAX=CLDAMT(L)
1124 ENDIF
1125 435 CONTINUE
1126
1127
1128
1129
1130
1131
1132
1133
1134 =0.0
1135 CL2=0.0
1136 KBT1=LLBOT
1137 KBT2=LLBOT
1138 KTH1=0
1139 KTH2=0
1140
1141 DO 450 LL=LLTOP,LLBOT
1142 L=LLBOT-LL+LLTOP
1143 BIT1=.FALSE.
1144 CR1=CLDAMT(L)
1145 BITX=(P8W(I,J,L).GE.PTOPC(NLVL+1)).AND. &
1146 & (P8W(I,J,L).LT.PTOPC(NLVL)).AND. &
1147 & (CLDAMT(L).GT.0.0)
1148 BIT1=BIT1.OR.BITX
1149 IF(.NOT.BIT1)GO TO 450
1150
1151
1152
1153
1154
1155
1156
1157
1158 =BITX.AND.(KTH2.LE.0)
1159 BITZ=BITX.AND.(KTH2.GT.0)
1160
1161 IF(BITY)THEN
1162 KBT2=L
1163 KTH2=1
1164 ENDIF
1165
1166 IF(BITZ)THEN
1167 KTOP1=KBT2-KTH2+1
1168 DPCL=P_PHY(I,J,KBT2)-P_PHY(I,J,KTOP1)
1169 IF(DPCL.LT.CTHK(NLVL))THEN
1170 KTH2=KTH2+1
1171 ELSE
1172 KBT2=KBT2-1
1173 ENDIF
1174 ENDIF
1175 IF(BITX)CL2=AMAX1(CL2,CR1)
1176
1177
1178
1179
1180
1181 =.FALSE.
1182 BITY=BITX.AND.(CLDAMT(L-1).LE.0.0.OR. &
1183 P8W(I,J,L-1).LT.PTOPC(NLVL+1))
1184 BITZ=BITY.AND.CL1.GT.0.0
1185 BITW=BITY.AND.CL1.LE.0.0
1186 BIT2=BIT2.OR.BITY
1187 IF(.NOT.BIT2)GO TO 450
1188
1189
1190 IF(BITZ)THEN
1191 KBT1=INT((CL1*KBT1+CL2*KBT2)/(CL1+CL2))
1192 KTH1=INT((CL1*KTH1+CL2*KTH2)/(CL1+CL2))+1
1193 CL1=CL1+CL2-CL1*CL2
1194 ENDIF
1195
1196 IF(BITW)THEN
1197 KBT1=KBT2
1198 KTH1=KTH2
1199 CL1=CL2
1200 ENDIF
1201
1202 IF(BITY)THEN
1203 KBT2=LLBOT
1204 KTH2=0
1205 CL2=0.0
1206 ENDIF
1207 450 CONTINUE
1208
1209 (I,J,NLVL)=AMIN1(1.0,CL1)
1210 MTOP(I,J,NLVL)=MIN(KBT1,KBT1-KTH1+1)
1211 MBOT(I,J,NLVL)=KBT1
1212
1213 480 CONTINUE
1214
1215 ENDDO
1216 ENDDO
1217
1218 DO J=JTS,JTE
1219 DO I=ITS,ITE
1220
1221 CFRACL(I,J)=CLDCFR(I,J,1)
1222 CFRACM(I,J)=CLDCFR(I,J,2)
1223 CFRACH(I,J)=CLDCFR(I,J,3)
1224 IF(CNCLD)THEN
1225 CFSmax=0.
1226 =0.
1227 DO L=1,LM
1228 CFSmax=MAX(CFSmax, CSMID(I,J,L) )
1229 CFCmax=MAX(CFCmax, CCMID(I,J,L) )
1230 ENDDO
1231 ACFRST(I,J)=ACFRST(I,J)+CFSmax
1232 NCFRST(I,J)=NCFRST(I,J)+1
1233 ACFRCV(I,J)=ACFRCV(I,J)+CFCmax
1234 NCFRCV(I,J)=NCFRCV(I,J)+1
1235 ELSE
1236
1237
1238 =1.-(1.-CFRACL(I,J))*(1.-CFRACM(I,J))*(1.-CFRACH(I,J))
1239 ACFRST(I,J)=ACFRST(I,J)+CFRAVG
1240 NCFRST(I,J)=NCFRST(I,J)+1
1241 ENDIF
1242
1243 ENDDO
1244 ENDDO
1245
1246
1247
1248
1249
1250 IF(MOD(NTIMESTEP,NRADL)==0)THEN
1251
1252
1253
1254
1255 DO J=JTS,JTE
1256 DO I=ITS,ITE
1257
1258 =T(I,J,LM)
1259 SIGT4(I,J)=STBOLT*TDUM*TDUM*TDUM*TDUM
1260
1261 ENDDO
1262 ENDDO
1263
1264
1265
1266
1267 ENDIF
1268
1269 IF (FIRST) FIRST=.FALSE.
1270
1271
1272
1273 END SUBROUTINE RRTM
1274
1275
1276
1277 SUBROUTINE RRTM_INIT(EMISS,SFULL,SHALF,PPTOP, &
1278 & JULYR,MONTH,IDAY,GMT, &
1279 & CO2TF, &
1280 & IDS, IDE, JDS, JDE, KDS, KDE, &
1281 & IMS, IME, JMS, JME, KMS, KME, &
1282 & ITS, ITE, JTS, JTE, KTS, KTE )
1283
1284 IMPLICIT NONE
1285
1286 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
1287 & ,IMS,IME,JMS,JME,KMS,KME &
1288 & ,ITS,ITE,JTS,JTE,KTS,KTE
1289 INTEGER,INTENT(IN) :: JULYR,MONTH,IDAY,CO2TF
1290 REAL,INTENT(IN) :: GMT,PPTOP
1291 REAL,DIMENSION(KMS:KME),INTENT(IN) :: SFULL, SHALF
1292 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: EMISS
1293
1294 INTEGER :: I,IHRST,J,N
1295 REAL :: PCLD,XSD,PI,SQR2PI
1296 REAL :: SSLP=1013.25
1297 REAL, PARAMETER :: PTOP_HI=150.,PTOP_MID=350.,PTOP_LO=642., &
1298 & PLBTM=105000.
1299
1300
1301
1302
1303
1304
1305 (1)=0
1306 LTOP(2)=0
1307 LTOP(3)=0
1308
1309 DO N=1,KTE
1310 PCLD=(SSLP-PPTOP*10.)*SHALF(N)+PPTOP*10.
1311 IF(PCLD>=PTOP_LO)LTOP(1)=N
1312 IF(PCLD>=PTOP_MID)LTOP(2)=N
1313 IF(PCLD>=PTOP_HI)LTOP(3)=N
1314
1315 ENDDO
1316
1317
1318
1319 (1)=PLBTM
1320 PTOPC(2)=PTOP_LO*100.
1321 PTOPC(3)=PTOP_MID*100.
1322 PTOPC(4)=PTOP_HI*100.
1323
1324
1325
1326 DO J=JTS,JTE
1327 DO I=ITS,ITE
1328 EMISS(I,J) = 1.0
1329 ENDDO
1330 ENDDO
1331
1332
1333
1334
1335 =ACOS(-1.)
1336 SQR2PI=SQRT(2.*PI)
1337 RSQR=1./SQR2PI
1338 DO I=1,NXSD
1339 XSD=REAL(I)*DXSD
1340 AXSD(I)=GAUSIN(XSD)
1341 ENDDO
1342
1343
1344 END SUBROUTINE RRTM_INIT
1345
1346
1347
1348 REAL FUNCTION GAUSIN(xsd)
1349 REAL, PARAMETER :: crit=1.e-3
1350 REAL A1,A2,RN,B1,B2,B3,SUM,xsd
1351
1352
1353
1354
1355 =xsd*RSQR
1356 a2=exp(-0.5*xsd**2)
1357 rn=1.
1358 b1=1.
1359 b2=1.
1360 b3=1.
1361 sum=1.
1362 do while (b2 .gt. crit)
1363 rn=rn+1.
1364 b2=xsd**2/(2.*rn-1.)
1365 b3=b1*b2
1366 sum=sum+b3
1367 b1=b3
1368 enddo
1369 GAUSIN=a1*a2*sum
1370 RETURN
1371 END FUNCTION GAUSIN
1372
1373
1374
1375
1376 END MODULE MODULE_RA_RRTM
1377
1378
1379