3 & palbd , pcg , pcld , pomega, psec , ptau,&
4 & pcgaz , ppizaz, pray1, pray2 , prefz, prj , prk , prmue,&
5 & ptauaz, ptra1 , ptra2, ptrcld &
72 INTEGER(KIND=JPIM),
INTENT(IN) :: KLON
73 INTEGER(KIND=JPIM),
INTENT(IN) :: KLEV
74 INTEGER(KIND=JPIM),
INTENT(IN) :: KIDIA
75 INTEGER(KIND=JPIM),
INTENT(IN) :: KFDIA
76 INTEGER(KIND=JPIM),
INTENT(IN) :: KNU
77 REAL(KIND=JPRB) ,
INTENT(IN) :: PALBD(klon,nsw)
78 REAL(KIND=JPRB) ,
INTENT(IN) :: PCG(klon,nsw,klev)
79 REAL(KIND=JPRB) ,
INTENT(IN) :: PCLD(klon,klev)
80 REAL(KIND=JPRB) ,
INTENT(IN) :: POMEGA(klon,nsw,klev)
81 REAL(KIND=JPRB) ,
INTENT(IN) :: PSEC(klon)
82 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAU(klon,nsw,klev)
83 REAL(KIND=JPRB) ,
INTENT(IN) :: PCGAZ(klon,klev)
84 REAL(KIND=JPRB) ,
INTENT(IN) :: PPIZAZ(klon,klev)
85 REAL(KIND=JPRB) ,
INTENT(OUT) :: PRAY1(klon,klev+1)
86 REAL(KIND=JPRB) ,
INTENT(OUT) :: PRAY2(klon,klev+1)
87 REAL(KIND=JPRB) ,
INTENT(OUT) :: PREFZ(klon,2,klev+1)
88 REAL(KIND=JPRB) ,
INTENT(OUT) :: PRJ(klon,6,klev+1)
89 REAL(KIND=JPRB) ,
INTENT(OUT) :: PRK(klon,6,klev+1)
90 REAL(KIND=JPRB) ,
INTENT(OUT) :: PRMUE(klon,klev+1)
91 REAL(KIND=JPRB) ,
INTENT(IN) :: PTAUAZ(klon,klev)
92 REAL(KIND=JPRB) ,
INTENT(OUT) :: PTRA1(klon,klev+1)
93 REAL(KIND=JPRB) ,
INTENT(OUT) :: PTRA2(klon,klev+1)
94 REAL(KIND=JPRB) ,
INTENT(OUT) :: PTRCLD(klon)
104 REAL(KIND=JPRB) :: ZC1I(klon,klev+1) , ZCLEQ(klon,klev)&
105 & , ZCLEAR(KLON) , ZCLOUD(KLON) &
106 & , ZGG(KLON) , ZREF(KLON)&
107 & , ZRE1(KLON) , ZRE2(KLON)&
108 & , ZRMUZ(KLON) , ZRNEB(KLON)&
109 & , ZR21(KLON) , ZR22(KLON)&
110 & , ZR23(KLON) , ZSS1(KLON)&
111 & , ZTO1(KLON) , ZTR(KLON,2,KLEV+1)&
112 & , ZTR1(KLON) , ZTR2(KLON)&
115 INTEGER(KIND=JPIM) :: IKL, IKLP1, JA, JAJ, JK, JKM1, JL, INU1
117 REAL(KIND=JPRB) :: ZBMU0, ZBMU1, ZCORAE, ZCORCD, ZDEN, ZDEN1,&
118 & ZFACOA, ZFACOC, ZGAP, ZMU1, ZMUE, ZRE11, &
119 & ZTO, ZWW, ZALPHA1, ZCHKAE, ZCHKCD
120 REAL(KIND=JPRB) :: ZRR,ZIMU1,ZI2MU1,ZIDEN,ZIDEN1
121 REAL(KIND=JPRB) :: ZHOOK_HANDLE
124 #include "swde.intfb.h"
136 prj(jl,ja,jk) = 0.0_jprb
137 prk(jl,ja,jk) = 0.0_jprb
151 zc1i(jl,klev+1) = 0.0_jprb
152 zclear(jl) = 1.0_jprb
153 zcloud(jl) = 0.0_jprb
163 stop
'provisoire pour verifier option novlp=1'
164 zfacoa =ptauaz(jl,ikl)
165 zfacoc = 1.0_jprb - pomega(jl,knu,ikl) * pcg(jl,knu,ikl)* pcg(jl,knu,ikl)
166 zcorae = zfacoa * psec(jl)
167 zcorcd = zfacoc * ptau(jl,knu,ikl) * psec(jl)
169 zfacoa = 1.0_jprb - ppizaz(jl,ikl)*pcgaz(jl,ikl)*pcgaz(jl,ikl)
170 zfacoc = 1.0_jprb - pomega(jl,knu,ikl) * pcg(jl,knu,ikl)* pcg(jl,knu,ikl)
171 zcorae = zfacoa * ptauaz(jl,ikl) * psec(jl)
172 zcorcd = zfacoc * ptau(jl,knu,ikl) * psec(jl)
175 zchkae = min( 200._jprb, zcorae )
176 zchkcd = min( 200._jprb, zcorcd )
177 zr21(jl) = exp( - zchkae )
178 zr22(jl) = exp( - zchkcd )
180 zss1(jl) = pcld(jl,ikl)*(1.0_jprb-zr21(jl)*zr22(jl))&
181 & + (1.0_jprb-pcld(jl,ikl))*(1.0_jprb-zr21(jl))
182 zcleq(jl,ikl) = zss1(jl)
188 zclear(jl) = zclear(jl)&
189 & *(1.0_jprb-max(zss1(jl),zcloud(jl)))&
190 & /(1.0_jprb-min(zcloud(jl),1.0_jprb-
repsec))
191 zc1i(jl,ikl) = 1.0_jprb - zclear(jl)
192 zcloud(jl) = zss1(jl)
193 ELSEIF (
novlp == 2)
THEN
194 stop
'provisoire pour verifier option novlp=1b'
196 zcloud(jl) = max( zss1(jl) , zcloud(jl) )
197 zc1i(jl,ikl) = zcloud(jl)
200 stop
'provisoire pour verifier option novlp=1c'
203 zclear(jl) = zclear(jl)*(1.0_jprb - zss1(jl))
204 zcloud(jl) = 1.0_jprb - zclear(jl)
205 zc1i(jl,ikl) = zcloud(jl)
206 ELSEIF (
novlp == 4)
THEN
207 stop
'provisoire pour verifier option novlp=1d'
209 zclear(jl)=zclear(jl)*( &
210 & zalpha1*(1.0_jprb-max(zss1(jl),zcloud(jl))) &
211 & /(1.0_jprb-min(zcloud(jl),1.0_jprb-
repsec)) &
212 & +(1.0_jprb-zalpha1)*(1.0_jprb-zss1(jl)) )
213 zc1i(jl,ikl) = 1.0_jprb - zclear(jl)
214 zcloud(jl) = zss1(jl)
225 zfacoa =ptauaz(jl,ikl)
226 zfacoc = 1.0_jprb - pomega(jl,knu,ikl) * pcg(jl,knu,ikl)* pcg(jl,knu,ikl)
227 zcorae = zfacoa * psec(jl)
228 zcorcd = zfacoc * ptau(jl,knu,ikl) * psec(jl)
230 zfacoa = 1.0_jprb - ppizaz(jl,ikl)*pcgaz(jl,ikl)*pcgaz(jl,ikl)
231 zfacoc = 1.0_jprb - pomega(jl,knu,ikl) * pcg(jl,knu,ikl)* pcg(jl,knu,ikl)
232 zcorae = zfacoa * ptauaz(jl,ikl) * psec(jl)
233 zcorcd = zfacoc * ptau(jl,knu,ikl) * psec(jl)
239 zchkae = min( 200._jprb, zcorae )
240 zchkcd = min( 200._jprb, zcorcd )
241 zr21(jl) = exp( - zchkae )
242 zr22(jl) = exp( - zchkcd )
244 zss1(jl) = pcld(jl,ikl)*(1.0_jprb-zr21(jl)*zr22(jl))&
245 & + (1.0_jprb-pcld(jl,ikl))*(1.0_jprb-zr21(jl))
246 zcleq(jl,ikl) = zss1(jl)
252 zclear(jl) = zclear(jl)&
253 & *(1.0_jprb-max(zss1(jl),zcloud(jl)))&
254 & /(1.0_jprb-min(zcloud(jl),1.0_jprb-
repsec))
255 zc1i(jl,ikl) = 1.0_jprb - zclear(jl)
256 zcloud(jl) = zss1(jl)
257 ELSEIF (
novlp == 2)
THEN
259 zcloud(jl) = max( zss1(jl) , zcloud(jl) )
260 zc1i(jl,ikl) = zcloud(jl)
265 zclear(jl) = zclear(jl)*(1.0_jprb - zss1(jl))
266 zcloud(jl) = 1.0_jprb - zclear(jl)
267 zc1i(jl,ikl) = zcloud(jl)
268 ELSEIF (
novlp == 4)
THEN
270 zclear(jl)=zclear(jl)*( &
271 & zalpha1*(1.0_jprb-max(zss1(jl),zcloud(jl))) &
272 & /(1.0_jprb-min(zcloud(jl),1.0_jprb-
repsec)) &
273 & +(1.0_jprb-zalpha1)*(1.0_jprb-zss1(jl)) )
274 zc1i(jl,ikl) = 1.0_jprb - zclear(jl)
275 zcloud(jl) = zss1(jl)
286 pray1(jl,klev+1) = 0.0_jprb
287 pray2(jl,klev+1) = 0.0_jprb
288 prefz(jl,2,1) = palbd(jl,knu)
289 prefz(jl,1,1) = palbd(jl,knu)
290 ptra1(jl,klev+1) = 1.0_jprb
291 ptra2(jl,klev+1) = 1.0_jprb
297 zrneb(jl)= pcld(jl,jkm1)
308 zmue = (1.0_jprb-zc1i(jl,jk)) * psec(jl)+ zc1i(jl,jk) * 1.66_jprb
309 prmue(jl,jk) = 1.0_jprb/zmue
316 zgap = pcgaz(jl,jkm1)
317 zbmu0 = 0.5_jprb - 0.75_jprb * zgap / zmue
318 zww = ppizaz(jl,jkm1)
319 zto = ptauaz(jl,jkm1)
320 zden = 1.0_jprb + (1.0_jprb - zww + zbmu0 * zww) * zto * zmue &
321 & + (1-zww) * (1.0_jprb - zww +2.0_jprb*zbmu0*zww)*zto*zto*zmue*zmue
323 pray1(jl,jkm1) = zbmu0 * zww * zto * zmue * ziden
324 ptra1(jl,jkm1) = ziden
329 zbmu1 = 0.5_jprb - 0.75_jprb * zgap * zmu1
330 zden1= 1.0_jprb + (1.0_jprb - zww + zbmu1 * zww) * zto * zimu1 &
331 & + (1-zww) * (1.0_jprb - zww +2.0_jprb*zbmu1*zww)*zto*zto*zi2mu1
332 ziden1=1.0_jprb/zden1
333 pray2(jl,jkm1) = zbmu1 * zww * zto * zimu1 * ziden1
334 ptra2(jl,jkm1) = ziden1
344 zw(jl) =pcg(jl,knu,jkm1)*pcg(jl,knu,jkm1)
345 zto1(jl) = ptau(jl,knu,jkm1)*(1-(pomega(jl,knu,jkm1)*zw(jl)))
346 zw(jl) =pomega(jl,knu,jkm1)*(1-zw(jl))/(1-(pomega(jl,knu,jkm1)*zw(jl)))
347 zgg(jl) = pcg(jl,knu,jkm1)/(1+pcg(jl,knu,jkm1))
348 zgg(jl)=zto1(jl)*zw(jl)*zgg(jl)+ptauaz(jl,jkm1)*ppizaz(jl,jkm1)*pcgaz(jl,jkm1)
349 zw(jl) =zto1(jl)*zw(jl)+ptauaz(jl,jkm1)*ppizaz(jl,jkm1)
350 zto1(jl) = zto1(jl) + ptauaz(jl,jkm1)
351 zgg(jl)=zgg(jl)/zw(jl)
352 zw(jl) =zw(jl)/zto1(jl)
354 zw(jl) = pomega(jl,knu,jkm1)
355 zto1(jl) = ptau(jl,knu,jkm1)/zw(jl)+ ptauaz(jl,jkm1)/ppizaz(jl,jkm1)
356 zr21(jl) = ptau(jl,knu,jkm1) + ptauaz(jl,jkm1)
357 zr22(jl) = ptau(jl,knu,jkm1) / zr21(jl)
358 zgg(jl) = zr22(jl) * pcg(jl,knu,jkm1)&
359 & + (1.0_jprb - zr22(jl)) * pcgaz(jl,jkm1)
360 IF (zw(jl) == 1.0_jprb .AND. ppizaz(jl,jkm1) == 1.0_jprb)
THEN
363 zw(jl) = zr21(jl) / zto1(jl)
367 zref(jl) = prefz(jl,1,jkm1)
368 zrmuz(jl) = prmue(jl,jk)
371 CALL swde ( kidia, kfdia , klon,&
372 & zgg , zref , zrmuz , zto1 , zw,&
373 & zre1 , zre2 , ztr1 , ztr2 )
377 zrr=1.0_jprb/(1.0_jprb-pray2(jl,jkm1)*prefz(jl,1,jkm1))
379 prefz(jl,1,jk) = (1.0_jprb-zrneb(jl)) * (pray1(jl,jkm1)&
380 & + prefz(jl,1,jkm1) * ptra1(jl,jkm1)&
383 & + zrneb(jl) * zre2(jl)
385 ztr(jl,1,jkm1) = zrneb(jl) * ztr2(jl) + (ptra1(jl,jkm1)&
387 & * (1.0_jprb-zrneb(jl))
389 prefz(jl,2,jk) = (1.0_jprb-zrneb(jl)) * (pray1(jl,jkm1)&
390 & + prefz(jl,2,jkm1) * ptra1(jl,jkm1)&
391 & * ptra2(jl,jkm1) )&
392 & + zrneb(jl) * zre1(jl)
394 ztr(jl,2,jkm1) = zrneb(jl) * ztr1(jl)+ ptra1(jl,jkm1) * (1.0_jprb-zrneb(jl))
399 zmue = (1.0_jprb-zc1i(jl,1))*psec(jl)+zc1i(jl,1)*1.66_jprb
400 prmue(jl,1)=1.0_jprb/zmue
401 ptrcld(jl)=1.0_jprb-zc1i(jl,1)
411 ELSEIF (nsw == 6)
THEN
415 IF (knu <= inu1)
THEN
418 prj(jl,jaj,klev+1) = 1.0_jprb
419 prk(jl,jaj,klev+1) = prefz(jl, 1,klev+1)
426 zre11= prj(jl,jaj,iklp1) * ztr(jl, 1,ikl)
427 prj(jl,jaj,ikl) = zre11
428 prk(jl,jaj,ikl) = zre11 * prefz(jl, 1,ikl)
436 prj(jl,jaj,klev+1) = 1.0_jprb
437 prk(jl,jaj,klev+1) = prefz(jl,jaj,klev+1)
444 zre11= prj(jl,jaj,iklp1) * ztr(jl,jaj,ikl)
445 prj(jl,jaj,ikl) = zre11
446 prk(jl,jaj,ikl) = zre11 * prefz(jl,jaj,ikl)
!$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)
real(kind=jprb), dimension(:), allocatable ra1ovlp
subroutine swde(KIDIA, KFDIA, KLON, PGG, PREF, PRMUZ, PTO1, PW, PRE1, PRE2, PTR1, PTR2)
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
subroutine writefield_phy(name, Field, ll)