3 &
paer , paki , palbd , palbp, pcg , pcld, pclear,&
4 & pdsig , pomega, poz , prmu , psec , ptau,&
6 & pfdown, pfup , pcdown, pcup , psudu2, pdiff , pdirf, &
8 & lrdust,ppiza_dst,pcga_dst,ptaurel_dst )
89 INTEGER(KIND=JPIM),
INTENT(IN) :: KLON
90 INTEGER(KIND=JPIM),
INTENT(IN) :: KLEV
91 INTEGER(KIND=JPIM),
INTENT(IN) :: KIDIA
92 INTEGER(KIND=JPIM),
INTENT(IN) :: KFDIA
93 INTEGER(KIND=JPIM),
INTENT(IN) :: KAER
94 INTEGER(KIND=JPIM),
INTENT(IN) :: KNU
95 REAL(KIND=JPRB) ,
INTENT(IN) :: PAER(klon,6,klev)
96 REAL(KIND=JPRB) ,
INTENT(IN) :: PAKI(klon,2,nsw)
97 REAL(KIND=JPRB) ,
INTENT(IN) :: PALBD(klon,nsw)
98 REAL(KIND=JPRB) ,
INTENT(IN) :: PALBP(klon,nsw)
99 REAL(KIND=JPRB) ,
INTENT(IN) :: PCG(klon,nsw,klev)
100 REAL(KIND=JPRB) ,
INTENT(IN) :: PCLD(klon,klev)
101 REAL(KIND=JPRB) ,
INTENT(IN) :: PCLEAR(klon)
102 REAL(KIND=JPRB) ,
INTENT(IN) :: PDSIG(klon,klev)
103 REAL(KIND=JPRB) ,
INTENT(IN) :: POMEGA(klon,nsw,klev)
104 REAL(KIND=JPRB) ,
INTENT(IN) :: POZ(klon,klev)
105 REAL(KIND=JPRB) ,
INTENT(IN) :: PRMU(klon)
106 REAL(KIND=JPRB) ,
INTENT(IN) :: PSEC(klon)
107 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAU(klon,nsw,klev)
108 REAL(KIND=JPRB) ,
INTENT(IN) :: PUD(klon,5,klev+1)
109 REAL(KIND=JPRB) ,
INTENT(IN) :: PWV(klon,klev)
110 REAL(KIND=JPRB) ,
INTENT(IN) :: PQS(klon,klev)
112 LOGICAL ,
INTENT(IN) :: LRDUST
113 REAL(KIND=JPRB) ,
INTENT(IN) :: PPIZA_DST(klon,klev)
114 REAL(KIND=JPRB) ,
INTENT(IN) :: PCGA_DST(klon,klev)
115 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAUREL_DST(klon,klev)
117 REAL(KIND=JPRB) ,
INTENT(OUT) :: PFDOWN(klon,klev+1)
118 REAL(KIND=JPRB) ,
INTENT(OUT) :: PFUP(klon,klev+1)
119 REAL(KIND=JPRB) ,
INTENT(OUT) :: PCDOWN(klon,klev+1)
120 REAL(KIND=JPRB) ,
INTENT(OUT) :: PCUP(klon,klev+1)
121 REAL(KIND=JPRB) ,
INTENT(OUT) :: PSUDU2(klon)
122 REAL(KIND=JPRB) ,
INTENT(OUT) :: PDIFF(klon,klev)
123 REAL(KIND=JPRB) ,
INTENT(OUT) :: PDIRF(klon,klev)
134 INTEGER(KIND=JPIM) :: IIND2(2), IIND3(6)
135 REAL(KIND=JPRB) :: ZCGAZ(klon,klev) , ZDIFF(klon) , ZDIRF(klon)&
136 & , ZFD(KLON,KLEV+1) , ZFU(KLON,KLEV+1) &
137 & , ZG(KLON) , ZGG(KLON)
138 REAL(KIND=JPRB) :: ZPIZAZ(klon,klev)&
139 & , ZRAYL(KLON) , ZRAY1(KLON,KLEV+1) , ZRAY2(KLON,KLEV+1)&
140 & , ZREF(KLON) , ZREFZ(KLON,2,KLEV+1)&
141 & , ZRE1(KLON) , ZRE2(KLON)&
142 & , ZRJ(KLON,6,KLEV+1), ZRJ0(KLON,6,KLEV+1)&
143 & , ZRK(KLON,6,KLEV+1), ZRK0(KLON,6,KLEV+1)&
145 & , ZRMUE(KLON,KLEV+1), ZRMU0(KLON,KLEV+1) , ZRMUZ(KLON)&
146 & , ZRNEB(KLON) , ZRUEF(KLON,8) , ZR1(KLON) &
147 & , ZR2(KLON,2) , ZR3(KLON,6) , ZR4(KLON,2)&
148 & , ZR21(KLON) , ZR22(KLON)
149 REAL(KIND=JPRB) :: ZS(klon)&
150 & , ZTAUAZ(KLON,KLEV) , ZTO1(KLON) , ZTR(KLON,2,KLEV+1)&
151 & , ZTRA1(KLON,KLEV+1), ZTRA2(KLON,KLEV+1)&
152 & , ZTRCLD(KLON) , ZTRCLR(KLON)&
153 & , ZTR1(KLON) , ZTR2(KLON)&
154 & , ZW(KLON) , ZW1(KLON) , ZW2(KLON,2)&
155 & , ZW3(KLON,6) , ZW4(KLON,2) , ZW5(KLON,2)
157 INTEGER(KIND=JPIM) :: IABS, IKL, IKM1, JABS, JAJ, JAJP, JK, JKKI,&
158 & JKKP4, JKL, JKLP1, JKM1, JL, JN, JN2J, JREF
160 REAL(KIND=JPRB) :: ZAA, ZBB, ZCNEB, ZRE11, ZRKI, ZRMUM1, ZWH2O, ZCHKG, ZCHKS
161 REAL(KIND=JPRB) :: ZRR,ZRRJ,ZRRK
162 REAL(KIND=JPRB) :: ZHOOK_HANDLE
164 REAL(KIND=JPRB) :: ZB_ODI(klon)
168 #include "swclr.intfb.h"
169 #include "swde.intfb.h"
170 #include "swr.intfb.h"
171 #include "swtt.intfb.h"
172 #include "swtt1.intfb.h"
177 write(str1,
'(i1)') knu
191 zrmum1 = 1.0_jprb - prmu(jl)
192 zrayl(jl) =
rray(knu,1) + zrmum1 * (
rray(knu,2) + zrmum1 &
193 & * (
rray(knu,3) + zrmum1 * (
rray(knu,4) + zrmum1 &
194 & * (
rray(knu,5) + zrmum1 *
rray(knu,6) ))))
195 zrayl(jl) = max(zrayl(jl), 0.0_jprb)
209 &( kidia , kfdia , klon , klev , kaer , knu &
210 &, paer , palbp , pdsig , zrayl, psec &
211 &, zcgaz , zpizaz, zray1 , zray2, zrefz, zrj0 &
212 &, zrk0 , zrmu0 , ztauaz, ztra1, ztra2, ztrclr &
213 &, lrdust,ppiza_dst,pcga_dst,ptaurel_dst &
221 & ( kidia , kfdia , klon , klev , knu,&
222 & palbd , pcg , pcld , pomega, psec , ptau,&
223 & zcgaz , zpizaz, zray1, zray2 , zrefz, zrj , zrk, zrmue,&
224 & ztauaz, ztra1 , ztra2, ztrcld &
240 zrefz(jl,2,1) = palbd(jl,knu)
241 zrefz(jl,1,1) = palbd(jl,knu)
251 zrneb(jl) = pcld(jl,jkm1)
252 IF (jabs == 1.AND. zrneb(jl) >
repsc )
THEN
253 zwh2o=max(pwv(jl,ikl),
repscq)
254 zcneb=max(
repsc ,min(zrneb(jl),1.0_jprb-
repsc ))
255 zbb=pud(jl,jabs,jkm1)*pqs(jl,ikl)/zwh2o
256 zaa=max((pud(jl,jabs,jkm1)-zcneb*zbb)/(1.0_jprb-zcneb),
repscq)
258 zaa=pud(jl,jabs,jkm1)
261 zwh2o=max(pwv(jl,ikl),
repscq)
272 zrki = paki(jl,jabs,knu)
276 zchks = min( 200._jprb, zrki * zaa * 1.66_jprb )
277 zchkg = min( 200._jprb, zrki * zaa / zrmue(jl,jk))
278 zs(jl) = exp( - zchks )
279 zg(jl) = exp( - zchkg )
288 zw(jl) =pcg(jl,knu,jkm1)*pcg(jl,knu,jkm1)
289 zto1(jl) = ptau(jl,knu,jkm1)*(1-(pomega(jl,knu,jkm1)*zw(jl)))
290 zw(jl) =pomega(jl,knu,jkm1)*(1-zw(jl))/(1-(pomega(jl,knu,jkm1)*zw(jl)))
291 zgg(jl) =pcg(jl,knu,jkm1)/(1+pcg(jl,knu,jkm1))
292 zgg(jl)=zto1(jl)*zw(jl)*zgg(jl)+ztauaz(jl,jkm1)*zpizaz(jl,jkm1)*zcgaz(jl,jkm1)
293 zgg(jl)=zgg(jl)/(zto1(jl)*zw(jl)+ztauaz(jl,jkm1)*zpizaz(jl,jkm1))
294 zb_odi(jl)=zto1(jl) / zw(jl)&
295 &+ ztauaz(jl,jkm1) / zpizaz(jl,jkm1)&
298 zb_odi(jl)=(1/( (zto1(jl) / zw(jl))&
299 &+ (ztauaz(jl,jkm1) / zpizaz(jl,jkm1)) ))-(1/zb_odi(jl))
300 zb_odi(jl)=((zto1(jl) + ztauaz(jl,jkm1))**2)*zb_odi(jl)
301 zw(jl)=zto1(jl)*zw(jl)+ztauaz(jl,jkm1)*zpizaz(jl,jkm1)-zb_odi(jl)
302 zto1(jl) = zto1(jl) + ztauaz(jl,jkm1)
303 zw(jl)=zw(jl)/zto1(jl)
305 zw(jl)= pomega(jl,knu,jkm1)
306 zto1(jl) = ptau(jl,knu,jkm1) / zw(jl)&
307 & + ztauaz(jl,jkm1) / zpizaz(jl,jkm1)&
309 zr21(jl) = ptau(jl,knu,jkm1) + ztauaz(jl,jkm1)
310 zr22(jl) = ptau(jl,knu,jkm1) / zr21(jl)
311 zgg(jl) = zr22(jl) * pcg(jl,knu,jkm1)&
312 & + (1.0_jprb - zr22(jl)) * zcgaz(jl,jkm1)
313 zw(jl) = zr21(jl) / zto1(jl)
316 zref(jl) = zrefz(jl,1,jkm1)
317 zrmuz(jl) = zrmue(jl,jk)
320 CALL swde ( kidia, kfdia, klon,&
321 & zgg , zref , zrmuz, zto1, zw,&
322 & zre1 , zre2 , ztr1 , ztr2 )
326 zrr=1.0_jprb/(1.0_jprb-zray2(jl,jkm1)*zrefz(jl,1,jkm1))
327 zrefz(jl,2,jk) = (1.0_jprb-zrneb(jl)) * (zray1(jl,jkm1)&
328 & + zrefz(jl,2,jkm1) * ztra1(jl,jkm1)&
329 & * ztra2(jl,jkm1) ) * zg(jl) * zs(jl)&
330 & + zrneb(jl) * zre1(jl)
332 ztr(jl,2,jkm1)=zrneb(jl)*ztr1(jl)&
333 & + (ztra1(jl,jkm1)) * zg(jl) * (1.0_jprb-zrneb(jl))
335 zrefz(jl,1,jk)=(1.0_jprb-zrneb(jl))*(zray1(jl,jkm1)&
336 & +zrefz(jl,1,jkm1)*ztra1(jl,jkm1)*ztra2(jl,jkm1)&
339 & + zrneb(jl) * zre2(jl)
341 ztr(jl,1,jkm1)= zrneb(jl) * ztr2(jl)&
342 & + (ztra1(jl,jkm1) &
344 & * zg(jl) * (1.0_jprb -zrneb(jl))
357 zrj(jl,jn,klev+1) = 1.0_jprb
358 zrk(jl,jn,klev+1) = zrefz(jl,jref,klev+1)
365 zre11 = zrj(jl,jn,jklp1) * ztr(jl,jref,jkl)
366 zrj(jl,jn,jkl) = zre11
367 zrk(jl,jn,jkl) = zre11 * zrefz(jl,jref,jkl)
385 zrj(jl,jaj,jk)= zrj(jl,jaj,jk) - zrj(jl,jajp,jk)
386 zrk(jl,jaj,jk)= zrk(jl,jaj,jk) - zrk(jl,jajp,jk)
387 zrj(jl,jaj,jk)= max( zrj(jl,jaj,jk) ,
replog )
388 zrk(jl,jaj,jk)= max( zrk(jl,jaj,jk) ,
replog )
396 zrj(jl,jaj,jk)= max( zrj(jl,jaj,jk) ,
replog )
397 zrk(jl,jaj,jk)= max( zrk(jl,jaj,jk) ,
replog )
418 zrr=1.0_jprb/paki(jl,jaj,knu)
419 zrrj=zrj(jl,jn,jk) / zrj(jl,jn2j,jk)
420 zrrk=zrk(jl,jn,jk) / zrk(jl,jn2j,jk)
421 zw2(jl,1) = log( zrrj ) * zrr
422 zw2(jl,2) = log( zrrk ) * zrr
428 CALL swtt1 ( kidia,kfdia,klon, knu, 2, iind2,&
433 zrl(jl,jkki) = zr2(jl,1)
434 zruef(jl,jkki) = zw2(jl,1)
435 zrl(jl,jkkp4) = zr2(jl,2)
436 zruef(jl,jkkp4) = zw2(jl,2)
447 pfdown(jl,jk) = zrj(jl,1,jk) * zrl(jl,1) * zrl(jl,3)&
448 & + zrj(jl,2,jk) * zrl(jl,2) * zrl(jl,4)
449 pfup(jl,jk) = zrk(jl,1,jk) * zrl(jl,5) * zrl(jl,7)&
450 & + zrk(jl,2,jk) * zrl(jl,6) * zrl(jl,8)
487 zfd(jl,klev+1)= zrj0(jl,jaj,klev+1)
492 zrr=1.0_jprb/zrmu0(jl,ikl)
493 zw3(jl,1)=zw3(jl,1)+pud(jl,1,ikl)*zrr
494 zw3(jl,2)=zw3(jl,2)+pud(jl,2,ikl)*zrr
495 zw3(jl,3)=zw3(jl,3)+poz(jl, ikl)*zrr
496 zw4(jl,1)=zw4(jl,1)+pud(jl,4,ikl)*zrr
497 zw5(jl,1)=zw5(jl,1)+pud(jl,5,ikl)*zrr
499 zrr=1.0_jprb/zrmue(jl,ikl)
500 zw3(jl,4)=zw3(jl,4)+pud(jl,1,ikl)*zrr
501 zw3(jl,5)=zw3(jl,5)+pud(jl,2,ikl)*zrr
502 zw3(jl,6)=zw3(jl,6)+poz(jl, ikl)*zrr
503 zw4(jl,2)=zw4(jl,2)+pud(jl,4,ikl)*zrr
504 zw5(jl,2)=zw5(jl,2)+pud(jl,5,ikl)*zrr
507 CALL swtt1 ( kidia,kfdia,klon, knu, 6, iind3,&
512 zr4(jl,1) = exp(-
rswce(knu)*zw4(jl,1)-
rswcp(knu)*zw5(jl,1))
513 zr4(jl,2) = exp(-
rswce(knu)*zw4(jl,2)-
rswcp(knu)*zw5(jl,2))
514 zfd(jl,ikl) = zr3(jl,1)*zr3(jl,2)*zr3(jl,3)*zr4(jl,1)* zrj0(jl,jaj,ikl)
523 zdiff(jl) = zr3(jl,4)*zr3(jl,5)*zr3(jl,6)*zr4(jl,2)*ztrcld(jl)
524 zdirf(jl) = zr3(jl,1)*zr3(jl,2)*zr3(jl,3)*zr4(jl,1)*ztrclr(jl)
525 psudu2(jl) = ((1.0_jprb-pclear(jl)) * zdiff(jl)&
526 & +pclear(jl) * zdirf(jl)) *
rsun(knu)
533 zfu(jl,1) = zfd(jl,1)*palbp(jl,knu)
539 zw3(jl,1)=zw3(jl,1)+pud(jl,1,ikm1)*1.66_jprb
540 zw3(jl,2)=zw3(jl,2)+pud(jl,2,ikm1)*1.66_jprb
541 zw3(jl,3)=zw3(jl,3)+poz(jl, ikm1)*1.66_jprb
542 zw4(jl,1)=zw4(jl,1)+pud(jl,4,ikm1)*1.66_jprb
543 zw5(jl,1)=zw5(jl,1)+pud(jl,5,ikm1)*1.66_jprb
546 CALL swtt1 ( kidia,kfdia,klon, knu, 3, iind3,&
551 zr4(jl,1) = exp(-
rswce(knu)*zw4(jl,1)-
rswcp(knu)*zw5(jl,1))
552 zfu(jl,jk) = zr3(jl,1)*zr3(jl,2)*zr3(jl,3)*zr4(jl,1)* zrk0(jl,jaj,jk)
571 pfdown(jl,klev+1) = ((1.0_jprb-pclear(jl))*pfdown(jl,klev+1)&
572 & + pclear(jl) * zfd(jl,klev+1)) *
rsun(knu)
573 pcdown(jl,klev+1) = zfd(jl,klev+1) *
rsun(knu)
579 zrr=1.0_jprb/zrmue(jl,ikl)
580 zw1(jl) = zw1(jl)+poz(jl, ikl) * zrr
581 zw4(jl,1) = zw4(jl,1)+pud(jl,4,ikl) * zrr
582 zw5(jl,1) = zw5(jl,1)+pud(jl,5,ikl) * zrr
583 zr4(jl,1) = exp(-
rswce(knu)*zw4(jl,1)-
rswcp(knu)*zw5(jl,1))
586 CALL swtt ( kidia,kfdia,klon, knu, iabs, zw1, zr1 )
589 pdiff(jl,ikl)=zr1(jl)*zr4(jl,1)*pfdown(jl,ikl)*
rsun(knu)*(1.0_jprb-pclear(jl))
590 pdirf(jl,ikl)=zfd(jl,ikl)*
rsun(knu)* pclear(jl)
591 pfdown(jl,ikl) = ((1.0_jprb-pclear(jl))*zr1(jl)*zr4(jl,1)*pfdown(jl,ikl)&
592 & +pclear(jl)*zfd(jl,ikl)) *
rsun(knu)
593 pcdown(jl,ikl) = zfd(jl,ikl) *
rsun(knu)
601 pfup(jl,1) = ((1.0_jprb-pclear(jl))*zr1(jl)*zr4(jl,1) * pfup(jl,1)&
602 & +pclear(jl)*zfu(jl,1)) *
rsun(knu)
603 pcup(jl,1) = zfu(jl,1) *
rsun(knu)
609 zw1(jl) = zw1(jl)+poz(jl ,ikm1)*1.66_jprb
610 zw4(jl,1) = zw4(jl,1)+pud(jl,4,ikm1)*1.66_jprb
611 zw5(jl,1) = zw5(jl,1)+pud(jl,5,ikm1)*1.66_jprb
612 zr4(jl,1) = exp(-
rswce(knu)*zw4(jl,1)-
rswcp(knu)*zw5(jl,1))
615 CALL swtt ( kidia,kfdia,klon, knu, iabs, zw1, zr1 )
618 pfup(jl,jk) = ((1.0_jprb-pclear(jl))*zr1(jl)*zr4(jl,1) * pfup(jl,jk)&
619 & +pclear(jl)*zfu(jl,jk)) *
rsun(knu)
620 pcup(jl,jk) = zfu(jl,jk) *
rsun(knu)
subroutine swclr(KIDIA, KFDIA, KLON, KLEV, KAER, KNU, PAER, PALBP, PDSIG, PRAYL, PSEC, PCGAZ, PPIZAZ, PRAY1, PRAY2, PREFZ, PRJ, PRK, PRMU0, PTAUAZ, PTRA1, PTRA2, PTRCLR,
subroutine swni(KIDIA, KFDIA, KLON, KLEV, KAER, KNU, PAER, PAKI, PALBD, PALBP, PCG, PCLD, PCLEAR, PDSIG, POMEGA, POZ, PRMU, PSEC, PTAU, PUD, PWV, PQS, PFDOWN, PFUP, PCDOWN, PCUP, PSUDU2, PDIFF, PDIRF,
real(kind=jprb), dimension(:), allocatable rsun
real(kind=jprb), dimension(6) rswce
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
subroutine swr(KIDIA, KFDIA, KLON, KLEV, KNU, PALBD, PCG, PCLD, POMEGA, PSEC, PTAU, PCGAZ, PPIZAZ, PRAY1, PRAY2, PREFZ, PRJ, PRK, PRMUE, PTAUAZ, PTRA1, PTRA2, PTRCLD)
subroutine swde(KIDIA, KFDIA, KLON, PGG, PREF, PRMUZ, PTO1, PW, PRE1, PRE2, PTR1, PTR2)
subroutine swtt1(KIDIA, KFDIA, KLON, KNU, KABS, KIND, PU, PTR)
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
subroutine writefield_phy(name, Field, ll)
real(kind=jprb), dimension(6, 6) rray
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
subroutine swtt(KIDIA, KFDIA, KLON, KNU, KA, PU, PTR)
real(kind=jprb), dimension(6) rswcp