12 & p_cldfrac,p_taucld,&
14 & p_coldry,p_wkl,p_wx,&
15 & p_tauaerl,pavel,p_tavel,pz,p_tz,p_tbound,k_nlayers,p_semiss,k_ireflect )
41 INTEGER(KIND=JPIM),
INTENT(IN) :: KLON
42 INTEGER(KIND=JPIM),
INTENT(IN) :: KLEV
43 INTEGER(KIND=JPIM),
INTENT(IN) :: K_IPLON
44 INTEGER(KIND=JPIM),
INTENT(OUT) :: KCLD
45 REAL(KIND=JPRB) ,
INTENT(IN) :: PAER(klon,6,klev)
46 REAL(KIND=JPRB) ,
INTENT(IN) :: PAPH(klon,klev+1)
47 REAL(KIND=JPRB) ,
INTENT(IN) :: PAP(klon,klev)
48 REAL(KIND=JPRB) ,
INTENT(IN) :: PTS(klon)
49 REAL(KIND=JPRB) ,
INTENT(IN) :: PTH(klon,klev+1)
50 REAL(KIND=JPRB) ,
INTENT(IN) :: PT(klon,klev)
51 REAL(KIND=JPRB) ,
INTENT(IN) :: P_ZEMIS(klon)
52 REAL(KIND=JPRB) ,
INTENT(IN) :: P_ZEMIW(klon)
53 REAL(KIND=JPRB) ,
INTENT(IN) :: PQ(klon,klev)
54 REAL(KIND=JPRB) ,
INTENT(IN) :: PCCO2
55 REAL(KIND=JPRB) ,
INTENT(IN) :: POZN(klon,klev)
56 REAL(KIND=JPRB) ,
INTENT(IN) :: PCLDF(klon,klev)
57 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAUCLD(klon,klev,
jpband)
59 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAU_LW(klon,klev,
nlw)
61 REAL(KIND=JPRB) ,
INTENT(OUT) :: PTCLEAR
62 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_CLDFRAC(
jplay)
63 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_TAUCLD(
jplay,
jpband)
64 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_COLDRY(
jplay)
67 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_TAUAERL(
jplay,
jpband)
68 REAL(KIND=JPRB) ,
INTENT(OUT) :: PAVEL(
jplay)
69 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_TAVEL(
jplay)
70 REAL(KIND=JPRB) ,
INTENT(OUT) :: PZ(0:
jplay)
71 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_TZ(0:
jplay)
72 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_TBOUND
73 INTEGER(KIND=JPIM),
INTENT(OUT) :: K_NLAYERS
74 REAL(KIND=JPRB) ,
INTENT(OUT) :: P_SEMISS(
jpband)
75 INTEGER(KIND=JPIM),
INTENT(OUT) :: K_IREFLECT
83 REAL(KIND=JPRB) :: ztauaer(5)
84 REAL(KIND=JPRB) :: zc1j(0:klev)
85 REAL(KIND=JPRB) :: Z_AMD
86 REAL(KIND=JPRB) :: Z_AMW
87 REAL(KIND=JPRB) :: Z_AMCO2
88 REAL(KIND=JPRB) :: Z_AMO
89 REAL(KIND=JPRB) :: Z_AMCH4
90 REAL(KIND=JPRB) :: Z_AMN2O
91 REAL(KIND=JPRB) :: Z_AMC11
92 REAL(KIND=JPRB) :: Z_AMC12
93 REAL(KIND=JPRB) :: Z_AVGDRO
94 REAL(KIND=JPRB) :: Z_GRAVIT
98 data z_amd / 28.970_jprb /
99 data z_amw / 18.0154_jprb /
100 data z_amco2 / 44.011_jprb /
101 data z_amo / 47.9982_jprb /
102 data z_amch4 / 16.043_jprb /
103 data z_amn2o / 44.013_jprb /
104 data z_amc11 / 137.3686_jprb /
105 data z_amc12 / 120.9140_jprb /
106 data z_avgdro/ 6.02214e23_jprb /
107 data z_gravit/ 9.80665e02_jprb /
109 INTEGER(KIND=JPIM) :: IATM, IMOL, IXMAX, J1, J2, JAE, JB, JK, JL, I_L
110 INTEGER(KIND=JPIM) :: I_NMOL, I_NXMOL
112 REAL(KIND=JPRB) :: Z_AMM, ZCLDLY, ZCLEAR, ZCLOUD, ZEPSEC
113 REAL(KIND=JPRB) :: ZHOOK_HANDLE
140 IF (
lhook)
CALL dr_hook(
'RRTM_ECRT_140GP',0,zhook_handle)
147 p_wkl(j1,j2)=0.0_jprb
162 p_semiss(1) = p_zemis(k_iplon)
163 p_semiss(2) = p_zemis(k_iplon)
164 p_semiss(3) = p_zemis(k_iplon)
165 p_semiss(4) = p_zemis(k_iplon)
166 p_semiss(5) = p_zemis(k_iplon)
167 p_semiss(6) = p_zemiw(k_iplon)
168 p_semiss(7) = p_zemiw(k_iplon)
169 p_semiss(8) = p_zemiw(k_iplon)
170 p_semiss(9) = p_zemis(k_iplon)
171 p_semiss(10) = p_zemis(k_iplon)
172 p_semiss(11) = p_zemis(k_iplon)
173 p_semiss(12) = p_zemis(k_iplon)
174 p_semiss(13) = p_zemis(k_iplon)
175 p_semiss(14) = p_zemis(k_iplon)
176 p_semiss(15) = p_zemis(k_iplon)
177 p_semiss(16) = p_zemis(k_iplon)
181 p_tbound = pts(k_iplon)
198 pz(0) = paph(k_iplon,klev+1)/100._jprb
199 p_tz(0) = pth(k_iplon,klev+1)
201 pavel(i_l) = pap(k_iplon,klev-i_l+1)/100._jprb
202 p_tavel(i_l) = pt(k_iplon,klev-i_l+1)
203 pz(i_l) = paph(k_iplon,klev-i_l+1)/100._jprb
204 p_tz(i_l) = pth(k_iplon,klev-i_l+1)
205 p_wkl(1,i_l) = pq(k_iplon,klev-i_l+1)*z_amd/z_amw
206 p_wkl(2,i_l) = pcco2*z_amd/z_amco2
207 p_wkl(3,i_l) = pozn(k_iplon,klev-i_l+1)*z_amd/z_amo
208 p_wkl(4,i_l) =
rn2o*z_amd/z_amn2o
209 p_wkl(6,i_l) =
rch4*z_amd/z_amch4
210 z_amm = (1-p_wkl(1,i_l))*z_amd + p_wkl(1,i_l)*z_amw
211 p_coldry(i_l) = (pz(i_l-1)-pz(i_l))*1.e3_jprb*z_avgdro/(z_gravit*z_amm*(1+p_wkl(1,i_l)))
222 &
raer(jae,1)*paer(k_iplon,1,jk)+
raer(jae,2)*paer(k_iplon,2,jk)&
223 & +
raer(jae,3)*paer(k_iplon,3,jk)+
raer(jae,4)*paer(k_iplon,4,jk)&
224 & +
raer(jae,5)*paer(k_iplon,5,jk)+
raer(jae,6)*paer(k_iplon,6,jk)
225 p_tauaerl(i_l, 1)=ztauaer(1)
226 p_tauaerl(i_l, 2)=ztauaer(1)
229 &
raer(jae,1)*paer(k_iplon,1,jk)+
raer(jae,2)*paer(k_iplon,2,jk)&
230 & +
raer(jae,3)*paer(k_iplon,3,jk)+
raer(jae,4)*paer(k_iplon,4,jk)&
231 & +
raer(jae,5)*paer(k_iplon,5,jk)+
raer(jae,6)*paer(k_iplon,6,jk)
232 p_tauaerl(i_l, 3)=ztauaer(2)
233 p_tauaerl(i_l, 4)=ztauaer(2)
234 p_tauaerl(i_l, 5)=ztauaer(2)
237 &
raer(jae,1)*paer(k_iplon,1,jk)+
raer(jae,2)*paer(k_iplon,2,jk)&
238 & +
raer(jae,3)*paer(k_iplon,3,jk)+
raer(jae,4)*paer(k_iplon,4,jk)&
239 & +
raer(jae,5)*paer(k_iplon,5,jk)+
raer(jae,6)*paer(k_iplon,6,jk)
240 p_tauaerl(i_l, 6)=ztauaer(3)
241 p_tauaerl(i_l, 8)=ztauaer(3)
242 p_tauaerl(i_l, 9)=ztauaer(3)
245 &
raer(jae,1)*paer(k_iplon,1,jk)+
raer(jae,2)*paer(k_iplon,2,jk)&
246 & +
raer(jae,3)*paer(k_iplon,3,jk)+
raer(jae,4)*paer(k_iplon,4,jk)&
247 & +
raer(jae,5)*paer(k_iplon,5,jk)+
raer(jae,6)*paer(k_iplon,6,jk)
248 p_tauaerl(i_l, 7)=ztauaer(4)
251 &
raer(jae,1)*paer(k_iplon,1,jk)+
raer(jae,2)*paer(k_iplon,2,jk)&
252 & +
raer(jae,3)*paer(k_iplon,3,jk)+
raer(jae,4)*paer(k_iplon,4,jk)&
253 & +
raer(jae,5)*paer(k_iplon,5,jk)+
raer(jae,6)*paer(k_iplon,6,jk)
255 p_tauaerl(i_l,10)=ztauaer(5)
256 p_tauaerl(i_l,11)=ztauaer(5)
257 p_tauaerl(i_l,12)=ztauaer(5)
258 p_tauaerl(i_l,13)=ztauaer(5)
259 p_tauaerl(i_l,14)=ztauaer(5)
260 p_tauaerl(i_l,15)=ztauaer(5)
261 p_tauaerl(i_l,16)=ztauaer(5)
267 p_tauaerl(i_l,jae) = max( ptau_lw(k_iplon, jk, jae), 1e-30 )
280 p_wx(2,i_l) =
rcfc11*z_amd/z_amc11
281 p_wx(3,i_l) =
rcfc12*z_amd/z_amc12
282 p_wx(2,i_l) = p_coldry(i_l) * p_wx(2,i_l) * 1.e-20_jprb
283 p_wx(3,i_l) = p_coldry(i_l) * p_wx(3,i_l) * 1.e-20_jprb
289 p_wkl(imol,i_l) = p_coldry(i_l) * p_wkl(imol,i_l)
312 IF (pcldf(jl,jk) > zepsec)
THEN
315 & *(1.0_jprb-max( zcldly , zcloud ))&
316 & /(1.0_jprb-min( zcloud , 1.0_jprb-zepsec ))
318 zc1j(jk)= 1.0_jprb - zclear
322 & *(1.0_jprb-max( zcldly , zcloud ))&
323 & /(1.0_jprb-min( zcloud , 1.0_jprb-zepsec ))
325 zc1j(jk)= 1.0_jprb - zclear
334 IF (pcldf(jl,jk) > zepsec)
THEN
336 zcloud = max( zcldly , zcloud )
340 zcloud = max( zcldly , zcloud )
350 IF (pcldf(jl,jk) > zepsec)
THEN
352 zclear = zclear * (1.0_jprb-zcldly)
353 zcloud = 1.0_jprb - zclear
357 zclear = zclear * (1.0_jprb-zcldly)
358 zcloud = 1.0_jprb - zclear
363 ELSEIF (
novlp == 4)
THEN
366 ptclear=1.0_jprb-zc1j(klev)
372 IF (ptclear > 1.0_jprb-zepsec)
THEN
375 p_cldfrac(i_l) = 0.0_jprb
379 p_taucld(i_l,jb) = 0.0_jprb
391 p_cldfrac(i_l) = pcldf(k_iplon,i_l)
395 p_taucld(i_l,jb) = ptaucld(k_iplon,i_l,jb)
403 IF (
lhook)
CALL dr_hook(
'RRTM_ECRT_140GP',1,zhook_handle)
INTERFACE SUBROUTINE RRTM_ECRT_140GP pcco2
INTERFACE SUBROUTINE RRTM_ECRT_140GP pth
real(kind=jprb), dimension(6, 6) raer
integer(kind=jpim), parameter jpinpx
integer(kind=jpim), parameter jpband
INTERFACE SUBROUTINE RRTM_ECRT_140GP pozn
subroutine rrtm_ecrt_140gp(K_IPLON, klon, klev, kcld, paer, paph, pap, pts, pth, pt, P_ZEMIS, P_ZEMIW, pq, pcco2, pozn, pcldf, ptaucld, ptclear, P_CLDFRAC, P_TAUCLD, PTAU_LW, P_COLDRY, P_WKL, P_WX, P_TAUAERL, PAVEL, P_TAVEL, PZ, P_TZ, P_TBOUND, K_NLAYERS, P_SEMISS, K_IREFLECT)
INTERFACE SUBROUTINE RRTM_ECRT_140GP ptclear
INTERFACE SUBROUTINE RRTM_ECRT_140GP pcldf
INTERFACE SUBROUTINE RRTM_ECRT_140GP paph
integer(kind=jpim), parameter jplay
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
INTERFACE SUBROUTINE RRTM_ECRT_140GP kcld
INTERFACE SUBROUTINE RRTM_ECRT_140GP pt
INTERFACE SUBROUTINE RRTM_ECRT_140GP ptaucld
INTERFACE SUBROUTINE RRTM_ECRT_140GP pap
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
INTERFACE SUBROUTINE RRTM_ECRT_140GP && pts
INTERFACE SUBROUTINE RRTM_ECRT_140GP && pq
integer(kind=jpim), parameter jpxsec