2 SUBROUTINE convection( KLON, KLEV, KIDIA, KFDIA, KBDIA, KTDIA, &
3 pdtconv, odeep, oshal, orefresh_all, odown, kice, &
4 osettadj, ptadjd, ptadjs, &
7 pt, prv, prc, pri, pu, pv, pw, &
8 kcount, ptten, prvten, prcten, priten, &
10 pumf, pdmf, pprlflx, pprsflx, pcape, kcltop, kclbas,&
11 ochtrans, kch1, pch1, pch1ten )
70 INTEGER,
INTENT(IN) :: KLON
71 INTEGER,
INTENT(IN) :: KLEV
72 INTEGER,
INTENT(IN) :: KIDIA
73 INTEGER,
INTENT(IN) :: KFDIA
74 INTEGER,
INTENT(IN) :: KBDIA
76 INTEGER,
INTENT(IN) :: KTDIA
79 REAL,
INTENT(IN) :: PDTCONV
82 LOGICAL,
INTENT(IN) :: ODEEP
83 LOGICAL,
INTENT(IN) :: OSHAL
84 LOGICAL,
INTENT(IN) :: OREFRESH_ALL
86 LOGICAL,
INTENT(IN) :: ODOWN
88 INTEGER,
INTENT(IN) :: KICE
90 INTEGER,
INTENT(IN) :: KENSM
94 LOGICAL,
INTENT(IN) :: OSETTADJ
96 REAL,
INTENT(IN) :: PTADJD
97 REAL,
INTENT(IN) :: PTADJS
99 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PT
100 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRV
101 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRC
102 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRI
103 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PU
104 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PV
105 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PW
106 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPABS
107 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZZ
108 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
110 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCOUNT
112 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PTTEN
113 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRVTEN
114 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRCTEN
115 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRITEN
116 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PPRTEN
117 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PPRSTEN
120 LOGICAL,
INTENT(IN) :: OCHTRANS
122 INTEGER,
INTENT(IN) :: KCH1
123 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(IN) :: PCH1
124 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(INOUT):: PCH1TEN
128 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUMF
129 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDMF
130 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PPRLFLX
131 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PPRSFLX
132 REAL,
DIMENSION(KLON),
INTENT(INOUT) :: PCAPE
133 INTEGER,
DIMENSION(KLON),
INTENT(INOUT) :: KCLTOP
134 INTEGER,
DIMENSION(KLON),
INTENT(INOUT) :: KCLBAS
140 INTEGER :: JI, JK, JN
142 REAL,
DIMENSION(KLON) :: ZTIMEC, ZPRLTEN
145 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTTENS, ZRVTENS, ZRCTENS, ZRITENS, &
147 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZCH1TENS
148 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ICLBASS, ICLTOPS
153 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZTTENE
154 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZRVTENE
155 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZRCTENE
156 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZRITENE
157 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRLTENE
158 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRSTENE
159 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZUMFE
160 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZDMFE
161 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZPRLFLXE
162 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZPRSFLXE
163 REAL,
DIMENSION(:,:,:,:),
ALLOCATABLE:: ZCH1TENE
164 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ICLTOPE
165 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ICLBASE
166 REAL,
DIMENSION(:),
ALLOCATABLE :: ZEDUMMY
167 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IEDUMMY
168 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWEIGHT
177 ALLOCATE( zttens(klon,klev) );
ALLOCATE( zrvtens(klon,klev) )
178 ALLOCATE( zrctens(klon,klev) );
ALLOCATE( zritens(klon,klev) )
179 ALLOCATE( zch1tens(klon,klev,kch1) )
180 ALLOCATE( zumfs(klon,klev) )
181 ALLOCATE( iclbass(klon) );
ALLOCATE( icltops(klon) )
188 kens = min( kensm, 3 )
190 ALLOCATE( zttene(klon,klev,kens) )
191 ALLOCATE( zrvtene(klon,klev,kens) )
192 ALLOCATE( zrctene(klon,klev,kens) )
193 ALLOCATE( zritene(klon,klev,kens) )
194 ALLOCATE( zumfe(klon,klev,kens) )
195 ALLOCATE( zdmfe(klon,klev,kens) )
196 ALLOCATE( zch1tene(klon,klev,kch1,kens) )
197 ALLOCATE( zprlflxe(klon,klev,kens) )
198 ALLOCATE( zprsflxe(klon,klev,kens) )
199 ALLOCATE( zprltene(klon,kens) )
200 ALLOCATE( zprstene(klon,kens) )
201 ALLOCATE( icltope(klon,kens) )
202 ALLOCATE( iclbase(klon,kens) )
203 ALLOCATE( zedummy(klon) )
204 ALLOCATE( iedummy(klon) )
205 ALLOCATE( zweight(kens) )
217 IF ( osettadj ) ztimec(:) = ptadjd
220 CALL convect_deep( klon, klev, kidia, kfdia, kbdia, ktdia, &
221 pdtconv, kice, orefresh_all, odown, osettadj, &
222 ppabs, pzz, pdxdy, ztimec, &
223 pt, prv, prc, pri, pu, pv, pw, &
224 kcount, ptten, prvten, prcten, priten, &
226 kcltop, kclbas, pprlflx, pprsflx, &
228 ochtrans, kch1, pch1, pch1ten )
239 CALL convect_deep( klon, klev, kidia, kfdia, kbdia, ktdia, &
240 pdtconv, kice, orefresh_all, odown, osettadj, &
241 ppabs, pzz, pdxdy, ztimec, &
242 pt, prv, prc, pri, pu, pv, pw, &
243 iedummy, zttene(:,:,1), zrvtene(:,:,1), zrctene(:,:,1), zritene(:,:,1),&
244 zprltene(:,1), zprstene(:,1), &
245 icltope(:,1), iclbase(:,1), zprlflxe(:,:,1), zprsflxe(:,:,1), &
246 zumfe(:,:,1), zdmfe(:,:,1), zedummy, &
247 ochtrans, kch1, pch1, zch1tene(:,:,:,1) )
256 CALL convect_deep( klon, klev, kidia, kfdia, kbdia, ktdia, &
257 pdtconv, kice, orefresh_all, odown, osettadj, &
258 ppabs, pzz, pdxdy, ztimec, &
259 pt, prv, prc, pri, pu, pv, pw*1.5+1.e-4, &
260 iedummy, zttene(:,:,2), zrvtene(:,:,2), zrctene(:,:,2), zritene(:,:,2),&
261 zprltene(:,2), zprstene(:,2), &
262 icltope(:,2), iclbase(:,2), zprlflxe(:,:,2), zprsflxe(:,:,2), &
263 zumfe(:,:,2), zdmfe(:,:,2), zedummy, &
264 ochtrans, kch1, pch1, zch1tene(:,:,:,2) )
271 CALL convect_deep( klon, klev, kidia, kfdia, kbdia, ktdia, &
272 pdtconv, kice, orefresh_all, odown, osettadj, &
273 ppabs, pzz, pdxdy, ztimec, &
274 pt, prv, prc, pri, pu, pv, pw*.5-1.e-4, &
275 iedummy, zttene(:,:,3), zrvtene(:,:,3), zrctene(:,:,3), zritene(:,:,3),&
276 zprltene(:,3), zprstene(:,3), &
277 icltope(:,3), iclbase(:,3), zprlflxe(:,:,3), zprsflxe(:,:,3), &
278 zumfe(:,:,3), zdmfe(:,:,3), zedummy, &
279 ochtrans, kch1, pch1, zch1tene(:,:,:,3) )
283 IF ( .NOT. odeep )
THEN
310 pdtconv, kice, osettadj, ptadjs, &
312 pt, prv, prc, pri, pw, &
313 zttens, zrvtens, zrctens, zritens, &
314 icltops, iclbass, zumfs, &
315 ochtrans, kch1, pch1, zch1tens )
317 IF ( .NOT. oshal )
THEN
334 IF ( kens == 1 ) zweight(:) = .5
335 IF ( kens > 1 ) zweight(:) = 1.
337 ptten(:,:) = ptten(:,:) + zweight(jn) * zttene(:,:,jn)
338 prvten(:,:) = prvten(:,:) + zweight(jn) * zrvtene(:,:,jn)
339 prcten(:,:) = prcten(:,:) + zweight(jn) * zrctene(:,:,jn)
340 priten(:,:) = priten(:,:) + zweight(jn) * zritene(:,:,jn)
341 pprlflx(:,:)= pprlflx(:,:)+ zweight(jn) * zprlflxe(:,:,jn)
342 pprsflx(:,:)= pprsflx(:,:)+ zweight(jn) * zprsflxe(:,:,jn)
343 pumf(:,:) = pumf(:,:) + zweight(jn) * zumfe(:,:,jn)
344 pdmf(:,:) = pdmf(:,:) + zweight(jn) * zdmfe(:,:,jn)
345 zprlten(:) = zprlten(:) + zweight(jn) * zprltene(:,jn)
346 pprsten(:) = pprsten(:) + zweight(jn) * zprstene(:,jn)
347 kcltop(:) = max(kcltop(:), icltope(:,jn))
348 kclbas(:) = max(kclbas(:), iclbase(:,jn))
350 & pch1ten(:,:,:) = pch1ten(:,:,:) + zweight(jn) * zch1tene(:,:,:,jn)
353 zsum = 1. / ( 1. + sum( zweight(:) ) )
356 ptten(:,:) = ptten(:,:) * zsum + zttens(:,:)
357 prvten(:,:) = prvten(:,:) * zsum + zrvtens(:,:)
358 prcten(:,:) = prcten(:,:) * zsum + zrctens(:,:)
359 priten(:,:) = priten(:,:) * zsum + zritens(:,:)
360 pprlflx(:,:)= pprlflx(:,:)* zsum
361 pprsflx(:,:)= pprsflx(:,:)* zsum
362 pumf(:,:) = pumf(:,:) * zsum + zumfs(:,:)
363 pdmf(:,:) = pdmf(:,:) * zsum
364 pprten(:) = ( zprlten(:) + pprsten(:) ) * zsum
365 pprsten(:) = pprsten(:) * zsum
366 kcltop(:) = max(kcltop(:), icltops(:))
367 kclbas(:) = max(kclbas(:), iclbass(:))
369 pch1ten(:,:,:) = pch1ten(:,:,:) * zsum + zch1tens(:,:,:)
374 DEALLOCATE( iclbass );
DEALLOCATE( icltops )
376 DEALLOCATE( zch1tens )
377 DEALLOCATE( zrctens );
DEALLOCATE( zritens )
378 DEALLOCATE( zttens );
DEALLOCATE( zrvtens )
381 DEALLOCATE( zttene );
DEALLOCATE( zrvtene )
382 DEALLOCATE( zrctene );
DEALLOCATE( zritene )
383 DEALLOCATE( zumfe );
DEALLOCATE( zdmfe )
384 DEALLOCATE( zch1tene )
385 DEALLOCATE( zprlflxe );
DEALLOCATE( zprsflxe )
386 DEALLOCATE( zprltene );
DEALLOCATE( zprstene )
387 DEALLOCATE( zedummy );
DEALLOCATE( iedummy )
388 DEALLOCATE( zweight )
715 SUBROUTINE convect_deep( KLON, KLEV, KIDIA, KFDIA, KBDIA, KTDIA, &
716 pdtconv, kice, orefresh, odown, osettadj, &
717 ppabst, pzz, pdxdy, ptimec, &
718 ptt, prvt, prct, prit, put, pvt, pwt, &
719 kcount, ptten, prvten, prcten, priten, &
721 kcltop, kclbas, pprlflx, pprsflx, &
723 och1conv, kch1, pch1, pch1ten )
819 INTEGER,
INTENT(IN) :: KLON
820 INTEGER,
INTENT(IN) :: KLEV
821 INTEGER,
INTENT(IN) :: KIDIA
822 INTEGER,
INTENT(IN) :: KFDIA
823 INTEGER,
INTENT(IN) :: KBDIA
825 INTEGER,
INTENT(IN) :: KTDIA
828 REAL,
INTENT(IN) :: PDTCONV
831 INTEGER,
INTENT(IN) :: KICE
833 LOGICAL,
INTENT(IN) :: OREFRESH
835 LOGICAL,
INTENT(IN) :: ODOWN
837 LOGICAL,
INTENT(IN) :: OSETTADJ
839 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTT
840 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRVT
841 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRCT
842 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRIT
843 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUT
844 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PVT
845 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PWT
847 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPABST
848 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZZ
849 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
850 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTIMEC
853 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCOUNT
855 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PTTEN
857 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRVTEN
858 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRCTEN
859 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRITEN
860 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PPRLTEN
862 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PPRSTEN
864 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCLTOP
865 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCLBAS
868 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PPRLFLX
869 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PPRSFLX
870 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUMF
871 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PDMF
872 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PCAPE
874 LOGICAL,
INTENT(IN) :: OCH1CONV
875 INTEGER,
INTENT(IN) :: KCH1
876 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(IN) :: PCH1
877 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(INOUT):: PCH1TEN
882 INTEGER :: ITEST, ICONV, ICONV1
888 INTEGER :: JK, JKP, JKM
890 REAL :: ZEPS, ZEPSA, ZEPSB
891 REAL :: ZCPORD, ZRDOCP
893 LOGICAL,
DIMENSION(KLON, KLEV) :: GTRIG3
894 LOGICAL,
DIMENSION(KLON) :: GTRIG
895 REAL,
DIMENSION(KLON,KLEV) :: ZTHT, ZSTHV, ZSTHES
897 REAL,
DIMENSION(KLON) :: ZTIME
898 REAL,
DIMENSION(KLON) :: ZWORK2, ZWORK2B
903 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDPL
904 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IPBL
905 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILCL
906 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IETL
907 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ICTL
908 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILFS
909 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDBL
910 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IML
912 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISDPL
913 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISPBL
914 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISLCL
915 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTHLCL
916 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTLCL
917 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSRVLCL
918 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSWLCL
919 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSZLCL
920 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTHVELCL
921 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSDXDY
924 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZZ
925 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRES
926 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDPRES
928 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZU
929 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZV
930 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZW
931 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTT
932 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTH
933 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHV
934 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHL
935 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHES, ZTHEST
936 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRW
937 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRV
938 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRC
939 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRI
940 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDXDY
943 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUMF
944 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUER
945 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUDR
946 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUPR
948 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUTHL
949 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUTHV
950 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURW
951 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURC
952 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURI
953 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURR
955 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURS
957 REAL,
DIMENSION(:),
ALLOCATABLE :: ZUTPR
958 REAL,
DIMENSION(:),
ALLOCATABLE :: ZMFLCL
959 REAL,
DIMENSION(:),
ALLOCATABLE :: ZCAPE
960 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTHLCL
961 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTLCL
962 REAL,
DIMENSION(:),
ALLOCATABLE :: ZRVLCL
963 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWLCL
964 REAL,
DIMENSION(:),
ALLOCATABLE :: ZZLCL
965 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTHVELCL
968 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDMF
969 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDER
970 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDDR
971 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDTHL
972 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDRW
973 REAL,
DIMENSION(:),
ALLOCATABLE :: ZMIXF
974 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTPR
975 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSPR
976 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDTEVR
977 REAL,
DIMENSION(:),
ALLOCATABLE :: ZPREF
978 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDTEVRF
979 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRLFLX
980 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRSFLX
983 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZLMASS
984 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTIMEA
985 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTIMEC, ZTIMED
988 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHC
989 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRVC
990 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRCC
991 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRIC
992 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWSUB
994 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GTRIG1
995 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GWORK
996 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IINDEX, IJINDEX, IJSINDEX, IJPINDEX
997 REAL,
DIMENSION(:),
ALLOCATABLE :: ZCPH
998 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLV, ZLS
1002 REAL,
DIMENSION(:,:,:),
ALLOCATABLE:: ZCH1
1003 REAL,
DIMENSION(:,:,:),
ALLOCATABLE:: ZCH1C
1004 REAL,
DIMENSION(:,:),
ALLOCATABLE:: ZWORK3
1005 LOGICAL,
DIMENSION(:,:,:),
ALLOCATABLE::GTRIG4
1015 jcvexb = max( 0, kbdia - 1 )
1018 jcvext = max( 0, ktdia - 1 )
1026 kcount(iib:iie) = kcount(iib:iie) - 1
1028 IF ( orefresh )
THEN
1033 gtrig(:) = kcount(:) <= 0
1034 itest = count( gtrig(:) )
1035 IF ( itest == 0 )
RETURN
1043 gtrig3(:,:) = spread( gtrig(:), dim=2, ncopies=iks )
1044 WHERE ( gtrig3(:,:) )
1063 IF ( och1conv )
THEN
1064 ALLOCATE( gtrig4(klon,klev,kch1) )
1065 gtrig4(:,:,:) = spread( gtrig3(:,:), dim=3, ncopies=kch1 )
1066 WHERE( gtrig4(:,:,:) ) pch1ten(:,:,:) = 0.
1067 DEALLOCATE( gtrig4 )
1089 IF ( ppabst(ji,jk) > 40.e2 )
THEN
1090 ztht(ji,jk) = ptt(ji,jk) * (
xp00 / ppabst(ji,jk) ) ** zrdocp
1091 zsthv(ji,jk) = ztht(ji,jk) * ( 1. + zepsa * prvt(ji,jk) ) / &
1092 ( 1. + prvt(ji,jk) + prct(ji,jk) + prit(ji,jk) )
1099 zes = min( 1., zeps * zes / ( ppabst(ji,jk) - zes ) )
1100 zsthes(ji,jk) = ptt(ji,jk) * ( ztht(ji,jk) / ptt(ji,jk) ) ** &
1101 ( 1. - 0.28 * zes ) * exp( min(500., &
1102 ( 3374.6525 / ptt(ji,jk) - 2.5403 ) &
1103 * zes * ( 1. + 0.81 * zes ) ) )
1118 ALLOCATE( zpres(itest,iks) )
1119 ALLOCATE( zz(itest,iks) )
1120 ALLOCATE( zw(itest,iks) )
1121 ALLOCATE( zth(itest,iks) )
1122 ALLOCATE( zthv(itest,iks) )
1123 ALLOCATE( zthest(itest,iks) )
1124 ALLOCATE( zrv(itest,iks) )
1125 ALLOCATE( zsthlcl(itest) )
1126 ALLOCATE( zstlcl(itest) )
1127 ALLOCATE( zsrvlcl(itest) )
1128 ALLOCATE( zswlcl(itest) )
1129 ALLOCATE( zszlcl(itest) )
1130 ALLOCATE( zsthvelcl(itest) )
1131 ALLOCATE( isdpl(itest) )
1132 ALLOCATE( ispbl(itest) )
1133 ALLOCATE( islcl(itest) )
1134 ALLOCATE( zsdxdy(itest) )
1135 ALLOCATE( gtrig1(itest) )
1136 ALLOCATE( zcape(itest) )
1137 ALLOCATE( iindex(klon) )
1138 ALLOCATE( ijsindex(itest) )
1142 ijsindex(:) = pack( iindex(:), mask=gtrig(:) )
1147 zpres(ji,jk) = ppabst(jl,jk)
1148 zz(ji,jk) = pzz(jl,jk)
1149 zth(ji,jk) = ztht(jl,jk)
1150 zthv(ji,jk) = zsthv(jl,jk)
1151 zthest(ji,jk) = zsthes(jl,jk)
1152 zrv(ji,jk) = max( 0., prvt(jl,jk) )
1153 zw(ji,jk) = pwt(jl,jk)
1158 zsdxdy(ji) = pdxdy(jl)
1169 islcl(:) = max( ikb, 2 )
1175 zpres, zth, zthv, zthest, &
1176 zrv, zw, zz, zsdxdy, &
1177 zsthlcl, zstlcl, zsrvlcl, zswlcl, zszlcl, &
1178 zsthvelcl, islcl, isdpl, ispbl, gtrig1, &
1183 pcape(jl) = zcape(ji)
1190 DEALLOCATE( zthest )
1202 iconv = count( gtrig1(:) )
1203 IF ( iconv == 0 )
THEN
1204 DEALLOCATE( zsthlcl )
1205 DEALLOCATE( zstlcl )
1206 DEALLOCATE( zsrvlcl )
1207 DEALLOCATE( zswlcl )
1208 DEALLOCATE( zszlcl )
1209 DEALLOCATE( zsthvelcl )
1210 DEALLOCATE( zsdxdy )
1214 DEALLOCATE( gtrig1 )
1215 DEALLOCATE( iindex )
1216 DEALLOCATE( ijsindex )
1222 ALLOCATE( idpl(iconv) )
1223 ALLOCATE( ipbl(iconv) )
1224 ALLOCATE( ilcl(iconv) )
1225 ALLOCATE( ictl(iconv) )
1226 ALLOCATE( ietl(iconv) )
1230 ALLOCATE( zz(iconv,iks) )
1231 ALLOCATE( zpres(iconv,iks) )
1232 ALLOCATE( zdpres(iconv,iks) )
1233 ALLOCATE( zu(iconv,iks) )
1234 ALLOCATE( zv(iconv,iks) )
1235 ALLOCATE( ztt(iconv, iks) )
1236 ALLOCATE( zth(iconv,iks) )
1237 ALLOCATE( zthv(iconv,iks) )
1238 ALLOCATE( zthl(iconv,iks) )
1239 ALLOCATE( zthes(iconv,iks) )
1240 ALLOCATE( zrv(iconv,iks) )
1241 ALLOCATE( zrc(iconv,iks) )
1242 ALLOCATE( zri(iconv,iks) )
1243 ALLOCATE( zrw(iconv,iks) )
1244 ALLOCATE( zdxdy(iconv) )
1248 ALLOCATE( zumf(iconv,iks) )
1249 ALLOCATE( zuer(iconv,iks) )
1250 ALLOCATE( zudr(iconv,iks) )
1251 ALLOCATE( zupr(iconv,iks) )
1252 ALLOCATE( zuthl(iconv,iks) )
1253 ALLOCATE( zuthv(iconv,iks) )
1254 ALLOCATE( zurw(iconv,iks) )
1255 ALLOCATE( zurc(iconv,iks) )
1256 ALLOCATE( zuri(iconv,iks) )
1257 ALLOCATE( zurr(iconv,iks) )
1258 ALLOCATE( zurs(iconv,iks) )
1259 ALLOCATE( zutpr(iconv) )
1260 ALLOCATE( zthlcl(iconv) )
1261 ALLOCATE( ztlcl(iconv) )
1262 ALLOCATE( zrvlcl(iconv) )
1263 ALLOCATE( zwlcl(iconv) )
1264 ALLOCATE( zmflcl(iconv) )
1265 ALLOCATE( zzlcl(iconv) )
1266 ALLOCATE( zthvelcl(iconv) )
1267 ALLOCATE( zcape(iconv) )
1271 ALLOCATE( ijindex(iconv) )
1272 ALLOCATE( ijpindex(iconv) )
1273 ALLOCATE( zcph(iconv) )
1274 ALLOCATE( zlv(iconv) )
1275 ALLOCATE( zls(iconv) )
1282 gtrig(:) = unpack( gtrig1(:), mask=gtrig(:), field=.
false. )
1283 ijindex(:) = pack( iindex(:), mask=gtrig(:) )
1288 zz(ji,jk) = pzz(jl,jk)
1289 zpres(ji,jk) = ppabst(jl,jk)
1290 ztt(ji,jk) = ptt(jl,jk)
1291 zth(ji,jk) = ztht(jl,jk)
1292 zthes(ji,jk) = zsthes(jl,jk)
1293 zrv(ji,jk) = max( 0., prvt(jl,jk) )
1294 zrc(ji,jk) = max( 0., prct(jl,jk) )
1295 zri(ji,jk) = max( 0., prit(jl,jk) )
1296 zthv(ji,jk) = zsthv(jl,jk)
1297 zu(ji,jk) = put(jl,jk)
1298 zv(ji,jk) = pvt(jl,jk)
1301 IF ( osettadj )
THEN
1302 ALLOCATE( ztimed(iconv) )
1305 ztimed(ji) = ptimec(jl)
1312 ijpindex(:) = pack( ijsindex(:), mask=gtrig1(:) )
1315 idpl(ji) = isdpl(jl)
1316 ipbl(ji) = ispbl(jl)
1317 ilcl(ji) = islcl(jl)
1318 zthlcl(ji) = zsthlcl(jl)
1319 ztlcl(ji) = zstlcl(jl)
1320 zrvlcl(ji) = zsrvlcl(jl)
1321 zwlcl(ji) = zswlcl(jl)
1322 zzlcl(ji) = zszlcl(jl)
1323 zthvelcl(ji) = zsthvelcl(jl)
1324 zdxdy(ji) = zsdxdy(jl)
1326 ALLOCATE( gwork(iconv) )
1327 gwork(:) = pack( gtrig1(:), mask=gtrig1(:) )
1328 DEALLOCATE( gtrig1 )
1329 ALLOCATE( gtrig1(iconv) )
1330 gtrig1(:) = gwork(:)
1333 DEALLOCATE( ijpindex )
1337 DEALLOCATE( zsthlcl )
1338 DEALLOCATE( zstlcl )
1339 DEALLOCATE( zsrvlcl )
1340 DEALLOCATE( zswlcl )
1341 DEALLOCATE( zszlcl )
1342 DEALLOCATE( zsthvelcl )
1343 DEALLOCATE( zsdxdy )
1350 DO jk = ikb + 1, ike
1351 zdpres(:,jk) = zpres(:,jk-1) - zpres(:,jk)
1358 zrw(:,jk) = zrv(:,jk) + zrc(:,jk) + zri(:,jk)
1362 zthl(:,jk) = zcph(:) * ztt(:,jk) + ( 1. + zrw(:,jk) ) *
xg * zz(:,jk) &
1363 - zlv(:) * zrc(:,jk) - zls(:) * zri(:,jk)
1375 zmflcl(ji) = zpres(ji,jk) / (
xrd * ztt(ji,jk) * &
1385 kice, zpres, zdpres, zz, zthl, zthv, zthes, zrw, &
1386 zthlcl, ztlcl, zrvlcl, zwlcl, zzlcl, zthvelcl, &
1387 zmflcl, gtrig1, ilcl, idpl, ipbl, &
1388 zumf, zuer, zudr, zuthl, zuthv, zurw, &
1389 zurc, zuri, zurr, zurs, zupr, &
1390 zutpr, zcape, ictl, ietl )
1399 iconv1 = count(gtrig1)
1401 IF ( iconv1 > 0 )
THEN
1408 ALLOCATE( ilfs(iconv) )
1409 ALLOCATE( idbl(iconv) )
1410 ALLOCATE( iml(iconv) )
1411 ALLOCATE( zdmf(iconv,iks) )
1412 ALLOCATE( zder(iconv,iks) )
1413 ALLOCATE( zddr(iconv,iks) )
1414 ALLOCATE( zdthl(iconv,iks) )
1415 ALLOCATE( zdrw(iconv,iks) )
1416 ALLOCATE( zlmass(iconv,iks) )
1418 zlmass(:,jk) = zdxdy(:) * zdpres(:,jk) /
xg
1420 zlmass(:,ikb) = zlmass(:,ikb+1)
1421 ALLOCATE( zmixf(iconv) )
1422 ALLOCATE( ztpr(iconv) )
1423 ALLOCATE( zspr(iconv) )
1424 ALLOCATE( zdtevr(iconv) )
1425 ALLOCATE( zpref(iconv) )
1426 ALLOCATE( zdtevrf(iconv,iks) )
1427 ALLOCATE( zprlflx(iconv,iks) )
1428 ALLOCATE( zprsflx(iconv,iks) )
1432 ALLOCATE( ztimea(iconv) )
1433 ALLOCATE( ztimec(iconv) )
1434 ALLOCATE( zthc(iconv,iks) )
1435 ALLOCATE( zrvc(iconv,iks) )
1436 ALLOCATE( zrcc(iconv,iks) )
1437 ALLOCATE( zric(iconv,iks) )
1438 ALLOCATE( zwsub(iconv,iks) )
1449 zu, zv, zpres, zz, zdxdy, ilcl, ictl, &
1453 IF ( .NOT. odown ) zpref(:) = 1.
1456 ztimec(:) = max( 1800., min( 3600., ztimea(:) ) )
1457 ztimec(:) =
REAL( INT( ZTIMEC(:) / PDTCONV ) ) * PDTCONV
1458 ztimec(:) = max( pdtconv, ztimec(:) )
1459 IF ( osettadj )
THEN
1460 ztimec(:) = max( pdtconv, ztimed(:) )
1468 DO jk = ike, ikb, -1
1469 WHERE( ztt(:,jk) <=
xtt ) iml(:) = jk
1473 kice, zpres, zdpres, zz, zth, zthes, &
1475 zpref, ilcl, ictl, ietl, &
1476 zuthl, zurw, zurc, zuri, &
1477 zdmf, zder, zddr, zdthl, zdrw, &
1478 zmixf, zdtevr, ilfs, idbl, iml, &
1487 zpres,zumf, zuer, zudr, zupr, zutpr, zurw,&
1488 zdmf, zder, zddr, zdthl, zdrw, &
1489 zpref, ztpr, zmixf, zdtevr, &
1490 ilfs, idbl, ilcl, ictl, ietl, &
1500 zpres, zdpres, zz, zdxdy, zlmass, &
1501 zthl, zth, zrw, zrc, zri, gtrig1, &
1502 zthc, zrvc, zrcc, zric, zwsub, &
1503 ilcl, idpl, ipbl, ilfs, ictl, iml, &
1504 zumf, zuer, zudr, zuthl, zurw, &
1506 zdmf, zder, zddr, zdthl, zdrw, &
1507 ztpr, zspr, zdtevr, &
1510 zdtevrf, zprlflx, zprsflx )
1527 zthc(:,jk) = ( zthc(:,jk) - zth(:,jk) ) / ztimec(:) &
1528 * ( zpres(:,jk) /
xp00 ) ** zrdocp
1529 zrvc(:,jk) = ( zrvc(:,jk) - zrw(:,jk) + zrc(:,jk) + zri(:,jk) ) &
1532 zrcc(:,jk) = ( zrcc(:,jk) - zrc(:,jk) ) / ztimec(:)
1533 zric(:,jk) = ( zric(:,jk) - zri(:,jk) ) / ztimec(:)
1535 zprlflx(:,jk) = zprlflx(:,jk) / (
xrholw * zdxdy(:) )
1536 zprsflx(:,jk) = zprsflx(:,jk) / (
xrholw * zdxdy(:) )
1540 zprlflx(:,ikb) = zprlflx(:,ikb+1)
1541 zprsflx(:,ikb) = zprsflx(:,ikb+1)
1549 jkm = maxval( ictl(:) )
1552 DO jk = jkm, ikb+1, -1
1555 zwork2(ji) = zwork2(ji) + ( zrvc(ji,jk) + zrcc(ji,jk) + zric(ji,jk) ) * &
1556 (zpres(ji,jk) - zpres(ji,jkp)) /
xg
1568 IF ( ztpr(ji) > 0.)
THEN
1570 zwork2(ji) = ( ztpr(ji) / zdxdy(ji) + zwork2(ji) ) *
xg / &
1571 ( zpres(ji,ikb+1) - zpres(ji,jkp) )
1580 DO jk = jkm, ikb+1, -1
1582 IF ( ztpr(ji) > 0. .AND. jk <= ictl(ji) )
THEN
1583 zrvc(ji,jk) = zrvc(ji,jk) - zwork2(ji)
1597 ptten(jl,jk) = zthc(ji,jk)
1598 prvten(jl,jk) = zrvc(ji,jk)
1599 prcten(jl,jk) = zrcc(ji,jk)
1600 priten(jl,jk) = zric(ji,jk)
1602 pprlflx(jl,jk) = zprlflx(ji,jk)
1603 pprsflx(jl,jk) = zprsflx(ji,jk)
1614 ztpr(:) = ztpr(:) / (
xrholw * zdxdy(:) )
1615 zspr(:) = zspr(:) / (
xrholw * zdxdy(:) )
1616 ztpr(:) = ztpr(:) - zspr(:)
1620 pprlten(jl) = ztpr(ji)
1621 pprsten(jl) = zspr(ji)
1628 ilcl(:) = min( ilcl(:), ictl(:) )
1631 kcltop(jl) = ictl(ji)
1632 kclbas(jl) = ilcl(ji)
1649 ztime(jl) = ztimec(ji)
1650 zwork2(jl) = ztimea(ji)
1651 zwork2(jl) = min( zwork2(jl), ztime(jl) )
1652 zwork2(jl) = max( zwork2(jl), pdtconv )
1653 IF ( gtrig(jl) ) kcount(jl) = int( zwork2(jl) / pdtconv )
1654 IF ( gtrig(jl) .AND. pprlten(jl)<1.e-14 ) kcount(jl) = 0
1662 IF ( och1conv )
THEN
1664 ALLOCATE( zch1(iconv,iks,kch1) )
1665 ALLOCATE( zch1c(iconv,iks,kch1) )
1666 ALLOCATE( zwork3(iconv,kch1) )
1671 zch1(ji,jk,:) = pch1(jl,jk,:)
1676 idpl, ipbl, ilcl, ictl, ilfs, idbl, &
1677 zumf, zuer, zudr, zdmf, zder, zddr, &
1678 ztimec, zdxdy, zmixf, zlmass, zwsub, &
1683 zch1c(:,jk,jn) = ( zch1c(:,jk,jn)- zch1(:,jk,jn) ) / ztimec(:)
1692 jkm = maxval( ictl(:) )
1694 DO jk = jkm, ikb+1, -1
1697 zwork3(ji,:) = zwork3(ji,:) + zch1c(ji,jk,:) * &
1698 (zpres(ji,jk) - zpres(ji,jkp)) /
xg
1705 IF ( ztpr(ji) > 0.)
THEN
1707 zwork3(ji,:) = zwork3(ji,:) * &
1708 xg / ( zpres(ji,ikb+1) - zpres(ji,jkp) )
1714 DO jk = jkm, ikb+1, -1
1716 IF ( ztpr(ji) > 0. .AND. jk <= ictl(ji) )
THEN
1717 zch1c(ji,jk,:) = zch1c(ji,jk,:) - zwork3(ji,:)
1718 zch1c(ji,jk,:) = max( zch1c(ji,jk,:), -zch1(ji,jk,:)/ztimec(ji) )
1726 pch1ten(jl,jk,:) = zch1c(ji,jk,:)
1736 zumf(:,jk) = zumf(:,jk) / zdxdy(:)
1737 zdmf(:,jk) = zdmf(:,jk) / zdxdy(:)
1740 WHERE ( pprlten(:)<1.e-14 ) zwork2(:) = 0.
1744 pumf(jl,jk) = zumf(ji,jk) * zwork2(jl)
1745 pdmf(jl,jk) = zdmf(ji,jk) * zwork2(jl)
1760 DEALLOCATE( zlmass )
1764 DEALLOCATE( zdtevr )
1769 DEALLOCATE( zdtevrf )
1770 DEALLOCATE( zprlflx )
1771 DEALLOCATE( zprsflx )
1775 DEALLOCATE( ztimea )
1776 DEALLOCATE( ztimec )
1783 IF ( och1conv )
THEN
1786 DEALLOCATE( zwork3 )
1803 DEALLOCATE( zdpres )
1831 DEALLOCATE( zthlcl )
1833 DEALLOCATE( zrvlcl )
1836 DEALLOCATE( zthvelcl )
1837 DEALLOCATE( zmflcl )
1839 IF ( osettadj )
DEALLOCATE( ztimed )
1843 DEALLOCATE( iindex )
1844 DEALLOCATE( ijindex )
1845 DEALLOCATE( ijsindex )
1846 DEALLOCATE( gtrig1 )
1852 ppres,
pth, pthv, pthes, &
1853 prv, pw, pz, pdxdy, &
1854 pthlcl, ptlcl, prvlcl, pwlcl, pzlcl, &
1855 pthvelcl, klcl, kdpl, kpbl, otrig, &
1933 INTEGER,
INTENT(IN) :: KLON
1934 INTEGER,
INTENT(IN) :: KLEV
1935 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
1936 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH, PTHV
1937 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHES
1938 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRV
1939 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
1940 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
1941 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PW
1943 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTHLCL
1944 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTLCL
1945 REAL,
DIMENSION(KLON),
INTENT(OUT):: PRVLCL
1946 REAL,
DIMENSION(KLON),
INTENT(OUT):: PWLCL
1947 REAL,
DIMENSION(KLON),
INTENT(OUT):: PZLCL
1948 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTHVELCL
1949 LOGICAL,
DIMENSION(KLON),
INTENT(OUT):: OTRIG
1950 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KLCL
1951 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KDPL
1952 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KPBL
1953 REAL,
DIMENSION(KLON),
INTENT(OUT):: PCAPE
1957 INTEGER :: JKK, JK, JKP, JKM, JKDL, JL, JKT, JT
1959 INTEGER :: IIE, IKB, IKE
1961 REAL :: ZCPORD, ZRDOCP
1963 REAL,
DIMENSION(KLON) :: ZTHLCL, ZTLCL, ZRVLCL, &
1964 ZWLCL, ZZLCL, ZTHVELCL
1965 INTEGER,
DIMENSION(KLON) :: IDPL, IPBL, ILCL
1966 REAL,
DIMENSION(KLON) :: ZPLCL
1967 REAL,
DIMENSION(KLON) :: ZZDPL
1968 REAL,
DIMENSION(KLON) :: ZTHVLCL
1969 REAL,
DIMENSION(KLON) :: ZTMIX
1970 REAL,
DIMENSION(KLON) :: ZEVMIX
1971 REAL,
DIMENSION(KLON) :: ZDPTHMIX, ZPRESMIX
1972 REAL,
DIMENSION(KLON) :: ZCAPE
1973 REAL,
DIMENSION(KLON) :: ZTHEUL
1974 REAL,
DIMENSION(KLON) :: ZLV, ZCPH
1975 REAL,
DIMENSION(KLON) :: ZDP
1976 REAL,
DIMENSION(KLON) :: ZTOP
1977 REAL,
DIMENSION(KLON,KLEV):: ZCAP
1979 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3
1980 LOGICAL,
DIMENSION(KLON) :: GTRIG, GTRIG2
1981 LOGICAL,
DIMENSION(KLON) :: GWORK1
2013 pzlcl(:) = pz(:,ikb)
2014 zzdpl(:) = pz(:,ikb)
2024 DO jk = ikb + 1, ike - 2
2028 IF ( pz(1,jk) - pz(1,ikb) < 12.e3 ) jt = jk
2035 jkp = minval( idpl(:) ) + 1
2040 gwork1(:) = zzdpl(:) - pz(:,ikb) <
xzlcl
2048 zzdpl(:) = pz(:,jkk)
2056 DO jk = jkk, ike - 1
2059 IF ( gwork1(ji) .AND. zdpthmix(ji) <
xzpbl )
THEN
2061 zwork1(ji) = ppres(ji,jk) - ppres(ji,jkm)
2062 zdpthmix(ji) = zdpthmix(ji) + zwork1(ji)
2063 zpresmix(ji) = zpresmix(ji) + ppres(ji,jk) * zwork1(ji)
2064 zthlcl(ji) = zthlcl(ji) + pth(ji,jk) * zwork1(ji)
2065 zrvlcl(ji) = zrvlcl(ji) + prv(ji,jk) * zwork1(ji)
2068 IF ( minval( zdpthmix(:) ) >=
xzpbl )
EXIT
2074 zpresmix(:) = zpresmix(:) / zdpthmix(:)
2077 zthlcl(:) = zthlcl(:) / zdpthmix(:) +
xdthpbl
2078 zrvlcl(:) = zrvlcl(:) / zdpthmix(:) +
xdrvpbl
2079 zthvlcl(:) = zthlcl(:) * ( 1. + zepsa * zrvlcl(:) ) &
2080 / ( 1. + zrvlcl(:) )
2089 ztmix(:) = zthlcl(:) * ( zpresmix(:) /
xp00 ) ** zrdocp
2090 zevmix(:) = zrvlcl(:) * zpresmix(:) / ( zrvlcl(:) + zeps )
2091 zevmix(:) = max( 1.e-8, zevmix(:) )
2092 zwork1(:) = log( zevmix(:) / 613.3 )
2094 zwork1(:) = ( 4780.8 - 32.19 * zwork1(:) ) / ( 17.502 - zwork1(:) )
2096 ztlcl(:) = zwork1(:) - ( .212 + 1.571e-3 * ( zwork1(:) -
xtt ) &
2097 - 4.36e-4 * ( ztmix(:) -
xtt ) ) * ( ztmix(:) - zwork1(:) )
2098 ztlcl(:) = min( ztlcl(:), ztmix(:) )
2099 zplcl(:) =
xp00 * ( ztlcl(:) / zthlcl(:) ) ** zcpord
2110 zwork2(:) = zwork1(:) / ztlcl(:) * (
xbetaw / ztlcl(:) -
xgamw )
2111 zwork2(:) = ( zwork1(:) - zrvlcl(:) ) / &
2112 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
2113 ztlcl(:) = ztlcl(:) - zlv(:) / zcph(:) * zwork2(:)
2123 WHERE( gwork1(:) .AND. zrvlcl(:) > zwork1(:) )
2124 zwork2(:) = zwork1(:) / ztmix(:) * (
xbetaw / ztmix(:) -
xgamw )
2125 zwork2(:) = ( zwork1(:) - zrvlcl(:) ) / &
2126 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
2127 ztlcl(:) = ztmix(:) - zlv(:) / zcph(:) * zwork2(:)
2128 zrvlcl(:) = zrvlcl(:) - zwork2(:)
2129 zplcl(:) = zpresmix(:)
2130 zthlcl(:) = ztlcl(:) * (
xp00 / zplcl(:) ) ** zrdocp
2131 zthvlcl(:)= zthlcl(:) * ( 1. + zepsa * zrvlcl(:) ) &
2132 / ( 1. + zrvlcl(:) )
2139 DO jk = jkk, ike - 1
2141 IF ( zplcl(ji) <= ppres(ji,jk) .AND. gwork1(ji) ) ilcl(ji) = jk + 1
2152 zdp(ji) = log( zplcl(ji) / ppres(ji,jkm) ) / &
2153 log( ppres(ji,jk) / ppres(ji,jkm) )
2154 zwork1(ji) = pthv(ji,jkm) + ( pthv(ji,jk) - pthv(ji,jkm) ) * zdp(ji)
2157 zwork2(ji) = pz(ji,jkm) + ( pz(ji,jk) - pz(ji,jkm) ) * zdp(ji)
2160 zthvelcl(:) = zwork1(:)
2161 zzlcl(:) = zwork2(:)
2177 zwork1(ji) = ( pw(ji,jk) + pw(ji,jkdl)*zzlcl(ji)/pz(ji,jkdl) ) * .5 &
2178 * sqrt( pdxdy(ji) /
xa25 )
2182 zwork2(:) = sign( 1., zwork1(:) )
2183 zwork1(:) =
xwtrig * zwork2(:) * abs( zwork1(:) ) ** 0.333 &
2184 * (
xp00 / zplcl(:) ) ** zrdocp
2191 zwork3(ji) =
xg * zwork1(ji) * ( zzlcl(ji) - pz(ji,jkdl) ) &
2192 / ( pthv(ji,jkdl) + zthvelcl(ji) )
2195 zwlcl(:) = 1. + .5 * zwork2(:) * sqrt( abs( zwork3(:) ) )
2196 gtrig(:) = zthvlcl(:) - zthvelcl(:) + zwork1(:) > 0. .AND. &
2206 ztheul(:) = ztlcl(:) * ( zthlcl(:) / ztlcl(:) ) &
2207 ** ( 1. - 0.28 * zrvlcl(:) ) &
2208 * exp( ( 3374.6525 / ztlcl(:) - 2.5403 ) * &
2209 zrvlcl(:) * ( 1. + 0.81 * zrvlcl(:) ) )
2214 jkm = minval( ilcl(:) )
2218 zwork1(ji) = ( 2. * ztheul(ji) / &
2219 ( pthes(ji,jk) + pthes(ji,jl) ) - 1. ) * ( pz(ji,jk) - pz(ji,jl) )
2220 IF ( jl < ilcl(ji) ) zwork1(ji) = 0.
2221 zcape(ji) = zcape(ji) + zwork1(ji)
2222 zcap(ji,jkk) = zcap(ji,jkk) +
xg * max( 0., zwork1(ji) )
2223 zwork2(ji) =
xnhgam *
xg * zcape(ji) + 1.05 * zwlcl(ji) * zwlcl(ji)
2225 zwork2(ji) = sign( 1., zwork2(ji) )
2226 zwork3(ji) = zwork3(ji) + min(0., zwork2(ji) )
2227 zwork3(ji) = max( -1., zwork3(ji) )
2231 ztop(ji) = pz(ji,jl) * .5 * ( 1. + zwork2(ji) ) * ( 1. + zwork3(ji) ) + &
2232 ztop(ji) * .5 * ( 1. - zwork2(ji) )
2237 WHERE( ztop(:) - zzlcl(:) .GE.
xcdepth .AND. gtrig(:) .AND. gtrig2(:) )
2240 pthlcl(:) = zthlcl(:)
2241 prvlcl(:) = zrvlcl(:)
2245 pthvelcl(:) = zthvelcl(:)
2254 pcape(ji) = maxval( zcap(ji,:) )
2261 kice, ppres, pdpres, pz, pthl, pthv, pthes, prw, &
2262 pthlcl, ptlcl, prvlcl, pwlcl, pzlcl, pthvelcl, &
2263 pmflcl, otrig, klcl, kdpl, kpbl, &
2264 pumf, puer, pudr, puthl, puthv, purw, &
2265 purc, puri, purr, purs, pupr, &
2266 putpr, pcape, kctl, ketl )
2345 INTEGER,
INTENT(IN) :: KLON
2346 INTEGER,
INTENT(IN) :: KLEV
2347 INTEGER,
INTENT(IN) :: KICE
2349 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHL
2350 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHV
2351 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHES
2352 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRW
2354 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
2355 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDPRES
2357 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
2358 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTHLCL
2359 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTLCL
2360 REAL,
DIMENSION(KLON),
INTENT(IN) :: PRVLCL
2361 REAL,
DIMENSION(KLON),
INTENT(IN) :: PWLCL
2362 REAL,
DIMENSION(KLON),
INTENT(IN) :: PMFLCL
2364 REAL,
DIMENSION(KLON),
INTENT(IN) :: PZLCL
2365 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTHVELCL
2366 LOGICAL,
DIMENSION(KLON),
INTENT(INOUT):: OTRIG
2367 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
2368 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
2369 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
2372 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KCTL
2373 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KETL
2375 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUMF
2376 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUER
2377 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUDR
2378 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUTHL
2379 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUTHV
2380 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURW
2381 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURC
2382 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURI
2383 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURR
2385 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT)::PURS
2387 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT)::PUPR
2389 REAL,
DIMENSION(KLON),
INTENT(OUT):: PUTPR
2391 REAL,
DIMENSION(KLON),
INTENT(OUT):: PCAPE
2395 INTEGER :: IIE, IKB, IKE
2397 INTEGER :: JK, JKP, JKM, JK1, JK2, JKMIN
2398 REAL :: ZEPSA, ZCVOCD
2399 REAL :: ZCPORD, ZRDOCP
2401 REAL,
DIMENSION(KLON) :: ZUT
2402 REAL,
DIMENSION(KLON) :: ZUW1, ZUW2
2404 REAL,
DIMENSION(KLON) :: ZE1,ZE2,ZD1,ZD2
2406 REAL,
DIMENSION(KLON) :: ZMIXF
2407 REAL,
DIMENSION(KLON) :: ZCPH
2408 REAL,
DIMENSION(KLON) :: ZLV, ZLS
2409 REAL,
DIMENSION(KLON) :: ZURV
2410 REAL,
DIMENSION(KLON) :: ZPI
2411 REAL,
DIMENSION(KLON) :: ZTHEUL
2412 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZWORK4, ZWORK5, &
2414 INTEGER,
DIMENSION(KLON) :: IWORK
2415 LOGICAL,
DIMENSION(KLON) :: GWORK1, GWORK2, GWORK4, GWORK5
2417 LOGICAL,
DIMENSION(KLON,KLEV) :: GWORK6
2450 zuw1(:) = pwlcl(:) * pwlcl(:)
2473 ztheul(:) = ptlcl(:) * ( pthlcl(:) / ptlcl(:) ) ** ( 1. - 0.28 * prvlcl(:) ) &
2474 * exp( ( 3374.6525 / ptlcl(:) - 2.5403 ) * &
2475 prvlcl(:) * ( 1. + 0.81 * prvlcl(:) ) )
2478 zwork1(:) = (
xcpd + prvlcl(:) *
xcpv ) * ptlcl(:) &
2479 + ( 1. + prvlcl(:) ) *
xg * pzlcl(:)
2485 jkp = maxval( klcl(:) )
2486 jkm = minval( kdpl(:) )
2489 IF ( jk >= kdpl(ji) .AND. jk < klcl(ji) )
THEN
2490 pumf(ji,jk) = pmflcl(ji)
2491 puthl(ji,jk) = zwork1(ji)
2492 puthv(ji,jk) = pthlcl(ji) * ( 1. + zepsa * prvlcl(ji) ) / &
2494 purw(ji,jk) = prvlcl(ji)
2503 jkmin = minval( klcl(:) - 1 )
2504 DO jk = max( ikb + 1, jkmin ), ike - 1
2508 gwork4(:) = jk >= klcl(:) - 1
2509 gwork1(:) = gwork4(:) .AND. gwork2(:)
2512 WHERE( jk == klcl(:) - 1 ) zwork6(:) = 0.
2519 zwork1(:) = purc(:,jk) + purr(:,jk)
2520 zwork2(:) = puri(:,jk) + purs(:,jk)
2521 CALL convect_condens( klon, kice, ppres(:,jkp), puthl(:,jk), purw(:,jk),&
2522 zwork1, zwork2, pz(:,jkp), gwork1, zut, zurv, &
2523 purc(:,jkp), puri(:,jkp), zlv, zls, zcph )
2526 zpi(:) = (
xp00 / ppres(:,jkp) ) ** zrdocp
2529 puthv(:,jkp) = zpi(:) * zut(:) * ( 1. + zepsa * zurv(:) ) &
2530 / ( 1. + purw(:,jk) )
2537 zwork3(:) = pz(:,jkp) - pz(:,jk) * zwork6(:) - &
2538 ( 1. - zwork6(:) ) * pzlcl(:)
2539 zwork4(:) = pthv(:,jk) * zwork6(:) + &
2540 ( 1. - zwork6(:) ) * pthvelcl(:)
2541 zwork5(:) = 2. * zuw1(:) * puer(:,jk) / max( .1, pumf(:,jk) )
2542 zuw2(:) = zuw1(:) + zwork3(:) *
xnhgam *
xg * &
2543 ( ( puthv(:,jk) + puthv(:,jkp) ) / &
2544 ( zwork4(:) + pthv(:,jkp) ) - 1. ) &
2553 ( sqrt( max( 1.e-2, zuw2(:) ) ) + &
2554 sqrt( max( 1.e-2, zuw1(:) ) ) )
2555 purr(:,jkp) = 0.5 * ( purc(:,jk) + purc(:,jkp) + puri(:,jk) + puri(:,jkp) )&
2556 * ( 1. - exp( -
xrconv * zwork3(:) / zwork2(:) ) )
2557 pupr(:,jkp) = purr(:,jkp) * pumf(:,jk)
2558 putpr(:) = putpr(:) + pupr(:,jkp)
2559 zwork2(:) = purr(:,jkp) / max( 1.e-8, purc(:,jkp) + puri(:,jkp) )
2560 purr(:,jkp) = zwork2(:) * purc(:,jkp)
2561 purs(:,jkp) = zwork2(:) * puri(:,jkp)
2567 purw(:,jkp) = purw(:,jk) - purr(:,jkp) - purs(:,jkp)
2568 purc(:,jkp) = purc(:,jkp) - purr(:,jkp)
2569 puri(:,jkp) = puri(:,jkp) - purs(:,jkp)
2570 puthl(:,jkp) = (
xcpd + purw(:,jkp) *
xcpv ) * zut(:) &
2571 + ( 1. + purw(:,jkp) ) *
xg * pz(:,jkp) &
2572 - zlv(:) * purc(:,jkp) - zls(:) * puri(:,jkp)
2590 zwork1(:) = zmixf(:) * pthl(:,jkp) &
2591 + ( 1. - zmixf(:) ) * puthl(:,jkp)
2592 zwork2(:) = zmixf(:) * prw(:,jkp) &
2593 + ( 1. - zmixf(:) ) * purw(:,jkp)
2596 purc(:,jkp), puri(:,jkp), pz(:,jkp), gwork1, zut,&
2597 zwork3, zwork4, zwork5, zlv, zls, zcph )
2601 zwork3(:) = zut(:) * zpi(:) * ( 1. + zepsa * ( &
2602 zwork2(:) - zwork4(:) - zwork5(:) ) ) / ( 1. + zwork2(:) )
2605 zmixf(:) = max( 0., puthv(:,jkp) - pthv(:,jkp) ) * zmixf(:) / &
2606 ( puthv(:,jkp) - zwork3(:) + 1.e-10 )
2607 zmixf(:) = max( 0., min( 1., zmixf(:) ) )
2620 zwork1(:) =
xentr *
xg /
xcrad * pumf(:,jk) * ( pz(:,jkp) - pz(:,jk) )
2624 WHERE ( gwork1(:) ) zwork2(:) = 1.
2625 WHERE ( puthv(:,jkp) > pthv(:,jkp) )
2628 puer(:,jkp) = 0.5 * zwork1(:) * ( ze1(:) + ze2(:) ) * zwork2(:)
2629 pudr(:,jkp) = 0.5 * zwork1(:) * ( zd1(:) + zd2(:) ) * zwork2(:)
2632 pudr(:,jkp) = zwork1(:) * zwork2(:)
2638 WHERE ( puthv(:,jkp) > pthv(:,jkp) .AND. jk > klcl(:) + 1 &
2649 WHERE( gwork1(:) ) &
2650 gwork2(:) = pumf(:,jk) - pudr(:,jkp) > 10. .AND. zuw2(:) > 0.
2651 WHERE ( gwork2(:) ) kctl(:) = jkp
2652 gwork1(:) = gwork2(:) .AND. gwork4(:)
2654 IF ( count( gwork2(:) ) == 0 )
EXIT
2664 zwork3(:) = pz(:,jkp) - pz(:,jk) * zwork6(:) - &
2665 ( 1. - zwork6(:) ) * pzlcl(:)
2666 zwork2(:) = pthes(:,jk) + ( 1. - zwork6(:) ) * &
2667 ( pthes(:,jkp) - pthes(:,jk) ) / ( pz(:,jkp) - pz(:,jk) ) * &
2668 ( pzlcl(:) - pz(:,jk) )
2671 zwork1(:) = ( 2. * ztheul(:) ) / ( zwork2(:) + pthes(:,jkp) ) - 1.
2672 pcape(:) = pcape(:) +
xg * zwork3(:) * max( 0., zwork1(:) )
2679 pumf(:,jkp) = pumf(:,jk) - pudr(:,jkp) + puer(:,jkp)
2680 pumf(:,jkp) = max( pumf(:,jkp), 0.1 )
2681 puthl(:,jkp) = ( pumf(:,jk) * puthl(:,jk) + &
2682 puer(:,jkp) * pthl(:,jk) - pudr(:,jkp) * puthl(:,jk) ) &
2683 / pumf(:,jkp) + puthl(:,jkp) - puthl(:,jk)
2684 purw(:,jkp) = ( pumf(:,jk) * purw(:,jk) + &
2685 puer(:,jkp) * prw(:,jk) - pudr(:,jkp) * purw(:,jk) ) &
2686 / pumf(:,jkp) - purr(:,jkp) - purs(:,jkp)
2701 otrig(ji) = pz(ji,jk) - pzlcl(ji) >=
xcdepth &
2702 .AND. pcape(ji) > 1.
2704 WHERE( .NOT. otrig(:) )
2707 ketl(:) = max( ketl(:), klcl(:) + 2 )
2708 ketl(:) = min( ketl(:), kctl(:) )
2716 WHERE ( ketl(:) == kctl(:) ) zwork1(:) = 1.
2720 pudr(ji,jk) = pudr(ji,jk) + &
2721 ( pumf(ji,jk) - puer(ji,jk) ) * zwork1(ji)
2722 puer(ji,jk) = puer(ji,jk) * ( 1. - zwork1(ji) )
2723 pumf(ji,jk) = pumf(ji,jk) * ( 1. - zwork1(ji) )
2735 jk1 = minval( ketl(:) )
2736 jk2 = maxval( kctl(:) )
2739 IF( jk > ketl(ji) .AND. jk <= kctl(ji) )
THEN
2740 zwork1(ji) = zwork1(ji) + pdpres(ji,jk)
2747 zwork1(ji) = pumf(ji,jk) / max( 1., zwork1(ji) )
2750 DO jk = jk1 + 1, jk2
2753 IF ( jk > ketl(ji) .AND. jk <= kctl(ji) )
THEN
2755 putpr(ji) = putpr(ji) - pupr(ji,jk)
2756 pudr(ji,jk) = pdpres(ji,jk) * zwork1(ji)
2757 pumf(ji,jk) = pumf(ji,jkp) - pudr(ji,jk)
2758 pupr(ji,jk) = pumf(ji,jkp) * ( purr(ji,jk) + purs(ji,jk) )
2759 putpr(ji) = putpr(ji) + pupr(ji,jk)
2774 zwork2(ji) = ppres(ji,jk) - ppres(ji,jkp) + pdpres(ji,jk)
2777 jkp = maxval( iwork(:) )
2780 IF ( jk >= kdpl(ji) .AND. jk <= iwork(ji) )
THEN
2781 puer(ji,jk) = puer(ji,jk) + pmflcl(ji) * pdpres(ji,jk) / ( zwork2(ji) + 0.1 )
2782 pumf(ji,jk) = pumf(ji,jk-1) + puer(ji,jk)
2796 gwork6(:,:) = spread( otrig(:), dim=2, ncopies=klev )
2797 WHERE ( .NOT. otrig(:) ) putpr(:) = 0.
2798 WHERE ( .NOT. gwork6(:,:) )
2802 puthl(:,:) = pthl(:,:)
2803 purw(:,:) = prw(:,:)
2814 kice, ppres, pthl, prw, prco, prio, pz, owork1, &
2815 pt, pew, prc, pri, plv, pls, pcph )
2883 INTEGER,
INTENT(IN) :: KLON
2884 INTEGER,
INTENT(IN) :: KICE
2886 REAL,
DIMENSION(KLON),
INTENT(IN) :: PPRES
2887 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTHL
2888 REAL,
DIMENSION(KLON),
INTENT(IN) :: PRW
2889 REAL,
DIMENSION(KLON),
INTENT(IN) :: PRCO
2890 REAL,
DIMENSION(KLON),
INTENT(IN) :: PRIO
2891 REAL,
DIMENSION(KLON),
INTENT(IN) :: PZ
2892 LOGICAL,
DIMENSION(KLON),
INTENT(IN) :: OWORK1
2895 REAL,
DIMENSION(KLON),
INTENT(OUT):: PT
2896 REAL,
DIMENSION(KLON),
INTENT(OUT):: PRC
2897 REAL,
DIMENSION(KLON),
INTENT(OUT):: PRI
2898 REAL,
DIMENSION(KLON),
INTENT(OUT):: PLV
2899 REAL,
DIMENSION(KLON),
INTENT(OUT):: PLS
2900 REAL,
DIMENSION(KLON),
INTENT(OUT):: PCPH
2901 REAL,
DIMENSION(KLON),
INTENT(OUT):: PEW
2910 REAL,
DIMENSION(KLON) :: ZEI
2911 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZT
2931 zwork1(:) = ( 1. + prw(:) ) *
xg * pz(:)
2932 pt(:) = ( pthl(:) + prco(:) *
xlvtt + prio(:) *
xlstt - zwork1(:) ) &
2934 pt(:) = max(180., min( 330., pt(:) ) )
2944 pew(:) = zeps * pew(:) / ( ppres(:) - pew(:) )
2945 zei(:) = zeps * zei(:) / ( ppres(:) - zei(:) )
2951 zwork2(:) = max( 0., min(1., zwork2(:) ) )
2952 zwork2(:) = zwork2(:) * zwork2(:)
2953 IF ( kice == 0 ) zwork2(:) = 1.
2954 zwork3(:) = ( 1. - zwork2(:) ) * zei(:) + zwork2(:) * pew(:)
2955 prc(:) = max( 0., zwork2(:) * ( prw(:) - zwork3(:) ) )
2956 pri(:) = max( 0., ( 1. - zwork2(:) ) * ( prw(:) - zwork3(:) ) )
2957 zt(:) = ( pthl(:) + prc(:) * plv(:) + pri(:) * pls(:) - zwork1(:) ) &
2959 pt(:) = pt(:) + ( zt(:) - pt(:) ) * 0.4
2960 pt(:) = max( 175., min( 330., pt(:) ) )
2967 ppres,
pt, pew, plv, pls, pcph )
3025 INTEGER,
INTENT(IN) :: KLON
3026 REAL,
DIMENSION(KLON),
INTENT(IN) :: PPRES
3027 REAL,
DIMENSION(KLON),
INTENT(IN) :: PT
3029 REAL,
DIMENSION(KLON),
INTENT(OUT):: PEW
3030 REAL,
DIMENSION(KLON),
INTENT(OUT):: PLV
3031 REAL,
DIMENSION(KLON),
INTENT(OUT):: PLS
3032 REAL,
DIMENSION(KLON),
INTENT(OUT):: PCPH
3036 REAL,
DIMENSION(KLON) :: ZT
3044 zt(:) = min( 400., max( pt(:), 10. ) )
3046 pew(:) = zeps * pew(:) / ( ppres(:) - pew(:) )
3056 pmixc, kmf, per, pdr )
3111 INTEGER,
INTENT(IN) :: KLON
3112 INTEGER,
INTENT(IN) :: KMF
3113 REAL,
DIMENSION(KLON),
INTENT(IN) :: PMIXC
3115 REAL,
DIMENSION(KLON),
INTENT(OUT):: PER
3116 REAL,
DIMENSION(KLON),
INTENT(OUT):: PDR
3120 REAL :: ZSIGMA = 0.166666667
3121 REAL :: ZFE = 4.931813949
3122 REAL :: ZSQRTP = 2.506628, zp = 0.33267
3123 REAL :: ZA1 = 0.4361836, za2 =-0.1201676
3124 REAL :: ZA3 = 0.9372980, zt1 = 0.500498
3125 REAL :: ZE45 = 0.01111
3127 REAL,
DIMENSION(KLON) :: ZX, ZY, ZW1, ZW2
3138 zx(:) = 6. * pmixc(:) - 3.
3139 zw1(:) = 1. / ( 1.+ zp * abs( zx(:) ) )
3140 zy(:) = exp( -0.5 * zx(:) * zx(:) )
3141 zw2(:) = za1 * zw1(:) + za2 * zw1(:) * zw1(:) + &
3142 za3 * zw1(:) * zw1(:) * zw1(:)
3143 zw11 = za1 * zt1 + za2 * zt1 * zt1 + za3 * zt1 * zt1 * zt1
3146 WHERE ( kmf == 1 .AND. zx(:) >= 0. )
3147 per(:) = zsigma * ( 0.5 * ( zsqrtp - ze45 * zw11 &
3148 - zy(:) * zw2(:) ) + zsigma * ( ze45 - zy(:) ) ) &
3149 - 0.5 * ze45 * pmixc(:) * pmixc(:)
3150 pdr(:) = zsigma*( 0.5 * ( zy(:) * zw2(:) - ze45 * zw11 ) &
3151 + zsigma * ( ze45 - zy(:) ) ) &
3152 - ze45 * ( 0.5 + 0.5 * pmixc(:) * pmixc(:) - pmixc(:) )
3154 WHERE ( kmf == 1 .AND. zx(:) < 0. )
3155 per(:) = zsigma*( 0.5 * ( zy(:) * zw2(:) - ze45 * zw11 ) &
3156 + zsigma * ( ze45 - zy(:) ) ) &
3157 - 0.5 * ze45 * pmixc(:) * pmixc(:)
3158 pdr(:) = zsigma * ( 0.5 * ( zsqrtp - ze45 * zw11 - zy(:) &
3159 * zw2(:) ) + zsigma * ( ze45 - zy(:) ) ) &
3160 - ze45 * ( 0.5 + 0.5 * pmixc(:) * pmixc(:) - pmixc(:) )
3163 per(:) = per(:) * zfe
3164 pdr(:) = pdr(:) * zfe
3176 pu, pv, ppres, pz, pdxdy, klcl, kctl, &
3234 INTEGER,
INTENT(IN) :: KLON
3235 INTEGER,
INTENT(IN) :: KLEV
3236 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
3237 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PU
3238 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PV
3239 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
3240 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
3241 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
3242 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
3244 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTIMEA
3245 REAL,
DIMENSION(KLON),
INTENT(OUT):: PPREF
3250 INTEGER :: IIE, IKB, IKE
3252 INTEGER :: JK, JKLC, JKP5, JKCT
3254 INTEGER,
DIMENSION(KLON) :: IP500
3255 REAL,
DIMENSION(KLON) :: ZCBH
3256 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3
3275 WHERE ( ppres(:,jk) >= 500.e2 ) ip500(:) = jk
3288 zwork1(ji) = sqrt( pu(ji,jklc) * pu(ji,jklc) + &
3289 pv(ji,jklc) * pv(ji,jklc) )
3290 zwork2(ji) = sqrt( pu(ji,jkp5) * pu(ji,jkp5) + &
3291 pv(ji,jkp5) * pv(ji,jkp5) )
3292 zwork3(ji) = sqrt( pu(ji,jkct) * pu(ji,jkct) + &
3293 pv(ji,jkct) * pv(ji,jkct) )
3296 zwork2(:) = max( 0.1, 0.5 * ( zwork1(:) + zwork2(:) ) )
3298 ptimea(:) = sqrt( pdxdy(:) ) / zwork2(:)
3307 zwork2(:) = sign( 1., zwork3(:) - zwork1(:) )
3311 zwork1(ji) = ( pu(ji,jkct) - pu(ji,jklc) ) * &
3312 ( pu(ji,jkct) - pu(ji,jklc) ) + &
3313 ( pv(ji,jkct) - pv(ji,jklc) ) * &
3314 ( pv(ji,jkct) - pv(ji,jklc) )
3315 zwork1(ji) = 1.e3 * zwork2(ji) * sqrt( zwork1(ji) ) / &
3316 max( 1.e-2, pz(ji,jkct) - pz(ji,jklc) )
3319 ppref(:) = 1.591 + zwork1(:) * ( -.639 + zwork1(:) * ( &
3320 9.53e-2 - zwork1(:) * 4.96e-3 ) )
3321 ppref(:) = max( .4, min( ppref(:), .92 ) )
3328 zcbh(ji) = max( 3., ( pz(ji,jklc) - pz(ji,ikb) ) * 3.281e-3 )
3330 zwork1(:) = .9673 + zcbh(:) * ( -.7003 + zcbh(:) * ( .1622 + &
3331 zcbh(:) * ( -1.2570e-2 + zcbh(:) * ( 4.2772e-4 - &
3332 zcbh(:) * 5.44e-6 ) ) ) )
3333 zwork1(:) = max( .4, min( .92, 1./ ( 1. + zwork1(:) ) ) )
3338 ppref(:) = 0.5 * ( ppref(:) + zwork1(:) )
3344 kice, ppres, pdpres, pz,
pth, pthes, &
3346 ppref, klcl, kctl, ketl, &
3347 puthl, purw, purc, puri, &
3348 pdmf, pder, pddr, pdthl, pdrw, &
3349 pmixf, pdtevr, klfs, kdbl, kml, &
3425 INTEGER,
INTENT(IN) :: KLON
3426 INTEGER,
INTENT(IN) :: KLEV
3427 INTEGER,
INTENT(IN) :: KICE
3429 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH
3430 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHES
3431 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRW
3433 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRC
3434 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRI
3435 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
3436 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDPRES
3438 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
3439 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
3440 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
3441 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KETL
3443 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KML
3444 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUTHL
3445 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURW
3446 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURC
3447 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURI
3448 REAL,
DIMENSION(KLON),
INTENT(IN) :: PPREF
3451 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDMF
3452 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDER
3453 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDDR
3454 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDTHL
3455 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDRW
3456 REAL,
DIMENSION(KLON),
INTENT(OUT):: PMIXF
3457 REAL,
DIMENSION(KLON),
INTENT(OUT):: PDTEVR
3459 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PDTEVRF
3460 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KLFS
3461 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KDBL
3465 INTEGER :: IIE, IKB, IKE
3466 INTEGER :: JK, JKP, JKM, JKT
3469 REAL :: ZCPORD, ZRDOCP
3471 REAL :: ZEPSA, ZCVOCD
3473 INTEGER,
DIMENSION(KLON) :: IDDT
3474 REAL,
DIMENSION(KLON) :: ZTHE
3475 REAL,
DIMENSION(KLON) :: ZDT, ZDTP
3476 REAL,
DIMENSION(KLON) :: ZCPH
3477 REAL,
DIMENSION(KLON) :: ZLV, ZLS
3478 REAL,
DIMENSION(KLON) :: ZDDT
3479 REAL,
DIMENSION(KLON) :: ZPI
3480 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZWORK4, &
3482 LOGICAL,
DIMENSION(KLON) :: GWORK1
3511 zddt(:) = pdpres(:,ikb+2)
3514 iddt(:) = kdbl(:) + 1
3522 DO jk = minval( klcl(:) ) + 2, maxval( ketl(:) )
3524 gwork1(ji) = jk >= klcl(ji) + 2 .AND. jk < ketl(ji)
3525 IF ( gwork1(ji) .AND. zwork1(ji) > pthes(ji,jk) )
THEN
3527 zwork1(ji) = min( zwork1(ji), pthes(ji,jk) )
3539 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
3541 zwork3(ji) = purw(ji,jk) - purc(ji,jk) - puri(ji,jk)
3542 zdt(ji) = pth(ji,jk) / zpi(ji)
3545 zcph(ji) =
xcpd +
xcpv * purw(ji,jk)
3546 zdt(ji) = ( puthl(ji,jk) - ( 1. + purw(ji,jk) ) *
xg * pz(ji,jk) &
3547 + zlv(ji) * purc(ji,jk) + zls(ji) * puri(ji,jk) ) / zcph(ji)
3548 zwork1(ji) = zdt(ji) * zpi(ji) ** ( 1. - 0.28 * zwork3(ji) ) &
3549 * exp( ( 3374.6525 / zdt(ji) - 2.5403 ) &
3550 * zwork3(ji) * ( 1. + 0.81 * zwork3(ji) ) )
3552 zdt(ji) = pth(ji,jk) / zpi(ji)
3555 zwork3(ji) = prw(ji,jk) - prc(ji,jk) - pri(ji,jk)
3556 zcph(ji) =
xcpd +
xcpv * prw(ji,jk)
3557 zwork2(ji) = zdt(ji) * zpi(ji) ** ( 1. - 0.28 * zwork3(ji) ) &
3558 * exp( ( 3374.6525 / zdt(ji) - 2.5403 ) &
3559 * zwork3(ji) * ( 1. + 0.81 * zwork3(ji) ) )
3561 pmixf(ji) = max( 0., ( zwork1(ji) - pthes(ji,jk) ) ) &
3562 / ( zwork1(ji) - zwork2(ji) + 1.e-10 )
3563 pmixf(ji) = max(0., min( 1., pmixf(ji) ) )
3564 zwork4(ji) = ppres(ji,jk)
3580 zwork1(ji) = 0.5 * ( purw(ji,jk) - purw(ji,jkp) )
3585 WHERE( kml(:) > ikb + 2 )
3586 zwork3(:) = zwork1(:) * ( zls(:) - zlv(:) ) / zcph(:)
3587 zdt(:) = zdt(:) - zwork3(:) *
REAL(kice)
3597 pdrw(ji,jk) = pmixf(ji) * prw(ji,jk) + ( 1. - pmixf(ji) ) * purw(ji,jk)
3598 zwork2(ji) = pdrw(ji,jk) - ( 1. - pmixf(ji) ) &
3599 * ( purc(ji,jk) + puri(ji,jk) )
3612 zwork1(:) = min( zwork2(:), zwork3(:) )
3613 zwork3(:) = zwork3(:) * zwork4(:) / ( zwork3(:) + zeps )
3614 zwork3(:) = log( zwork3(:) / 613.3 )
3616 zwork3(:) = ( 4780.8 - 32.19 * zwork3(:) ) / ( 17.502 - zwork3(:) )
3618 zwork3(:) = zwork3(:) - ( .212 + 1.571e-3 * ( zwork3(:) -
xtt ) &
3619 - 4.36e-4 * ( zdt(:) -
xtt ) ) * ( zdt(:) - zwork3(:) )
3620 zwork4(:) = sign(0.5, zwork2(:) - zwork3(:) )
3621 zdt(:) = zdt(:) * ( .5 + zwork4(:) ) + ( .5 - zwork4(:) ) * zwork3(:)
3622 zwork2(:) = zdt(:) * zpi(:) ** ( 1. - 0.28 * zwork2(:) ) &
3623 * exp( ( 3374.6525 / zdt(:) - 2.5403 ) &
3624 * zwork1(:) * ( 1. + 0.81 * zwork1(:) ) )
3627 jkm = maxval( klfs(:) )
3628 DO jk = jkm - 1, ikb + 1, -1
3630 IF ( jk < klfs(ji) .AND. zwork2(ji) > pthes(ji,jk) .AND. gwork1(ji) )
THEN
3632 gwork1(ji) = .
false.
3643 zwork1(ji) = ppres(ji,jk) / &
3644 (
xrd * zdt(ji) * ( 1. + zeps * zwork1(ji) ) )
3645 pdmf(ji,jk) = - ( 1. - ppref(ji) ) * zwork1(ji) *
xpi *
xcrad *
xcrad
3646 pdthl(ji,jk)= zwork2(ji)
3647 zwork2(ji) = pdmf(ji,jk)
3649 pder(ji,jk) = - pmixf(ji) * pdmf(ji,jk)
3658 DO jk = ikb + 2, jkm
3659 zwork1(:) = zwork1(:) + pdpres(:,jk)
3660 WHERE ( jk > kdbl(:) .AND. zwork1(:) <=
xzpbl )
3679 DO jk = jkm - 1, ikb + 1, -1
3682 IF ( jk < klfs(ji) .AND. jk >= iddt(ji) )
THEN
3683 pder(ji,jk) = - zwork2(ji) *
xentr * pdpres(ji,jkp) /
xcrad
3685 pdmf(ji,jk) = pdmf(ji,jkp) - pder(ji,jk)
3686 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
3687 zdt(ji) = pth(ji,jk) / zpi(ji)
3688 zwork1(ji) = prw(ji,jk) - prc(ji,jk) - pri(ji,jk)
3689 zthe(ji) = zdt(ji) * zpi(ji) ** ( 1. - 0.28 * zwork1(ji) ) &
3690 * exp( ( 3374.6525 / zdt(ji) - 2.5403 ) &
3691 * zwork1(ji) * ( 1. + 0.81 * zwork1(ji) ) )
3694 pdthl(ji,jk) = ( pdthl(ji,jkp) * pdmf(ji,jkp) - zthe(ji) * pder(ji,jk) &
3695 ) / ( pdmf(ji,jk) - 1.e-7 )
3696 pdrw(ji,jk) = ( pdrw(ji,jkp) * pdmf(ji,jkp) - prw(ji,jk) * pder(ji,jk) &
3697 ) / ( pdmf(ji,jk) - 1.e-7 )
3699 IF ( jk < iddt(ji) .AND. jk >= kdbl(ji) )
THEN
3701 pddr(ji,jk) = - pdmf(ji,jl) * pdpres(ji,jkp) / zddt(ji)
3702 pdmf(ji,jk) = pdmf(ji,jkp) + pddr(ji,jk)
3703 pdthl(ji,jk) = pdthl(ji,jkp)
3704 pdrw(ji,jk) = pdrw(ji,jkp)
3716 jkt = maxval( iddt(:) )
3717 DO jk = ikb + 1, jkt
3719 zpi(:) = (
xp00 / ppres(:,jk) ) ** zrdocp
3720 zdt(:) = pth(:,jk) / zpi(:)
3729 zdtp(:) = pdthl(:,jk) / ( zpi(:) ** ( 1. - 0.28 * zwork1(:) ) &
3730 * exp( ( 3374.6525 / zdt(:) - 2.5403 ) &
3731 * zwork1(:) * ( 1. + 0.81 * zwork1(:) ) ) )
3732 zdt(:) = 0.4 * zdtp(:) + 0.6 * zdt(:)
3740 zwork2(:) = zwork1(:) / zdt(:) * (
xbetaw / zdt(:) -
xgamw )
3741 zwork2(:) = zlv(:) / zcph(:) * zwork1(:) * ( 1. -
xrhdbc ) / &
3742 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
3743 zdt(:) = zdt(:) + zwork2(:)
3747 zwork3(:) = zwork3(:) *
xrhdbc
3748 zwork1(:) = max( 0., zwork3(:) - pdrw(:,jk) )
3749 pdtevr(:) = pdtevr(:) + zwork1(:) * pddr(:,jk)
3750 pdtevrf(:,jk)= pdtevrf(:,jk) + zwork1(:) * pddr(:,jk)
3752 pdrw(:,jk) = max( pdrw(:,jk), zwork3(:) )
3753 pdthl(:,jk) = ( (
xcpd + pdrw(:,jk) *
xcpv ) * zdt(:) &
3754 + ( 1. + pdrw(:,jk) ) *
xg * pz(:,jk) )
3764 WHERE ( pdtevr(:) < 1. .OR. klfs(:) == ikb + 1 ) zwork2(:) = 0.
3766 kdbl(:) = kdbl(:) * int( zwork2(:) ) + ( 1 - int( zwork2(:) ) ) * ikb
3767 klfs(:) = klfs(:) * int( zwork2(:) ) + ( 1 - int( zwork2(:) ) ) * ikb
3768 pdmf(:,jk) = pdmf(:,jk) * zwork2(:)
3769 pder(:,jk) = pder(:,jk) * zwork2(:)
3770 pddr(:,jk) = pddr(:,jk) * zwork2(:)
3771 zwork1(:) =
REAL( KLFS(:) - JK )
3772 zwork1(:) = max( 0.,min(1.,zwork1(:) ) )
3773 pdthl(:,jk) = pdthl(:,jk) * zwork2(:) * zwork1(:)
3774 pdrw(:,jk) = pdrw(:,jk) * zwork2(:) * zwork1(:)
3775 pdtevr(:) = pdtevr(:) * zwork2(:)
3776 pdtevrf(:,jk)= pdtevrf(:,jk) * zwork2(:)
3782 ppres, pumf, puer, pudr, &
3783 pupr, putpr, purw, &
3784 pdmf, pder, pddr, pdthl, pdrw, &
3785 ppref, ptpr, pmixf, pdtevr, &
3786 klfs, kdbl, klcl, kctl, ketl, &
3848 INTEGER,
INTENT(IN) :: KLON
3849 INTEGER,
INTENT(IN) :: KLEV
3850 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
3851 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURW
3852 REAL,
DIMENSION(KLON),
INTENT(IN) :: PUTPR
3853 REAL,
DIMENSION(KLON),
INTENT(IN) :: PPREF
3854 REAL,
DIMENSION(KLON),
INTENT(IN) :: PMIXF
3855 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
3856 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
3857 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KETL
3859 INTEGER,
DIMENSION(KLON),
INTENT(INOUT) :: KLFS
3860 INTEGER,
DIMENSION(KLON),
INTENT(INOUT) :: KDBL
3862 REAL,
DIMENSION(KLON),
INTENT(INOUT) :: PDTEVR
3864 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDTEVRF
3865 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUMF
3866 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUER
3867 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUDR
3868 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUPR
3869 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDMF
3870 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDER
3871 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDDR
3872 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDTHL
3873 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDRW
3875 REAL,
DIMENSION(KLON),
INTENT(OUT) :: PTPR
3880 INTEGER :: IIE, IKB, IKE
3881 INTEGER :: JK, JKT1, JKT2, JKT3
3884 INTEGER,
DIMENSION(KLON) :: IPRL
3885 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, &
3886 ZWORK4, ZWORK5, ZWORK6
3897 jkt1 = maxval( klfs(:) )
3898 jkt2 = maxval( kctl(:) )
3899 jkt3 = minval( klcl(:) )
3909 WHERE ( pdtevr(:) == 0. )
3913 IF ( count( pdtevr(:) > 0. ) == 0 )
RETURN
3928 zwork1(ji) = pdtevr(ji) / min( -1.e-1, pdmf(ji,jk) )
3929 zwork6(ji) = pdmf(ji,jk)
3942 zwork5(ji) = ppres(ji,jk)
3947 WHERE ( jk >= klcl(:) .AND. ppres(:,jk) >= zwork5(:) -
xusrdpth )
3948 ptpr(:) = ptpr(:) + pupr(:,jk)
3952 iprl(:) = min( ketl(:), iprl(:) )
3956 ptpr(ji) = pumf(ji,jk+1) * purw(ji,jk+1) + ptpr(ji)
3959 ptpr(:) = ppref(:) * min( putpr(:), ptpr(:) )
3960 zwork4(:) = putpr(:) - ptpr(:)
3970 WHERE ( jk >= klcl(:) .AND. jk <= klfs(:) )
3971 zwork5(:) = zwork5(:) + pupr(:,jk)
3977 zwork2(ji) = ( 1. - ppref(ji) ) * zwork5(ji) * &
3978 ( 1. - pmixf(ji) ) / max( 1.e-1, pumf(ji,jk) )
3990 zwork1(:) = zwork4(:) / ( zwork1(:) + zwork2(:) + 1.e-8 )
3991 zwork2(:) = zwork1(:) / min( -1.e-1, zwork6(:) )
3995 WHERE ( zwork1(:) > 0. .OR. pdtevr(:) < 1. )
4005 pdmf(:,jk) = pdmf(:,jk) * zwork2(:)
4006 pder(:,jk) = pder(:,jk) * zwork2(:)
4007 pddr(:,jk) = pddr(:,jk) * zwork2(:)
4008 pdtevrf(:,jk) = pdtevrf(:,jk)* zwork2(:)
4009 pdrw(:,jk) = pdrw(:,jk) * zwork3(:)
4010 pdthl(:,jk) = pdthl(:,jk) * zwork3(:)
4012 zwork4(:) = zwork2(:)
4022 zwork2(ji) = ( 1. - zwork6(ji) ) + zwork6(ji) * &
4023 ( pumf(ji,jk) - ( 1. - pmixf(ji) ) * zwork1(ji) ) / &
4024 max( 1.e-1, pumf(ji,jk) )
4028 jkt1 = maxval( klfs(:) )
4031 IF ( jk <= klfs(ji) )
THEN
4032 pumf(ji,jk) = pumf(ji,jk) * zwork2(ji)
4033 puer(ji,jk) = puer(ji,jk) * zwork2(ji)
4034 pudr(ji,jk) = pudr(ji,jk) * zwork2(ji)
4035 pupr(ji,jk) = pupr(ji,jk) * zwork2(ji)
4044 WHERE ( pdtevr(:) > 0. )
4045 pdtevr(:) = pdtevr(:) * zwork4(:)
4046 ptpr(:) = ptpr(:) + ppref(:) * zwork5(:) * ( zwork2(:) - 1. )
4055 ppres, pdpres, pz, pdxdy, plmass, &
4056 pthl,
pth, prw, prc, pri, otrig1, &
4057 pthc, prwc, prcc, pric, pwsub, &
4058 klcl, kdpl, kpbl, klfs, kctl, kml, &
4059 pumf, puer, pudr, puthl, purw, &
4061 pdmf, pder, pddr, pdthl, pdrw, &
4062 ptpr, pspr, pdtevr, &
4065 pdtevrf, pprlflx, pprsflx )
4142 INTEGER,
INTENT(IN) :: KLON
4143 INTEGER,
INTENT(IN) :: KLEV
4144 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLFS
4145 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
4146 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
4147 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
4148 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
4149 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KML
4150 REAL,
DIMENSION(KLON),
INTENT(INOUT) :: PTIMEC
4151 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
4152 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHL
4153 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH
4154 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRW
4156 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRC
4157 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRI
4158 LOGICAL,
DIMENSION(KLON),
INTENT(IN) :: OTRIG1
4162 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
4163 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDPRES
4165 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PLMASS
4166 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
4167 REAL,
DIMENSION(KLON),
INTENT(IN) :: PCAPE
4168 INTEGER,
INTENT(OUT) :: KFTSTEPS
4172 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUMF
4173 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUER
4174 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUDR
4175 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUPR
4177 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUTHL
4178 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURW
4179 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURC
4180 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURI
4182 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PDMF
4183 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PDER
4184 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PDDR
4185 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDTHL
4186 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDRW
4187 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PTPR
4188 REAL,
DIMENSION(KLON),
INTENT(OUT) :: PSPR
4189 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PDTEVR
4191 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PTHC
4192 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRWC
4193 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRCC
4194 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRIC
4195 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PWSUB
4197 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PDTEVRF
4198 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PPRLFLX
4199 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PPRSFLX
4203 INTEGER :: IIE, IKB, IKE
4205 INTEGER :: JK, JKP, JKMAX
4209 REAL :: ZCPORD, ZRDOCP
4210 REAL :: ZCVOCD, ZEPSA
4212 REAL,
DIMENSION(KLON,KLEV) :: ZTHLC
4214 REAL,
DIMENSION(KLON,KLEV) :: ZOMG
4215 REAL,
DIMENSION(KLON,KLEV) :: ZUMF
4216 REAL,
DIMENSION(KLON,KLEV) :: ZUER
4217 REAL,
DIMENSION(KLON,KLEV) :: ZUDR
4218 REAL,
DIMENSION(KLON,KLEV) :: ZDMF
4219 REAL,
DIMENSION(KLON,KLEV) :: ZDER
4220 REAL,
DIMENSION(KLON,KLEV) :: ZDDR
4221 REAL,
DIMENSION(KLON) :: ZTPR
4222 REAL,
DIMENSION(KLON) :: ZDTEVR
4223 REAL,
DIMENSION(KLON,KLEV):: ZPRLFLX
4224 REAL,
DIMENSION(KLON,KLEV):: ZPRSFLX
4225 REAL,
DIMENSION(KLON) :: ZPRMELT
4226 REAL,
DIMENSION(KLON) :: ZPRMELTO
4227 REAL,
DIMENSION(KLON) :: ZADJ
4228 REAL,
DIMENSION(KLON) :: ZADJMAX
4229 REAL,
DIMENSION(KLON) :: ZCAPE
4230 REAL,
DIMENSION(KLON) :: ZTIMEC
4231 REAL,
DIMENSION(KLON,KLEV):: ZTIMC
4233 REAL,
DIMENSION(KLON) :: ZTHLCL
4234 REAL,
DIMENSION(KLON) :: ZRVLCL
4235 REAL,
DIMENSION(KLON) :: ZZLCL
4236 REAL,
DIMENSION(KLON) :: ZTLCL
4237 REAL,
DIMENSION(KLON) :: ZTELCL
4238 REAL,
DIMENSION(KLON) :: ZTHEUL
4239 REAL,
DIMENSION(KLON) :: ZTHES1, ZTHES2
4240 REAL,
DIMENSION(KLON,KLEV) :: ZTHMFIN, ZTHMFOUT, ZRWMFIN, ZRWMFOUT
4241 REAL,
DIMENSION(KLON,KLEV) :: ZRCMFIN, ZRCMFOUT, ZRIMFIN, ZRIMFOUT
4243 REAL,
DIMENSION(KLON) :: ZPI
4244 REAL,
DIMENSION(KLON) :: ZLV
4245 REAL,
DIMENSION(KLON) :: ZLS
4246 REAL,
DIMENSION(KLON) :: ZLM
4247 REAL,
DIMENSION(KLON) :: ZCPH
4248 REAL,
DIMENSION(KLON) :: ZMELDPTH
4249 INTEGER,
DIMENSION(KLON) :: ITSTEP
4250 INTEGER,
DIMENSION(KLON) :: ICOUNT
4251 INTEGER,
DIMENSION(KLON) :: ILCL
4252 INTEGER,
DIMENSION(KLON) :: IWORK1
4253 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZWORK4, ZWORK5
4254 REAL,
DIMENSION(KLON,KLEV):: ZWORK6
4255 LOGICAL,
DIMENSION(KLON) :: GWORK1, GWORK3
4256 LOGICAL,
DIMENSION(KLON,KLEV) :: GWORK4
4275 gwork4(:,:) = .
false.
4285 WHERE( .NOT. otrig1(:) ) zwork5(:) = 0.
4295 jkmax = maxval( kctl(:) )
4301 zumf(:,:) = pumf(:,:)
4302 zuer(:,:) = puer(:,:)
4303 zudr(:,:) = pudr(:,:)
4304 zdmf(:,:) = pdmf(:,:)
4305 zder(:,:) = pder(:,:)
4306 zddr(:,:) = pddr(:,:)
4308 zdtevr(:) = pdtevr(:)
4327 DO jk = jkmax + 1, ikb + 1, -1
4332 zwork2(ji) = pupr(ji,jk) / ( purc(ji,jk) + puri(ji,jk) + 1.e-8 )
4333 zprmelt(ji) = zprmelt(ji) + puri(ji,jk) * zwork2(ji)
4334 zwork1(ji) = zwork1(ji) + purc(ji,jk) * zwork2(ji) - pdtevrf(ji,jk)
4335 zprlflx(ji,jk)= max( 0., zwork1(ji) )
4336 zprmelt(ji) = zprmelt(ji) + min( 0., zwork1(ji) )
4337 zprsflx(ji,jk)= zprmelt(ji)
4338 IF ( kml(ji) >= jk .AND. zmeldpth(ji) <=
xmeldpth )
THEN
4339 zpi(ji) = ( ppres(ji,jk) /
xp00 ) ** zrdocp
4340 zwork3(ji) = pth(ji,jk) * zpi(ji)
4343 zcph(ji) =
xcpd +
xcpv * prw(ji,jk)
4344 zmeldpth(ji) = zmeldpth(ji) + pdpres(ji,jk)
4345 zwork6(ji,jk)= zlm(ji) * ptimec(ji) / plmass(ji,jk) * pdpres(ji,jk)
4353 DO jk = jkmax, ikb + 1, -1
4354 zwork1(:) = zprmelt(:) * pdpres(:,jk) / max(
xmeldpth, zmeldpth(:) )
4355 zwork2(:) = zwork2(:) + zwork1(:) * zomg(:,jk)
4356 zprlflx(:,jk) = zprlflx(:,jk) + zwork2(:)
4357 zprsflx(:,jk) = zprsflx(:,jk) - zwork2(:)
4359 WHERE( zprsflx(:,:) < 1. ) zprsflx(:,:)=0.
4360 zprmelto(:) = zprmelt(:)
4369 iwork1(:) = max( ilcl(:), klfs(:) )
4370 jkp = minval( kdpl(:) )
4373 IF( jk > kdpl(ji) .AND. jk <= iwork1(ji) )
THEN
4374 zwork1(ji) = plmass(ji,jk) / &
4375 ( ( puer(ji,jk) + pder(ji,jk) + 1.e-5 ) * ptimec(ji) )
4376 zadjmax(ji) = min( zadjmax(ji), zwork1(ji) )
4382 gwork1(:) = otrig1(:)
4386 zthlc(:,:) = pthl(:,:)
4387 prwc(:,:) = prw(:,:)
4388 prcc(:,:) = prc(:,:)
4389 pric(:,:) = pri(:,:)
4390 pthc(:,:) = pth(:,:)
4398 ztimec(:) = ptimec(:)
4399 gwork4(:,:) = spread( gwork1(:), dim=2, ncopies=iks )
4400 WHERE( gwork4(:,:) ) pwsub(:,:) = 0.
4403 DO jk = ikb + 1, jkmax
4404 jkp = max( ikb + 1, jk - 1 )
4405 WHERE ( gwork1(:) .AND. jk <= kctl(:) )
4413 zwork1(:) = - ( puer(:,jkp) + pder(:,jkp) - &
4414 pudr(:,jkp) - pddr(:,jkp) ) / plmass(:,jkp)
4416 pwsub(:,jk) = pwsub(:,jkp) - pdpres(:,jk-1) * zwork1(:)
4425 zwork1(:) =
xstabt * pdpres(:,jkp) / ( abs( pwsub(:,jk) ) + 1.e-10 )
4427 ztimec(:) = min( ztimec(:), zwork1(:) )
4430 zomg(:,jk) = pwsub(:,jk) * pdxdy(:) /
xg
4435 WHERE( gwork4(:,:) )
4436 zthlc(:,:) = pthl(:,:)
4437 prwc(:,:) = prw(:,:)
4438 prcc(:,:) = prc(:,:)
4439 pric(:,:) = pri(:,:)
4440 pthc(:,:) = pth(:,:)
4451 zwork1(ji) = pudr(ji,jk) * pdpres(ji,jk) / ( plmass(ji,jk) + .1 ) &
4454 WHERE( gwork1(:) .AND. abs( zwork1(:) ) - .01 > 0. )
4461 pwsub(:,jk) = pwsub(:,jk) * zwork5(:)
4462 zprlflx(:,jk) = zprlflx(:,jk) * zwork5(:)
4463 zprsflx(:,jk) = zprsflx(:,jk) * zwork5(:)
4465 gwork4(:,1:ikb) = .
false.
4466 gwork4(:,iks) = .
false.
4468 itstep(:) = int( ptimec(:) / ztimec(:) ) + 1
4469 ztimec(:) = ptimec(:) /
REAL( ITSTEP(:) )
4471 ztimc(:,:)= spread( ztimec(:), dim=2, ncopies=iks )
4476 kftsteps = maxval( itstep(:) )
4477 DO jstep = 1, kftsteps
4479 icount(:) = icount(:) + 1
4481 gwork3(:) = itstep(:) >= icount(:) .AND. gwork1(:)
4497 DO jk = ikb + 1, jkmax
4498 gwork4(:,jk) = gwork3(:) .AND. jk <= kctl(:)
4499 jkp = max( ikb + 1, jk - 1 )
4501 IF ( gwork3(ji) )
THEN
4503 zwork1(ji) = sign( 1., zomg(ji,jk) )
4504 zwork2(ji) = 0.5 * ( 1. + zwork1(ji) )
4505 zwork1(ji) = 0.5 * ( 1. - zwork1(ji) )
4506 zthmfin(ji,jk) = - zomg(ji,jk) * zthlc(ji,jkp) * zwork1(ji)
4507 zthmfout(ji,jk) = zomg(ji,jk) * zthlc(ji,jk) * zwork2(ji)
4508 zthmfin(ji,jkp) = zthmfin(ji,jkp) + zthmfout(ji,jk) * zwork2(ji)
4509 zthmfout(ji,jkp) = zthmfout(ji,jkp) + zthmfin(ji,jk) * zwork1(ji)
4510 zrwmfin(ji,jk) = - zomg(ji,jk) * prwc(ji,jkp) * zwork1(ji)
4511 zrwmfout(ji,jk) = zomg(ji,jk) * prwc(ji,jk) * zwork2(ji)
4512 zrwmfin(ji,jkp) = zrwmfin(ji,jkp) + zrwmfout(ji,jk) * zwork2(ji)
4513 zrwmfout(ji,jkp) = zrwmfout(ji,jkp) + zrwmfin(ji,jk) * zwork1(ji)
4514 zrcmfin(ji,jk) = - zomg(ji,jk) * prcc(ji,jkp) * zwork1(ji)
4515 zrcmfout(ji,jk) = zomg(ji,jk) * prcc(ji,jk) * zwork2(ji)
4516 zrcmfin(ji,jkp) = zrcmfin(ji,jkp) + zrcmfout(ji,jk) * zwork2(ji)
4517 zrcmfout(ji,jkp) = zrcmfout(ji,jkp) + zrcmfin(ji,jk) * zwork1(ji)
4518 zrimfin(ji,jk) = - zomg(ji,jk) * pric(ji,jkp) * zwork1(ji)
4519 zrimfout(ji,jk) = zomg(ji,jk) * pric(ji,jk) * zwork2(ji)
4520 zrimfin(ji,jkp) = zrimfin(ji,jkp) + zrimfout(ji,jk) * zwork2(ji)
4521 zrimfout(ji,jkp) = zrimfout(ji,jkp) + zrimfin(ji,jk) * zwork1(ji)
4527 WHERE ( gwork4(:,:) )
4536 zthlc(:,:) = zthlc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
4537 zthmfin(:,:) + pudr(:,:) * puthl(:,:) + &
4538 pddr(:,:) * pdthl(:,:) - zthmfout(:,:) - &
4539 ( puer(:,:) + pder(:,:) ) * pthl(:,:) )
4540 prwc(:,:) = prwc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
4541 zrwmfin(:,:) + pudr(:,:) * purw(:,:) + &
4542 pddr(:,:) * pdrw(:,:) - zrwmfout(:,:) - &
4543 ( puer(:,:) + pder(:,:) ) * prw(:,:) )
4544 prcc(:,:) = prcc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
4545 zrcmfin(:,:) + pudr(:,:) * purc(:,:) - zrcmfout(:,:) - &
4546 ( puer(:,:) + pder(:,:) ) * prc(:,:) )
4547 pric(:,:) = pric(:,:) + ztimc(:,:) / plmass(:,:) * ( &
4548 zrimfin(:,:) + pudr(:,:) * puri(:,:) - zrimfout(:,:) - &
4549 ( puer(:,:) + pder(:,:) ) * pri(:,:) )
4562 DO jk = jkmax, ikb + 1, -1
4563 zthlc(:,jk) = zthlc(:,jk) - &
4564 zprmelt(:) * zwork6(:,jk) / max(
xmeldpth, zmeldpth(:) )
4571 DO jk = ikb + 1, jkmax
4573 IF( gwork1(ji) .AND. jk <= kctl(ji) )
THEN
4574 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
4575 zcph(ji) =
xcpd + prwc(ji,jk) *
xcpv
4576 zwork2(ji) = pth(ji,jk) / zpi(ji)
4580 zwork2(ji) = ( zthlc(ji,jk) + zlv(ji) * prcc(ji,jk) + zls(ji) * pric(ji,jk) &
4581 - (1. + prwc(ji,jk) ) *
xg * pz(ji,jk) ) / zcph(ji)
4582 zwork2(ji) = max( 180., min( 340., zwork2(ji) ) )
4583 pthc(ji,jk)= zwork2(ji) * zpi(ji)
4595 ppres, pthc, prwc, pz, gwork1, &
4596 zthlcl, zrvlcl, zzlcl, ztlcl, ztelcl, &
4600 ztlcl(:) = max( 230., min( 335., ztlcl(:) ) )
4601 ztelcl(:) = max( 230., min( 335., ztelcl(:) ) )
4602 zthlcl(:) = max( 230., min( 345., zthlcl(:) ) )
4603 zrvlcl(:) = max( 0., min( 1., zrvlcl(:) ) )
4610 zpi(:) = zthlcl(:) / ztlcl(:)
4611 zpi(:) = max( 0.95, min( 1.5, zpi(:) ) )
4612 zwork1(:) =
xp00 / zpi(:) ** zcpord
4615 zwork3(:) = min( .1, max( 0., zwork3(:) ) )
4618 ztheul(:) = ztlcl(:) * zpi(:) ** ( 1. - 0.28 * zrvlcl(:) ) &
4619 * exp( ( 3374.6525 / ztlcl(:) - 2.5403 ) &
4620 * zrvlcl(:) * ( 1. + 0.81 * zrvlcl(:) ) )
4623 zthes1(:) = ztelcl(:) * zpi(:) ** ( 1. - 0.28 * zwork3(:) ) &
4624 * exp( ( 3374.6525 / ztelcl(:) - 2.5403 ) &
4625 * zwork3(:) * ( 1. + 0.81 * zwork3(:) ) )
4627 DO jk = minval( ilcl(:) ), jkmax
4631 IF ( jk == ilcl(ji) ) zwork4(ji) = 0.
4636 gwork3(ji) = jk >= ilcl(ji) .AND. jk <= kctl(ji) .AND. gwork1(ji)
4638 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
4639 zwork2(ji) = pthc(ji,jk) / zpi(ji)
4646 IF ( gwork3(ji) )
THEN
4647 zthes2(ji) = zwork2(ji) * zpi(ji) ** ( 1. - 0.28 * zwork3(ji) ) &
4648 * exp( ( 3374.6525 / zwork2(ji) - 2.5403 ) &
4649 * zwork3(ji) * ( 1. + 0.81 * zwork3(ji) ) )
4651 zwork3(ji) = pz(ji,jk) - pz(ji,jkp) * zwork4(ji) - &
4652 ( 1. - zwork4(ji) ) * zzlcl(ji)
4653 zwork1(ji) = ( 2. * ztheul(ji) ) / ( zthes1(ji) + zthes2(ji) ) - 1.
4654 zcape(ji) = zcape(ji) +
xg * zwork3(ji) * max( 0., zwork1(ji) )
4655 zthes1(ji) = zthes2(ji)
4666 zwork1(:) = max( pcape(:) - zcape(:), 0.1 * pcape(:) )
4667 zwork2(:) = zcape(:) / ( pcape(:) + 1.e-8 )
4669 gwork1(:) = zwork2(:) > 0.1 .OR. zcape(:) == 0.
4672 WHERE ( zcape(:) == 0. .AND. gwork1(:) ) zadj(:) = zadj(:) * 0.5
4673 WHERE ( zcape(:) /= 0. .AND. gwork1(:) ) &
4674 zadj(:) = zadj(:) *
xstabc * pcape(:) / ( zwork1(:) + 1.e-8 )
4675 zadj(:) = min( zadj(:), zadjmax(:) )
4683 pumf, zumf, puer, zuer, pudr, zudr, &
4684 pdmf, zdmf, pder, zder, pddr, zddr, &
4685 zprmelt, zprmelto, pdtevr, zdtevr, &
4687 pprlflx, zprlflx, pprsflx, zprsflx )
4690 IF ( count( gwork1(:) ) == 0 )
EXIT
4699 prwc(:,jk) = max( 0., prwc(:,jk) - prcc(:,jk) - pric(:,jk) )
4703 pspr(:) = zprmelt(:) * ( 1. - zmeldpth(:) /
xmeldpth )
4704 pspr(:) = max( 0., pspr(:) )
4710 pumf, pzumf, puer, pzuer, pudr, pzudr, &
4711 pdmf, pzdmf, pder, pzder, pddr, pzddr, &
4712 pprmelt, pzprmelt, pdtevr, pzdtevr, &
4714 pprlflx, pzprlfl, pprsflx, pzprsfl )
4772 INTEGER,
INTENT(IN) :: KLON
4773 INTEGER,
INTENT(IN) :: KLEV
4774 REAL,
DIMENSION(KLON),
INTENT(IN) :: PADJ
4777 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUMF
4778 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUMF
4779 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUER
4780 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUER
4781 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUDR
4782 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUDR
4783 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDMF
4784 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZDMF
4785 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDER
4786 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZDER
4787 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PDDR
4788 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZDDR
4789 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PTPR
4790 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PZTPR
4791 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PDTEVR
4792 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PZDTEVR
4793 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PPRMELT
4794 REAL,
DIMENSION(KLON),
INTENT(INOUT):: PZPRMELT
4795 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PPRLFLX
4796 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZPRLFL
4797 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PPRSFLX
4798 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZPRSFL
4803 INTEGER :: IIE, IKB, IKE
4821 pprmelt(:) = pzprmelt(:) * padj(:)
4822 pdtevr(:) = pzdtevr(:) * padj(:)
4823 ptpr(:) = pztpr(:) * padj(:)
4825 DO jk = ikb + 1, ike
4826 pumf(:,jk) = pzumf(:,jk) * padj(:)
4827 puer(:,jk) = pzuer(:,jk) * padj(:)
4828 pudr(:,jk) = pzudr(:,jk) * padj(:)
4829 pdmf(:,jk) = pzdmf(:,jk) * padj(:)
4830 pder(:,jk) = pzder(:,jk) * padj(:)
4831 pddr(:,jk) = pzddr(:,jk) * padj(:)
4832 pprlflx(:,jk) = pzprlfl(:,jk) * padj(:)
4833 pprsflx(:,jk) = pzprsfl(:,jk) * padj(:)
4839 ppres,
pth, prv, pz, owork1, &
4840 pthlcl, prvlcl, pzlcl, ptlcl, ptelcl,&
4912 INTEGER,
INTENT(IN) :: KLON
4913 INTEGER,
INTENT(IN) :: KLEV
4914 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH
4915 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRV
4916 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
4917 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
4918 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
4919 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
4920 LOGICAL,
DIMENSION(KLON),
INTENT(IN) :: OWORK1
4922 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTHLCL
4923 REAL,
DIMENSION(KLON),
INTENT(OUT):: PRVLCL
4924 REAL,
DIMENSION(KLON),
INTENT(OUT):: PZLCL
4925 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTLCL
4926 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTELCL
4927 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KLCL
4931 INTEGER :: JK, JKM, JKMIN, JKMAX
4933 INTEGER :: IIE, IKB, IKE
4935 REAL :: ZCPORD, ZRDOCP
4937 REAL,
DIMENSION(KLON) :: ZPLCL
4938 REAL,
DIMENSION(KLON) :: ZTMIX
4939 REAL,
DIMENSION(KLON) :: ZEVMIX
4940 REAL,
DIMENSION(KLON) :: ZDPTHMIX, ZPRESMIX
4941 REAL,
DIMENSION(KLON) :: ZLV, ZCPH
4942 REAL,
DIMENSION(KLON) :: ZDP
4943 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2
4970 pzlcl(:) = pz(:,ikb)
4979 jkmax = maxval( kpbl(:) )
4980 jkmin = minval( kdpl(:) )
4981 DO jk = ikb + 1, jkmax
4984 IF ( jk >= kdpl(ji) .AND. jk <= kpbl(ji) )
THEN
4986 zwork1(ji) = ppres(ji,jk) - ppres(ji,jkm)
4987 zdpthmix(ji) = zdpthmix(ji) + zwork1(ji)
4988 zpresmix(ji) = zpresmix(ji) + ppres(ji,jk) * zwork1(ji)
4989 pthlcl(ji) = pthlcl(ji) + pth(ji,jk) * zwork1(ji)
4990 prvlcl(ji) = prvlcl(ji) + prv(ji,jk) * zwork1(ji)
4999 zpresmix(:) = zpresmix(:) / zdpthmix(:)
5000 pthlcl(:) = pthlcl(:) / zdpthmix(:)
5001 prvlcl(:) = prvlcl(:) / zdpthmix(:)
5010 ztmix(:) = pthlcl(:) * ( zpresmix(:) /
xp00 ) ** zrdocp
5011 zevmix(:) = prvlcl(:) * zpresmix(:) / ( prvlcl(:) + zeps )
5012 zevmix(:) = max( 1.e-8, zevmix(:) )
5013 zwork1(:) = log( zevmix(:) / 613.3 )
5015 zwork1(:) = ( 4780.8 - 32.19 * zwork1(:) ) / ( 17.502 - zwork1(:) )
5017 ptlcl(:) = zwork1(:) - ( .212 + 1.571e-3 * ( zwork1(:) -
xtt ) &
5018 - 4.36e-4 * ( ztmix(:) -
xtt ) ) * ( ztmix(:) - zwork1(:) )
5019 ptlcl(:) = min( ptlcl(:), ztmix(:) )
5020 zplcl(:) =
xp00 * ( ptlcl(:) / pthlcl(:) ) ** zcpord
5024 zplcl(:) = min( 2.e5, max( 10., zplcl(:) ) )
5033 zwork2(:) = zwork1(:) / ptlcl(:) * (
xbetaw / ptlcl(:) -
xgamw )
5034 zwork2(:) = ( zwork1(:) - prvlcl(:) ) / &
5035 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
5036 ptlcl(:) = ptlcl(:) - zlv(:) / zcph(:) * zwork2(:)
5046 WHERE( owork1(:) .AND. prvlcl(:) > zwork1(:) )
5047 zwork2(:) = zwork1(:) / ztmix(:) * (
xbetaw / ztmix(:) -
xgamw )
5048 zwork2(:) = ( zwork1(:) - prvlcl(:) ) / &
5049 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
5050 ptlcl(:) = ztmix(:) + zlv(:) / zcph(:) * zwork2(:)
5051 prvlcl(:) = prvlcl(:) - zwork2(:)
5052 zplcl(:) = zpresmix(:)
5053 pthlcl(:) = ptlcl(:) * (
xp00 / zplcl(:) ) ** zrdocp
5060 DO jk = jkmin, ike - 1
5062 IF ( zplcl(ji) <= ppres(ji,jk) .AND. owork1(ji) )
THEN
5064 pzlcl(ji) = pz(ji,jk+1)
5076 zdp(ji) = log( zplcl(ji) / ppres(ji,jkm) ) / &
5077 log( ppres(ji,jk) / ppres(ji,jkm) )
5078 zwork1(ji) = pth(ji,jk) * ( ppres(ji,jk) /
xp00 ) ** zrdocp
5079 zwork2(ji) = pth(ji,jkm) * ( ppres(ji,jkm) /
xp00 ) ** zrdocp
5080 zwork1(ji) = zwork2(ji) + ( zwork1(ji) - zwork2(ji) ) * zdp(ji)
5083 zwork2(ji) = pz(ji,jkm) + ( pz(ji,jk) - pz(ji,jkm) ) * zdp(ji)
5086 ptelcl(:) = zwork1(:)
5087 pzlcl(:) = zwork2(:)
5095 kdpl, kpbl, klcl, kctl, klfs, kdbl, &
5096 pumf, puer, pudr, pdmf, pder, pddr, &
5097 ptimec, pdxdy, pmixf, plmass, pwsub,&
5149 INTEGER,
INTENT(IN) :: KLON
5150 INTEGER,
INTENT(IN) :: KLEV
5151 INTEGER,
INTENT(IN) :: KCH
5153 REAL,
DIMENSION(KLON,KLEV,KCH),
INTENT(IN) :: PCH1
5154 REAL,
DIMENSION(KLON,KLEV,KCH),
INTENT(OUT):: PCH1C
5156 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
5157 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
5158 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
5159 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
5160 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLFS
5161 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDBL
5163 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUMF
5164 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUER
5165 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUDR
5166 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDMF
5167 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDER
5168 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDDR
5170 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTIMEC
5171 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
5172 REAL,
DIMENSION(KLON),
INTENT(IN) :: PMIXF
5173 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PLMASS
5174 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PWSUB
5175 INTEGER,
INTENT(IN) :: KFTSTEPS
5181 INTEGER :: IIE, IKB, IKE
5187 INTEGER :: JKLC, JKLD, JKLP, JKMAX
5189 REAL,
DIMENSION(KLON,KLEV) :: ZOMG
5190 REAL,
DIMENSION(KLON,KLEV,KCH) :: ZUCH1, ZDCH1
5191 REAL,
DIMENSION(KLON) :: ZTIMEC
5192 REAL,
DIMENSION(KLON,KLEV) :: ZTIMC
5193 REAL,
DIMENSION(KLON,KLEV,KCH) :: ZCH1MFIN, ZCH1MFOUT
5195 REAL,
DIMENSION(KLON,KCH) :: ZWORK1, ZWORK2, ZWORK3
5207 jkmax = maxval( kctl(:) )
5222 zwork1(ji,:) = .5 * ( pch1(ji,jkld,:) + pch1(ji,jklp,:) )
5228 DO jk = minval( kdpl(:) ), jkmax
5233 IF ( kdpl(ji) <= jk .AND. klcl(ji) > jk ) &
5234 zuch1(ji,jk,jn) = zwork1(ji,jn)
5236 IF ( klcl(ji) - 1 <= jk .AND. kctl(ji) > jk )
THEN
5239 zuch1(ji,jkp,jn) = ( pumf(ji,jk) * zuch1(ji,jk,jn) + &
5240 puer(ji,jkp) * pch1(ji,jk,jn) ) / &
5241 ( pumf(ji,jkp) + pudr(ji,jkp) + 1.e-7 )
5256 zwork1(:,:) = spread( pmixf(:), dim=2, ncopies=inch1 )
5259 zdch1(ji,jk,:) = zwork1(ji,:) * pch1(ji,jk,:) + &
5260 ( 1. - zwork1(ji,:) ) * zuch1(ji,jk,:)
5266 DO jk = maxval( klfs(:) ), ikb + 1, -1
5270 IF ( jk <= klfs(ji) .AND. jkp >= kdbl(ji) )
THEN
5271 zdch1(ji,jkp,jn) = ( zdch1(ji,jk,jn) * pdmf(ji,jk) - &
5272 pch1(ji,jk,jn) * pder(ji,jkp) ) / &
5273 ( pdmf(ji,jkp) - pddr(ji,jkp) - 1.e-7 )
5283 pch1c(:,ikb:ike,:) = pch1(:,ikb:ike,:)
5286 zomg(:,jk) = pwsub(:,jk) * pdxdy(:) /
xg
5289 ztimec(:) = ptimec(:) /
REAL( KFTSTEPS )
5291 WHERE ( ptimec(:) < 1. ) ztimec(:) = 0.
5292 ztimc(:,:)= spread( ztimec(:), dim=2, ncopies=iks )
5294 zch1mfin(:,:,:) = 0.
5295 zch1mfout(:,:,:) = 0.
5297 DO jstep = 1, kftsteps
5299 DO jk = ikb + 1, jkmax
5300 jkp = max( ikb + 1, jk - 1 )
5301 zwork3(:,:) = spread( zomg(:,jk), dim=2, ncopies=inch1 )
5302 zwork1(:,:) = sign( 1., zwork3(:,:) )
5303 zwork2(:,:) = 0.5 * ( 1. + zwork1(:,:) )
5304 zwork1(:,:) = 0.5 * ( 1. - zwork1(:,:) )
5305 zch1mfin(:,jk,:) = - zwork3(:,:) * pch1c(:,jkp,:) * zwork1(:,:)
5306 zch1mfout(:,jk,:) = zwork3(:,:) * pch1c(:,jk,:) * zwork2(:,:)
5307 zch1mfin(:,jkp,:) = zch1mfin(:,jkp,:) + zch1mfout(:,jk,:) * zwork2(:,:)
5308 zch1mfout(:,jkp,:)= zch1mfout(:,jkp,:) + zch1mfin(:,jk,:) * zwork1(:,:)
5312 DO jk = ikb + 1, jkmax
5313 pch1c(:,jk,jn) = pch1c(:,jk,jn) + ztimc(:,jk) / plmass(:,jk) * ( &
5314 zch1mfin(:,jk,jn) + pudr(:,jk) * zuch1(:,jk,jn) + &
5315 pddr(:,jk) * zdch1(:,jk,jn) - zch1mfout(:,jk,jn) - &
5316 ( puer(:,jk) + pder(:,jk) ) * pch1(:,jk,jn) )
5317 pch1c(:,jk,jn) = max( 0., pch1c(:,jk,jn) )
5472 pdtconv, kice, osettadj, ptadjs, &
5474 ptt, prvt, prct, prit, pwt, &
5475 ptten, prvten, prcten, priten, &
5476 kcltop, kclbas, pumf, &
5477 och1conv, kch1, pch1, pch1ten )
5570 INTEGER,
INTENT(IN) :: KLON
5571 INTEGER,
INTENT(IN) :: KLEV
5572 INTEGER,
INTENT(IN) :: KIDIA
5573 INTEGER,
INTENT(IN) :: KFDIA
5574 INTEGER,
INTENT(IN) :: KBDIA
5576 INTEGER,
INTENT(IN) :: KTDIA
5579 REAL,
INTENT(IN) :: PDTCONV
5582 INTEGER,
INTENT(IN) :: KICE
5584 LOGICAL,
INTENT(IN) :: OSETTADJ
5586 REAL,
INTENT(IN) :: PTADJS
5587 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTT
5588 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRVT
5589 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRCT
5590 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRIT
5591 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PWT
5593 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPABST
5594 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZZ
5596 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PTTEN
5598 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRVTEN
5599 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRCTEN
5600 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PRITEN
5601 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCLTOP
5602 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KCLBAS
5605 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUMF
5607 LOGICAL,
INTENT(IN) :: OCH1CONV
5608 INTEGER,
INTENT(IN) :: KCH1
5609 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(IN) :: PCH1
5610 REAL,
DIMENSION(KLON,KLEV,KCH1),
INTENT(INOUT):: PCH1TEN
5615 INTEGER :: ITEST, ICONV, ICONV1
5621 INTEGER :: JK, JKP, JKM
5623 REAL :: ZEPS, ZEPSA, ZEPSB
5624 REAL :: ZCPORD, ZRDOCP
5626 LOGICAL,
DIMENSION(KLON, KLEV) :: GTRIG3
5627 LOGICAL,
DIMENSION(KLON) :: GTRIG
5628 REAL,
DIMENSION(KLON,KLEV) :: ZTHT, ZSTHV, ZSTHES
5629 REAL,
DIMENSION(KLON) :: ZTIME
5630 REAL,
DIMENSION(KLON) :: ZWORK2, ZWORK2B
5635 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDPL
5636 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IPBL
5637 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILCL
5638 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IETL
5639 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ICTL
5640 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILFS
5642 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISDPL
5643 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISPBL
5644 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISLCL
5645 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTHLCL
5646 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTLCL
5647 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSRVLCL
5648 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSWLCL
5649 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSZLCL
5650 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSTHVELCL
5651 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSDXDY
5654 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZZ
5655 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZPRES
5656 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDPRES
5658 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZW
5659 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTT
5660 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTH
5661 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHV
5662 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHL
5663 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHES, ZTHEST
5664 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRW
5665 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRV
5666 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRC
5667 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRI
5668 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDXDY
5671 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUMF
5672 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUER
5673 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUDR
5674 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUTHL
5675 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZUTHV
5676 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURW
5677 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURC
5678 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZURI
5679 REAL,
DIMENSION(:),
ALLOCATABLE :: ZMFLCL
5680 REAL,
DIMENSION(:),
ALLOCATABLE :: ZCAPE
5681 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTHLCL
5682 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTLCL
5683 REAL,
DIMENSION(:),
ALLOCATABLE :: ZRVLCL
5684 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWLCL
5685 REAL,
DIMENSION(:),
ALLOCATABLE :: ZZLCL
5686 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTHVELCL
5689 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDMF
5690 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDER
5691 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDDR
5694 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZLMASS
5695 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTIMEC
5697 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZTHC
5698 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRVC
5699 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRCC
5700 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZRIC
5701 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWSUB
5703 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GTRIG1
5704 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GWORK
5705 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IINDEX, IJINDEX, IJSINDEX, IJPINDEX
5706 REAL,
DIMENSION(:),
ALLOCATABLE :: ZCPH
5707 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLV, ZLS
5712 REAL,
DIMENSION(:,:,:),
ALLOCATABLE:: ZCH1
5713 REAL,
DIMENSION(:,:,:),
ALLOCATABLE:: ZCH1C
5714 REAL,
DIMENSION(:,:),
ALLOCATABLE:: ZWORK3
5715 LOGICAL,
DIMENSION(:,:,:),
ALLOCATABLE::GTRIG4
5725 jcvexb = max( 0, kbdia - 1 )
5728 jcvext = max( 0, ktdia - 1)
5737 gtrig(iib:iie) = .
true.
5738 itest = count( gtrig(:) )
5739 IF ( itest == 0 )
RETURN
5747 gtrig3(:,:) = spread( gtrig(:), dim=2, ncopies=iks )
5748 WHERE ( gtrig3(:,:) )
5761 IF ( och1conv )
THEN
5762 ALLOCATE( gtrig4(klon,klev,kch1) )
5763 gtrig4(:,:,:) = spread( gtrig3(:,:), dim=3, ncopies=kch1 )
5764 WHERE( gtrig4(:,:,:) ) pch1ten(:,:,:) = 0.
5765 DEALLOCATE( gtrig4 )
5787 IF ( ppabst(ji,jk) > 40.e2 )
THEN
5788 ztht(ji,jk) = ptt(ji,jk) * (
xp00 / ppabst(ji,jk) ) ** zrdocp
5789 zsthv(ji,jk) = ztht(ji,jk) * ( 1. + zepsa * prvt(ji,jk) ) / &
5790 ( 1. + prvt(ji,jk) + prct(ji,jk) + prit(ji,jk) )
5797 zes = min( 1., zeps * zes / ( ppabst(ji,jk) - zes ) )
5798 zsthes(ji,jk) = ptt(ji,jk) * ( ztht(ji,jk) / ptt(ji,jk) ) ** &
5799 ( 1. - 0.28 * zes ) * exp( min(500., &
5800 ( 3374.6525 / ptt(ji,jk) - 2.5403 ) &
5801 * zes * ( 1. + 0.81 * zes ) ) )
5816 ALLOCATE( zpres(itest,iks) )
5817 ALLOCATE( zz(itest,iks) )
5818 ALLOCATE( zw(itest,iks) )
5819 ALLOCATE( zth(itest,iks) )
5820 ALLOCATE( zthv(itest,iks) )
5821 ALLOCATE( zthest(itest,iks) )
5822 ALLOCATE( zrv(itest,iks) )
5823 ALLOCATE( zsthlcl(itest) )
5824 ALLOCATE( zstlcl(itest) )
5825 ALLOCATE( zsrvlcl(itest) )
5826 ALLOCATE( zswlcl(itest) )
5827 ALLOCATE( zszlcl(itest) )
5828 ALLOCATE( zsthvelcl(itest) )
5829 ALLOCATE( isdpl(itest) )
5830 ALLOCATE( ispbl(itest) )
5831 ALLOCATE( islcl(itest) )
5832 ALLOCATE( zsdxdy(itest) )
5833 ALLOCATE( gtrig1(itest) )
5834 ALLOCATE( iindex(klon) )
5835 ALLOCATE( ijsindex(itest) )
5839 ijsindex(:) = pack( iindex(:), mask=gtrig(:) )
5844 zpres(ji,jk) = ppabst(jl,jk)
5845 zz(ji,jk) = pzz(jl,jk)
5846 zth(ji,jk) = ztht(jl,jk)
5847 zthv(ji,jk) = zsthv(jl,jk)
5848 zthest(ji,jk) = zsthes(jl,jk)
5849 zrv(ji,jk) = max( 0., prvt(jl,jk) )
5850 zw(ji,jk) = pwt(jl,jk)
5866 islcl(:) = max( ikb, 2 )
5871 zpres, zth, zthv, zthest, &
5872 zrv, zw, zz, zsdxdy, &
5873 zsthlcl, zstlcl, zsrvlcl, zswlcl, zszlcl, &
5874 zsthvelcl, islcl, isdpl, ispbl, gtrig1 )
5880 DEALLOCATE( zthest )
5891 iconv = count( gtrig1(:) )
5892 IF ( iconv == 0 )
THEN
5893 DEALLOCATE( zsthlcl )
5894 DEALLOCATE( zstlcl )
5895 DEALLOCATE( zsrvlcl )
5896 DEALLOCATE( zswlcl )
5897 DEALLOCATE( zszlcl )
5898 DEALLOCATE( zsthvelcl )
5899 DEALLOCATE( zsdxdy )
5903 DEALLOCATE( gtrig1 )
5904 DEALLOCATE( iindex )
5905 DEALLOCATE( ijsindex )
5911 ALLOCATE( idpl(iconv) )
5912 ALLOCATE( ipbl(iconv) )
5913 ALLOCATE( ilcl(iconv) )
5914 ALLOCATE( ictl(iconv) )
5915 ALLOCATE( ietl(iconv) )
5919 ALLOCATE( zz(iconv,iks) )
5920 ALLOCATE( zpres(iconv,iks) )
5921 ALLOCATE( zdpres(iconv,iks) )
5922 ALLOCATE( ztt(iconv, iks) )
5923 ALLOCATE( zth(iconv,iks) )
5924 ALLOCATE( zthv(iconv,iks) )
5925 ALLOCATE( zthl(iconv,iks) )
5926 ALLOCATE( zthes(iconv,iks) )
5927 ALLOCATE( zrv(iconv,iks) )
5928 ALLOCATE( zrc(iconv,iks) )
5929 ALLOCATE( zri(iconv,iks) )
5930 ALLOCATE( zrw(iconv,iks) )
5931 ALLOCATE( zdxdy(iconv) )
5935 ALLOCATE( zumf(iconv,iks) )
5936 ALLOCATE( zuer(iconv,iks) )
5937 ALLOCATE( zudr(iconv,iks) )
5938 ALLOCATE( zuthl(iconv,iks) )
5939 ALLOCATE( zuthv(iconv,iks) )
5940 ALLOCATE( zurw(iconv,iks) )
5941 ALLOCATE( zurc(iconv,iks) )
5942 ALLOCATE( zuri(iconv,iks) )
5943 ALLOCATE( zthlcl(iconv) )
5944 ALLOCATE( ztlcl(iconv) )
5945 ALLOCATE( zrvlcl(iconv) )
5946 ALLOCATE( zwlcl(iconv) )
5947 ALLOCATE( zmflcl(iconv) )
5948 ALLOCATE( zzlcl(iconv) )
5949 ALLOCATE( zthvelcl(iconv) )
5950 ALLOCATE( zcape(iconv) )
5954 ALLOCATE( ijindex(iconv) )
5955 ALLOCATE( ijpindex(iconv) )
5956 ALLOCATE( zcph(iconv) )
5957 ALLOCATE( zlv(iconv) )
5958 ALLOCATE( zls(iconv) )
5965 gtrig(:) = unpack( gtrig1(:), mask=gtrig(:), field=.
false. )
5966 ijindex(:) = pack( iindex(:), mask=gtrig(:) )
5971 zz(ji,jk) = pzz(jl,jk)
5972 zpres(ji,jk) = ppabst(jl,jk)
5973 ztt(ji,jk) = ptt(jl,jk)
5974 zth(ji,jk) = ztht(jl,jk)
5975 zthes(ji,jk) = zsthes(jl,jk)
5976 zrv(ji,jk) = max( 0., prvt(jl,jk) )
5977 zrc(ji,jk) = max( 0., prct(jl,jk) )
5978 zri(ji,jk) = max( 0., prit(jl,jk) )
5979 zthv(ji,jk) = zsthv(jl,jk)
5986 ijpindex(:) = pack( ijsindex(:), mask=gtrig1(:) )
5989 idpl(ji) = isdpl(jl)
5990 ipbl(ji) = ispbl(jl)
5991 ilcl(ji) = islcl(jl)
5992 zthlcl(ji) = zsthlcl(jl)
5993 ztlcl(ji) = zstlcl(jl)
5994 zrvlcl(ji) = zsrvlcl(jl)
5995 zwlcl(ji) = zswlcl(jl)
5996 zzlcl(ji) = zszlcl(jl)
5997 zthvelcl(ji) = zsthvelcl(jl)
5998 zdxdy(ji) = zsdxdy(jl)
6000 ALLOCATE( gwork(iconv) )
6001 gwork(:) = pack( gtrig1(:), mask=gtrig1(:) )
6002 DEALLOCATE( gtrig1 )
6003 ALLOCATE( gtrig1(iconv) )
6004 gtrig1(:) = gwork(:)
6007 DEALLOCATE( ijpindex )
6011 DEALLOCATE( zsthlcl )
6012 DEALLOCATE( zstlcl )
6013 DEALLOCATE( zsrvlcl )
6014 DEALLOCATE( zswlcl )
6015 DEALLOCATE( zszlcl )
6016 DEALLOCATE( zsthvelcl )
6017 DEALLOCATE( zsdxdy )
6024 DO jk = ikb + 1, ike
6025 zdpres(:,jk) = zpres(:,jk-1) - zpres(:,jk)
6032 zrw(:,jk) = zrv(:,jk) + zrc(:,jk) + zri(:,jk)
6036 zthl(:,jk) = zcph(:) * ztt(:,jk) + ( 1. + zrw(:,jk) ) *
xg * zz(:,jk) &
6037 - zlv(:) * zrc(:,jk) - zls(:) * zri(:,jk)
6052 zmflcl(:) =
xa25 * 1.e-3
6056 kice, zpres, zdpres, zz, zthl, zthv, zthes, zrw, &
6057 zthlcl, ztlcl, zrvlcl, zwlcl, zzlcl, zthvelcl, &
6058 zmflcl, gtrig1, ilcl, idpl, ipbl, &
6059 zumf, zuer, zudr, zuthl, zuthv, zurw, &
6060 zurc, zuri, zcape, ictl, ietl )
6069 iconv1 = count(gtrig1)
6071 IF ( iconv1 > 0 )
THEN
6078 ALLOCATE( zdmf(iconv,iks) )
6079 ALLOCATE( zder(iconv,iks) )
6080 ALLOCATE( zddr(iconv,iks) )
6081 ALLOCATE( ilfs(iconv) )
6082 ALLOCATE( zlmass(iconv,iks) )
6088 zlmass(:,jk) = zdxdy(:) * zdpres(:,jk) /
xg
6090 zlmass(:,ikb) = zlmass(:,ikb+1)
6094 ALLOCATE( ztimec(iconv) )
6095 ALLOCATE( zthc(iconv,iks) )
6096 ALLOCATE( zrvc(iconv,iks) )
6097 ALLOCATE( zrcc(iconv,iks) )
6098 ALLOCATE( zric(iconv,iks) )
6099 ALLOCATE( zwsub(iconv,iks) )
6106 IF ( osettadj ) ztimec(:) = ptadjs
6114 zpres, zdpres, zz, zdxdy, zlmass, &
6115 zthl, zth, zrw, zrc, zri, gtrig1, &
6116 zthc, zrvc, zrcc, zric, zwsub, &
6117 ilcl, idpl, ipbl, ictl, &
6118 zumf, zuer, zudr, zuthl, zurw, &
6119 zurc, zuri, zcape, ztimec, iftsteps )
6136 zthc(:,jk) = ( zthc(:,jk) - zth(:,jk) ) / ztimec(:) &
6137 * ( zpres(:,jk) /
xp00 ) ** zrdocp
6138 zrvc(:,jk) = ( zrvc(:,jk) - zrw(:,jk) + zrc(:,jk) + zri(:,jk) ) &
6141 zrcc(:,jk) = ( zrcc(:,jk) - zrc(:,jk) ) / ztimec(:)
6142 zric(:,jk) = ( zric(:,jk) - zri(:,jk) ) / ztimec(:)
6152 jkm = maxval( ictl(:) )
6155 DO jk = jkm, ikb+1, -1
6158 zw1 = zrvc(ji,jk) + zrcc(ji,jk) + zric(ji,jk)
6159 zwork2(ji) = zwork2(ji) + zw1 * &
6160 (zpres(ji,jk) - zpres(ji,jkp)) /
xg
6161 zw1 = (
xcpd +
xcpv * zrw(ji,jk) )* zthc(ji,jk) - &
6164 zwork2b(ji) = zwork2b(ji) + zw1 * &
6165 (zpres(ji,jk) - zpres(ji,jkp)) /
xg
6172 IF ( ictl(ji) > 2 )
THEN
6174 zwork2(ji) = zwork2(ji) *
xg / ( zpres(ji,ikb+1) - zpres(ji,jkp) )
6175 zwork2b(ji) = zwork2b(ji) *
xg / ( zpres(ji,ikb+1) - zpres(ji,jkp) )
6181 DO jk = jkm, ikb+1, -1
6183 IF ( ictl(ji) > 2 .AND. jk <= ictl(ji) )
THEN
6184 zrvc(ji,jk) = zrvc(ji,jk) - zwork2(ji)
6185 zthc(ji,jk) = zthc(ji,jk) - zwork2b(ji) / (
xcpd +
xcpv * zrw(ji,jk) )
6196 ptten(jl,jk) = zthc(ji,jk)
6197 prvten(jl,jk) = zrvc(ji,jk)
6198 prcten(jl,jk) = zrcc(ji,jk)
6199 priten(jl,jk) = zric(ji,jk)
6207 ilcl(:) = min( ilcl(:), ictl(:) )
6210 kcltop(jl) = ictl(ji)
6211 kclbas(jl) = ilcl(ji)
6218 IF ( och1conv )
THEN
6220 ALLOCATE( zch1(iconv,iks,kch1) )
6221 ALLOCATE( zch1c(iconv,iks,kch1) )
6222 ALLOCATE( zwork3(iconv,kch1) )
6227 zch1(ji,jk,:) = pch1(jl,jk,:)
6232 idpl, ipbl, ilcl, ictl, ilfs, ilfs, &
6233 zumf, zuer, zudr, zdmf, zder, zddr, &
6234 ztimec, zdxdy, zdmf(:,1), zlmass, zwsub, &
6239 zch1c(:,jk,jn) = ( zch1c(:,jk,jn)- zch1(:,jk,jn) ) / ztimec(:)
6249 jkm = maxval( ictl(:) )
6251 DO jk = jkm, ikb+1, -1
6254 zwork3(ji,:) = zwork3(ji,:) + zch1c(ji,jk,:) * &
6255 (zpres(ji,jk) - zpres(ji,jkp)) /
xg
6263 zwork3(ji,:) = zwork3(ji,:) * &
6264 xg / ( zpres(ji,ikb+1) - zpres(ji,jkp) )
6269 DO jk = jkm, ikb+1, -1
6271 IF ( jk <= ictl(ji) )
THEN
6272 zch1c(ji,jk,:) = zch1c(ji,jk,:) - zwork3(ji,:)
6281 pch1ten(jl,jk,:) = zch1c(ji,jk,:)
6291 zumf(:,jk) = zumf(:,jk) / zdxdy(:)
6297 pumf(jl,jk) = zumf(ji,jk) * zwork2(jl)
6311 DEALLOCATE( zlmass )
6315 DEALLOCATE( ztimec )
6322 IF ( och1conv )
THEN
6325 DEALLOCATE( zwork3 )
6342 DEALLOCATE( zdpres )
6364 DEALLOCATE( zthlcl )
6366 DEALLOCATE( zrvlcl )
6369 DEALLOCATE( zthvelcl )
6370 DEALLOCATE( zmflcl )
6375 DEALLOCATE( iindex )
6376 DEALLOCATE( ijindex )
6377 DEALLOCATE( ijsindex )
6378 DEALLOCATE( gtrig1 )
6384 ppres,
pth, pthv, pthes, &
6385 prv, pw, pz, pdxdy, &
6386 pthlcl, ptlcl, prvlcl, pwlcl, pzlcl, &
6387 pthvelcl, klcl, kdpl, kpbl, otrig )
6465 INTEGER,
INTENT(IN) :: KLON
6466 INTEGER,
INTENT(IN) :: KLEV
6467 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
6468 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH, PTHV
6469 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHES
6470 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRV
6471 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
6472 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
6473 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PW
6475 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTHLCL
6476 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTLCL
6477 REAL,
DIMENSION(KLON),
INTENT(OUT):: PRVLCL
6478 REAL,
DIMENSION(KLON),
INTENT(OUT):: PWLCL
6479 REAL,
DIMENSION(KLON),
INTENT(OUT):: PZLCL
6480 REAL,
DIMENSION(KLON),
INTENT(OUT):: PTHVELCL
6481 LOGICAL,
DIMENSION(KLON),
INTENT(OUT):: OTRIG
6482 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KLCL
6483 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KDPL
6484 INTEGER,
DIMENSION(KLON),
INTENT(INOUT):: KPBL
6488 INTEGER :: JKK, JK, JKP, JKM, JL, JKT, JT
6490 INTEGER :: IIE, IKB, IKE
6492 REAL :: ZCPORD, ZRDOCP
6494 REAL,
DIMENSION(KLON) :: ZTHLCL, ZTLCL, ZRVLCL, &
6495 ZWLCL, ZZLCL, ZTHVELCL
6496 INTEGER,
DIMENSION(KLON) :: IDPL, IPBL, ILCL
6497 REAL,
DIMENSION(KLON) :: ZPLCL
6498 REAL,
DIMENSION(KLON) :: ZZDPL
6499 REAL,
DIMENSION(KLON) :: ZTHVLCL
6500 REAL,
DIMENSION(KLON) :: ZTMIX
6501 REAL,
DIMENSION(KLON) :: ZEVMIX
6502 REAL,
DIMENSION(KLON) :: ZDPTHMIX, ZPRESMIX
6503 REAL,
DIMENSION(KLON) :: ZCAPE
6504 REAL,
DIMENSION(KLON) :: ZTHEUL
6505 REAL,
DIMENSION(KLON) :: ZLV, ZCPH
6506 REAL,
DIMENSION(KLON) :: ZDP
6507 REAL,
DIMENSION(KLON) :: ZTOP
6509 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3
6510 LOGICAL,
DIMENSION(KLON) :: GTRIG, GTRIG2
6511 LOGICAL,
DIMENSION(KLON) :: GWORK1
6543 pzlcl(:) = pz(:,ikb)
6544 zzdpl(:) = pz(:,ikb)
6553 DO jk = ikb + 1, ike - 2
6557 IF ( pz(1,jk) - pz(1,ikb) < 5.e3 ) jt = jk
6564 jkp = minval( idpl(:) ) + 1
6569 gwork1(:) = zzdpl(:) - pz(:,ikb) <
xzlcl
6577 zzdpl(:) = pz(:,jkk)
6585 DO jk = jkk, ike - 1
6588 IF ( gwork1(ji) .AND. zdpthmix(ji) <
xzpbl )
THEN
6590 zwork1(ji) = ppres(ji,jk) - ppres(ji,jkm)
6591 zdpthmix(ji) = zdpthmix(ji) + zwork1(ji)
6592 zpresmix(ji) = zpresmix(ji) + ppres(ji,jk) * zwork1(ji)
6593 zthlcl(ji) = zthlcl(ji) + pth(ji,jk) * zwork1(ji)
6594 zrvlcl(ji) = zrvlcl(ji) + prv(ji,jk) * zwork1(ji)
6597 IF ( minval( zdpthmix(:) ) >=
xzpbl )
EXIT
6603 zpresmix(:) = zpresmix(:) / zdpthmix(:)
6604 zthlcl(:) = zthlcl(:) / zdpthmix(:) +
xdtpert
6605 zrvlcl(:) = zrvlcl(:) / zdpthmix(:)
6606 zthvlcl(:) = zthlcl(:) * ( 1. + zepsa * zrvlcl(:) ) &
6607 / ( 1. + zrvlcl(:) )
6616 ztmix(:) = zthlcl(:) * ( zpresmix(:) /
xp00 ) ** zrdocp
6617 zevmix(:) = zrvlcl(:) * zpresmix(:) / ( zrvlcl(:) + zeps )
6618 zevmix(:) = max( 1.e-8, zevmix(:) )
6619 zwork1(:) = log( zevmix(:) / 613.3 )
6621 zwork1(:) = ( 4780.8 - 32.19 * zwork1(:) ) / ( 17.502 - zwork1(:) )
6623 ztlcl(:) = zwork1(:) - ( .212 + 1.571e-3 * ( zwork1(:) -
xtt ) &
6624 - 4.36e-4 * ( ztmix(:) -
xtt ) ) * ( ztmix(:) - zwork1(:) )
6625 ztlcl(:) = min( ztlcl(:), ztmix(:) )
6626 zplcl(:) =
xp00 * ( ztlcl(:) / zthlcl(:) ) ** zcpord
6637 zwork2(:) = zwork1(:) / ztlcl(:) * (
xbetaw / ztlcl(:) -
xgamw )
6638 zwork2(:) = ( zwork1(:) - zrvlcl(:) ) / &
6639 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
6640 ztlcl(:) = ztlcl(:) - zlv(:) / zcph(:) * zwork2(:)
6650 WHERE( gwork1(:) .AND. zrvlcl(:) > zwork1(:) )
6651 zwork2(:) = zwork1(:) / ztmix(:) * (
xbetaw / ztmix(:) -
xgamw )
6652 zwork2(:) = ( zwork1(:) - zrvlcl(:) ) / &
6653 ( 1. + zlv(:) / zcph(:) * zwork2(:) )
6654 ztlcl(:) = ztmix(:) - zlv(:) / zcph(:) * zwork2(:)
6655 zrvlcl(:) = zrvlcl(:) - zwork2(:)
6656 zplcl(:) = zpresmix(:)
6657 zthlcl(:) = ztlcl(:) * (
xp00 / zplcl(:) ) ** zrdocp
6658 zthvlcl(:)= zthlcl(:) * ( 1. + zepsa * zrvlcl(:) ) &
6659 / ( 1. + zrvlcl(:) )
6666 DO jk = jkk, ike - 1
6668 IF ( zplcl(ji) <= ppres(ji,jk) .AND. gwork1(ji) ) ilcl(ji) = jk + 1
6679 zdp(ji) = log( zplcl(ji) / ppres(ji,jkm) ) / &
6680 log( ppres(ji,jk) / ppres(ji,jkm) )
6681 zwork1(ji) = pthv(ji,jkm) + ( pthv(ji,jk) - pthv(ji,jkm) ) * zdp(ji)
6684 zwork2(ji) = pz(ji,jkm) + ( pz(ji,jk) - pz(ji,jkm) ) * zdp(ji)
6687 zthvelcl(:) = zwork1(:)
6688 zzlcl(:) = zwork2(:)
6732 ztheul(:) = ztlcl(:) * ( zthlcl(:) / ztlcl(:) ) &
6733 ** ( 1. - 0.28 * zrvlcl(:) ) &
6734 * exp( ( 3374.6525 / ztlcl(:) - 2.5403 ) * &
6735 zrvlcl(:) * ( 1. + 0.81 * zrvlcl(:) ) )
6740 jkm = minval( ilcl(:) )
6744 zwork1(ji) = ( 2. * ztheul(ji) / &
6745 ( pthes(ji,jk) + pthes(ji,jl) ) - 1. ) * ( pz(ji,jk) - pz(ji,jl) )
6746 IF ( jl < ilcl(ji) ) zwork1(ji) = 0.
6747 zcape(ji) = zcape(ji) + zwork1(ji)
6748 zwork2(ji) =
xnhgam *
xg * zcape(ji) + 1.05 * zwlcl(ji) * zwlcl(ji)
6750 zwork2(ji) = sign( 1., zwork2(ji) )
6751 zwork3(ji) = zwork3(ji) + min(0., zwork2(ji) )
6752 zwork3(ji) = max( -1., zwork3(ji) )
6756 ztop(ji) = pz(ji,jl) * .5 * ( 1. + zwork2(ji) ) * ( 1. + zwork3(ji) ) + &
6757 ztop(ji) * .5 * ( 1. - zwork2(ji) )
6762 zwork2(:) = ztop(:) - zzlcl(:)
6763 WHERE( zwork2(:) .GE.
xcdepth .AND. zwork2(:) <
xcdepth_d .AND. gtrig2(:) )
6767 pthlcl(:) = zthlcl(:)
6768 prvlcl(:) = zrvlcl(:)
6772 pthvelcl(:) = zthvelcl(:)
6784 kice, ppres, pdpres, pz, pthl, pthv, pthes, prw,&
6785 pthlcl, ptlcl, prvlcl, pwlcl, pzlcl, pthvelcl, &
6786 pmflcl, otrig, klcl, kdpl, kpbl, &
6787 pumf, puer, pudr, puthl, puthv, purw, &
6788 purc, puri, pcape, kctl, ketl )
6866 INTEGER,
INTENT(IN) :: KLON
6867 INTEGER,
INTENT(IN) :: KLEV
6868 INTEGER,
INTENT(IN) :: KICE
6870 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHL
6871 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHV
6872 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHES
6873 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRW
6875 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
6876 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDPRES
6878 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
6879 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTHLCL
6880 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTLCL
6881 REAL,
DIMENSION(KLON),
INTENT(IN) :: PRVLCL
6882 REAL,
DIMENSION(KLON),
INTENT(IN) :: PWLCL
6883 REAL,
DIMENSION(KLON),
INTENT(IN) :: PMFLCL
6885 REAL,
DIMENSION(KLON),
INTENT(IN) :: PZLCL
6886 REAL,
DIMENSION(KLON),
INTENT(IN) :: PTHVELCL
6887 LOGICAL,
DIMENSION(KLON),
INTENT(INOUT):: OTRIG
6888 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
6889 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
6890 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
6893 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KCTL
6894 INTEGER,
DIMENSION(KLON),
INTENT(OUT):: KETL
6896 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUMF
6897 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUER
6898 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUDR
6899 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUTHL
6900 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PUTHV
6901 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURW
6902 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURC
6903 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT):: PURI
6904 REAL,
DIMENSION(KLON),
INTENT(OUT):: PCAPE
6908 INTEGER :: IIE, IKB, IKE
6910 INTEGER :: JK, JKP, JKM, JK1, JK2, JKMIN
6911 REAL :: ZEPSA, ZCVOCD
6912 REAL :: ZCPORD, ZRDOCP
6914 REAL,
DIMENSION(KLON) :: ZUT
6915 REAL,
DIMENSION(KLON) :: ZUW1, ZUW2
6917 REAL,
DIMENSION(KLON) :: ZE1,ZE2,ZD1,ZD2
6919 REAL,
DIMENSION(KLON) :: ZMIXF
6920 REAL,
DIMENSION(KLON) :: ZCPH
6921 REAL,
DIMENSION(KLON) :: ZLV, ZLS
6922 REAL,
DIMENSION(KLON) :: ZURV
6923 REAL,
DIMENSION(KLON) :: ZPI
6924 REAL,
DIMENSION(KLON) :: ZTHEUL
6925 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZWORK4, ZWORK5, &
6927 INTEGER,
DIMENSION(KLON) :: IWORK
6928 LOGICAL,
DIMENSION(KLON) :: GWORK1, GWORK2, GWORK4, GWORK5
6930 LOGICAL,
DIMENSION(KLON,KLEV) :: GWORK6
6959 zuw1(:) = pwlcl(:) * pwlcl(:)
6982 ztheul(:) = ptlcl(:) * ( pthlcl(:) / ptlcl(:) ) ** ( 1. - 0.28 * prvlcl(:) ) &
6983 * exp( ( 3374.6525 / ptlcl(:) - 2.5403 ) * &
6984 prvlcl(:) * ( 1. + 0.81 * prvlcl(:) ) )
6987 zwork1(:) = (
xcpd + prvlcl(:) *
xcpv ) * ptlcl(:) &
6988 + ( 1. + prvlcl(:) ) *
xg * pzlcl(:)
6994 jkp = maxval( klcl(:) )
6995 jkm = minval( kdpl(:) )
6998 IF ( jk >= kdpl(ji) .AND. jk < klcl(ji) )
THEN
6999 pumf(ji,jk) = pmflcl(ji)
7000 puthl(ji,jk) = zwork1(ji)
7001 puthv(ji,jk) = pthlcl(ji) * ( 1. + zepsa * prvlcl(ji) ) / &
7003 purw(ji,jk) = prvlcl(ji)
7012 jkmin = minval( klcl(:) - 1 )
7013 DO jk = max( ikb + 1, jkmin ), ike - 1
7017 gwork4(:) = jk >= klcl(:) - 1
7018 gwork1(:) = gwork4(:) .AND. gwork2(:)
7021 WHERE( jk == klcl(:) - 1 ) zwork6(:) = 0.
7028 zwork1(:) = purc(:,jk)
7029 zwork2(:) = puri(:,jk)
7030 CALL convect_condens( klon, kice, ppres(:,jkp), puthl(:,jk), purw(:,jk),&
7031 zwork1, zwork2, pz(:,jkp), gwork1, zut, zurv, &
7032 purc(:,jkp), puri(:,jkp), zlv, zls, zcph )
7035 zpi(:) = (
xp00 / ppres(:,jkp) ) ** zrdocp
7038 puthv(:,jkp) = zpi(:) * zut(:) * ( 1. + zepsa * zurv(:) ) &
7039 / ( 1. + purw(:,jk) )
7046 zwork3(:) = pz(:,jkp) - pz(:,jk) * zwork6(:) - &
7047 ( 1. - zwork6(:) ) * pzlcl(:)
7048 zwork4(:) = pthv(:,jk) * zwork6(:) + &
7049 ( 1. - zwork6(:) ) * pthvelcl(:)
7050 zwork5(:) = 2. * zuw1(:) * puer(:,jk) / max( .1, pumf(:,jk) )
7051 zuw2(:) = zuw1(:) + zwork3(:) *
xnhgam *
xg * &
7052 ( ( puthv(:,jk) + puthv(:,jkp) ) / &
7053 ( zwork4(:) + pthv(:,jkp) ) - 1. ) &
7062 ( sqrt( max( 1.e-2, zuw2(:) ) ) + &
7063 sqrt( max( 1.e-2, zuw1(:) ) ) )
7069 purw(:,jkp) = purw(:,jk)
7070 purc(:,jkp) = purc(:,jkp)
7071 puri(:,jkp) = puri(:,jkp)
7072 puthl(:,jkp) = puthl(:,jk)
7090 zwork1(:) = zmixf(:) * pthl(:,jkp) &
7091 + ( 1. - zmixf(:) ) * puthl(:,jkp)
7092 zwork2(:) = zmixf(:) * prw(:,jkp) &
7093 + ( 1. - zmixf(:) ) * purw(:,jkp)
7096 purc(:,jkp), puri(:,jkp), pz(:,jkp), gwork1, zut,&
7097 zwork3, zwork4, zwork5, zlv, zls, zcph )
7101 zwork3(:) = zut(:) * zpi(:) * ( 1. + zepsa * ( &
7102 zwork2(:) - zwork4(:) - zwork5(:) ) ) / ( 1. + zwork2(:) )
7105 zmixf(:) = max( 0., puthv(:,jkp) - pthv(:,jkp) ) * zmixf(:) / &
7106 ( puthv(:,jkp) - zwork3(:) + 1.e-10 )
7107 zmixf(:) = max( 0., min( 1., zmixf(:) ) )
7120 zwork1(:) =
xentr *
xg /
xcrad * pumf(:,jk) * ( pz(:,jkp) - pz(:,jk) )
7124 WHERE ( gwork1(:) ) zwork2(:) = 1.
7125 WHERE ( puthv(:,jkp) > pthv(:,jkp) )
7126 puer(:,jkp) = 0.5 * zwork1(:) * ( ze1(:) + ze2(:) ) * zwork2(:)
7127 pudr(:,jkp) = 0.5 * zwork1(:) * ( zd1(:) + zd2(:) ) * zwork2(:)
7130 pudr(:,jkp) = zwork1(:) * zwork2(:)
7136 WHERE ( puthv(:,jkp) > pthv(:,jkp) .AND. jk > klcl(:) + 1 &
7147 WHERE( gwork1(:) ) &
7148 gwork2(:) = pumf(:,jk) - pudr(:,jkp) > 10. .AND. zuw2(:) > 0.
7149 WHERE ( gwork2(:) ) kctl(:) = jkp
7150 gwork1(:) = gwork2(:) .AND. gwork4(:)
7152 IF ( count( gwork2(:) ) == 0 )
EXIT
7162 zwork3(:) = pz(:,jkp) - pz(:,jk) * zwork6(:) - &
7163 ( 1. - zwork6(:) ) * pzlcl(:)
7164 zwork2(:) = pthes(:,jk) + ( 1. - zwork6(:) ) * &
7165 ( pthes(:,jkp) - pthes(:,jk) ) / ( pz(:,jkp) - pz(:,jk) ) * &
7166 ( pzlcl(:) - pz(:,jk) )
7169 zwork1(:) = ( 2. * ztheul(:) ) / ( zwork2(:) + pthes(:,jkp) ) - 1.
7170 pcape(:) = pcape(:) +
xg * zwork3(:) * max( 0., zwork1(:) )
7177 pumf(:,jkp) = pumf(:,jk) - pudr(:,jkp) + puer(:,jkp)
7178 pumf(:,jkp) = max( pumf(:,jkp), 0.1 )
7179 puthl(:,jkp) = ( pumf(:,jk) * puthl(:,jk) + &
7180 puer(:,jkp) * pthl(:,jk) - pudr(:,jkp) * puthl(:,jk) ) &
7182 purw(:,jkp) = ( pumf(:,jk) * purw(:,jk) + &
7183 puer(:,jkp) * prw(:,jk) - pudr(:,jkp) * purw(:,jk) ) &
7200 zwork1(ji) = pz(ji,jk) - pzlcl(ji)
7201 otrig(ji) = zwork1(ji) >=
xcdepth .AND. zwork1(ji) < 3.e3 &
7202 .AND. pcape(ji) > 1.
7204 WHERE( .NOT. otrig(:) )
7207 ketl(:) = max( ketl(:), klcl(:) + 2 )
7208 ketl(:) = min( ketl(:), kctl(:) )
7216 WHERE ( ketl(:) == kctl(:) ) zwork1(:) = 1.
7220 pudr(ji,jk) = pudr(ji,jk) + &
7221 ( pumf(ji,jk) - puer(ji,jk) ) * zwork1(ji)
7222 puer(ji,jk) = puer(ji,jk) * ( 1. - zwork1(ji) )
7223 pumf(ji,jk) = pumf(ji,jk) * ( 1. - zwork1(ji) )
7235 jk1 = minval( ketl(:) )
7236 jk2 = maxval( kctl(:) )
7240 IF( jk > ketl(ji) .AND. jk <= kctl(ji) )
THEN
7241 zwork1(ji) = zwork1(ji) + pdpres(ji,jk)
7248 zwork1(ji) = pumf(ji,jk) / max( 1., zwork1(ji) )
7251 DO jk = jk1 + 1, jk2
7254 IF ( jk > ketl(ji) .AND. jk <= kctl(ji) )
THEN
7255 pudr(ji,jk) = pdpres(ji,jk) * zwork1(ji)
7256 pumf(ji,jk) = pumf(ji,jkp) - pudr(ji,jk)
7271 zwork2(ji) = ppres(ji,jk) - ppres(ji,jkp) + pdpres(ji,jk)
7274 jkp = maxval( iwork(:) )
7277 IF ( jk >= kdpl(ji) .AND. jk <= iwork(ji) )
THEN
7278 puer(ji,jk) = puer(ji,jk) + pmflcl(ji) * pdpres(ji,jk) / ( zwork2(ji) + 0.1 )
7279 pumf(ji,jk) = pumf(ji,jk-1) + puer(ji,jk)
7293 gwork6(:,:) = spread( otrig(:), dim=2, ncopies=klev )
7294 WHERE ( .NOT. gwork6(:,:) )
7298 puthl(:,:) = pthl(:,:)
7299 purw(:,:) = prw(:,:)
7307 ppres, pdpres, pz, pdxdy, plmass, &
7308 pthl,
pth, prw, prc, pri, otrig1, &
7309 pthc, prwc, prcc, pric, pwsub, &
7310 klcl, kdpl, kpbl, kctl, &
7311 pumf, puer, pudr, puthl, purw, &
7312 purc, puri, pcape, ptimec, kftsteps )
7389 INTEGER,
INTENT(IN) :: KLON
7390 INTEGER,
INTENT(IN) :: KLEV
7391 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KLCL
7392 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KCTL
7393 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KDPL
7394 INTEGER,
DIMENSION(KLON),
INTENT(IN) :: KPBL
7395 REAL,
DIMENSION(KLON),
INTENT(INOUT) :: PTIMEC
7396 REAL,
DIMENSION(KLON),
INTENT(IN) :: PDXDY
7397 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTHL
7398 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PTH
7399 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRW
7401 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRC
7402 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PRI
7403 LOGICAL,
DIMENSION(KLON),
INTENT(IN) :: OTRIG1
7407 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PPRES
7408 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PDPRES
7410 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PLMASS
7411 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PZ
7412 REAL,
DIMENSION(KLON),
INTENT(IN) :: PCAPE
7413 INTEGER,
INTENT(OUT) :: KFTSTEPS
7417 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUMF
7418 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUER
7419 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT):: PUDR
7420 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PUTHL
7421 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURW
7422 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURC
7423 REAL,
DIMENSION(KLON,KLEV),
INTENT(IN) :: PURI
7425 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PTHC
7426 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRWC
7427 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRCC
7428 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PRIC
7429 REAL,
DIMENSION(KLON,KLEV),
INTENT(OUT) :: PWSUB
7433 INTEGER :: IIE, IKB, IKE
7435 INTEGER :: JK, JKP, JKMAX
7439 REAL :: ZCPORD, ZRDOCP
7440 REAL :: ZCVOCD, ZEPSA
7442 REAL,
DIMENSION(KLON,KLEV) :: ZTHLC
7444 REAL,
DIMENSION(KLON,KLEV) :: ZOMG
7445 REAL,
DIMENSION(KLON,KLEV) :: ZUMF
7446 REAL,
DIMENSION(KLON,KLEV) :: ZUER
7447 REAL,
DIMENSION(KLON,KLEV) :: ZUDR
7448 REAL,
DIMENSION(KLON) :: ZADJ
7449 REAL,
DIMENSION(KLON) :: ZADJMAX
7450 REAL,
DIMENSION(KLON) :: ZCAPE
7451 REAL,
DIMENSION(KLON) :: ZTIMEC
7452 REAL,
DIMENSION(KLON,KLEV):: ZTIMC
7454 REAL,
DIMENSION(KLON) :: ZTHLCL
7455 REAL,
DIMENSION(KLON) :: ZRVLCL
7456 REAL,
DIMENSION(KLON) :: ZZLCL
7457 REAL,
DIMENSION(KLON) :: ZTLCL
7458 REAL,
DIMENSION(KLON) :: ZTELCL
7459 REAL,
DIMENSION(KLON) :: ZTHEUL
7460 REAL,
DIMENSION(KLON) :: ZTHES1, ZTHES2
7461 REAL,
DIMENSION(KLON,KLEV) :: ZTHMFIN, ZTHMFOUT, ZRWMFIN, ZRWMFOUT
7462 REAL,
DIMENSION(KLON,KLEV) :: ZRCMFIN, ZRCMFOUT, ZRIMFIN, ZRIMFOUT
7464 REAL,
DIMENSION(KLON) :: ZPI
7465 REAL,
DIMENSION(KLON) :: ZLV
7466 REAL,
DIMENSION(KLON) :: ZLS
7467 REAL,
DIMENSION(KLON) :: ZCPH
7468 INTEGER,
DIMENSION(KLON) :: ITSTEP
7469 INTEGER,
DIMENSION(KLON) :: ICOUNT
7470 INTEGER,
DIMENSION(KLON) :: ILCL
7471 INTEGER,
DIMENSION(KLON) :: IWORK1
7472 REAL,
DIMENSION(KLON) :: ZWORK1, ZWORK2, ZWORK3, ZWORK4, ZWORK5
7473 LOGICAL,
DIMENSION(KLON) :: GWORK1, GWORK3
7474 LOGICAL,
DIMENSION(KLON,KLEV) :: GWORK4
7492 gwork4(:,:) = .
false.
7502 WHERE( .NOT. otrig1(:) ) zwork5(:) = 0.
7512 jkmax = maxval( kctl(:) )
7518 zumf(:,:) = pumf(:,:)
7519 zuer(:,:) = puer(:,:)
7520 zudr(:,:) = pudr(:,:)
7532 jkp = minval( kdpl(:) )
7535 IF( jk > kdpl(ji) .AND. jk <= iwork1(ji) )
THEN
7536 zwork1(ji) = plmass(ji,jk) / ( ( puer(ji,jk) + 1.e-5 ) * ptimec(ji) )
7537 zadjmax(ji) = min( zadjmax(ji), zwork1(ji) )
7543 gwork1(:) = otrig1(:)
7547 zthlc(:,jk) = pthl(:,jk)
7548 prwc(:,jk) = prw(:,jk)
7549 prcc(:,jk) = prc(:,jk)
7550 pric(:,jk) = pri(:,jk)
7551 pthc(:,jk) = pth(:,jk)
7559 ztimec(:) = ptimec(:)
7560 gwork4(:,:) = spread( gwork1(:), dim=2, ncopies=iks )
7561 WHERE( gwork4(:,:) ) pwsub(:,:) = 0.
7564 DO jk = ikb + 1, jkmax
7565 jkp = max( ikb + 1, jk - 1 )
7566 WHERE ( gwork1(:) .AND. jk <= kctl(:) )
7574 zwork1(:) = - ( puer(:,jkp) - pudr(:,jkp) ) / plmass(:,jkp)
7576 pwsub(:,jk) = pwsub(:,jkp) - pdpres(:,jk-1) * zwork1(:)
7585 zwork1(:) =
xstabt * pdpres(:,jkp) / ( abs( pwsub(:,jk) ) + 1.e-10 )
7587 ztimec(:) = min( ztimec(:), zwork1(:) )
7590 zomg(:,jk) = pwsub(:,jk) * pdxdy(:) /
xg
7595 WHERE( gwork4(:,:) )
7596 zthlc(:,:) = pthl(:,:)
7597 prwc(:,:) = prw(:,:)
7598 prcc(:,:) = prc(:,:)
7599 pric(:,:) = pri(:,:)
7600 pthc(:,:) = pth(:,:)
7611 zwork1(ji) = pudr(ji,jk) * pdpres(ji,jk) / ( plmass(ji,jk) + .1 ) &
7614 WHERE( gwork1(:) .AND. abs( zwork1(:) ) - .01 > 0. )
7620 pwsub(:,jk) = pwsub(:,jk) * zwork5(:)
7622 gwork4(:,1:ikb) = .
false.
7623 gwork4(:,iks) = .
false.
7625 itstep(:) = int( ptimec(:) / ztimec(:) ) + 1
7626 ztimec(:) = ptimec(:) /
REAL( ITSTEP(:) )
7628 ztimc(:,:)= spread( ztimec(:), dim=2, ncopies=iks )
7633 kftsteps = maxval( itstep(:) )
7634 DO jstep = 1, kftsteps
7636 icount(:) = icount(:) + 1
7638 gwork3(:) = itstep(:) >= icount(:) .AND. gwork1(:)
7654 DO jk = ikb + 1, jkmax
7655 gwork4(:,jk) = gwork3(:) .AND. jk <= kctl(:)
7656 jkp = max( ikb + 1, jk - 1 )
7658 IF ( gwork3(ji) )
THEN
7660 zwork1(ji) = sign( 1., zomg(ji,jk) )
7661 zwork2(ji) = 0.5 * ( 1. + zwork1(ji) )
7662 zwork1(ji) = 0.5 * ( 1. - zwork1(ji) )
7663 zthmfin(ji,jk) = - zomg(ji,jk) * zthlc(ji,jkp) * zwork1(ji)
7664 zthmfout(ji,jk) = zomg(ji,jk) * zthlc(ji,jk) * zwork2(ji)
7665 zthmfin(ji,jkp) = zthmfin(ji,jkp) + zthmfout(ji,jk) * zwork2(ji)
7666 zthmfout(ji,jkp) = zthmfout(ji,jkp) + zthmfin(ji,jk) * zwork1(ji)
7667 zrwmfin(ji,jk) = - zomg(ji,jk) * prwc(ji,jkp) * zwork1(ji)
7668 zrwmfout(ji,jk) = zomg(ji,jk) * prwc(ji,jk) * zwork2(ji)
7669 zrwmfin(ji,jkp) = zrwmfin(ji,jkp) + zrwmfout(ji,jk) * zwork2(ji)
7670 zrwmfout(ji,jkp) = zrwmfout(ji,jkp) + zrwmfin(ji,jk) * zwork1(ji)
7671 zrcmfin(ji,jk) = - zomg(ji,jk) * prcc(ji,jkp) * zwork1(ji)
7672 zrcmfout(ji,jk) = zomg(ji,jk) * prcc(ji,jk) * zwork2(ji)
7673 zrcmfin(ji,jkp) = zrcmfin(ji,jkp) + zrcmfout(ji,jk) * zwork2(ji)
7674 zrcmfout(ji,jkp) = zrcmfout(ji,jkp) + zrcmfin(ji,jk) * zwork1(ji)
7675 zrimfin(ji,jk) = - zomg(ji,jk) * pric(ji,jkp) * zwork1(ji)
7676 zrimfout(ji,jk) = zomg(ji,jk) * pric(ji,jk) * zwork2(ji)
7677 zrimfin(ji,jkp) = zrimfin(ji,jkp) + zrimfout(ji,jk) * zwork2(ji)
7678 zrimfout(ji,jkp) = zrimfout(ji,jkp) + zrimfin(ji,jk) * zwork1(ji)
7684 WHERE ( gwork4(:,:) )
7693 zthlc(:,:) = zthlc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
7694 zthmfin(:,:) + pudr(:,:) * puthl(:,:) &
7695 - zthmfout(:,:) - puer(:,:) * pthl(:,:) )
7696 prwc(:,:) = prwc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
7697 zrwmfin(:,:) + pudr(:,:) * purw(:,:) &
7698 - zrwmfout(:,:) - puer(:,:) * prw(:,:) )
7699 prcc(:,:) = prcc(:,:) + ztimc(:,:) / plmass(:,:) * ( &
7700 zrcmfin(:,:) + pudr(:,:) * purc(:,:) - zrcmfout(:,:) - &
7701 puer(:,:) * prc(:,:) )
7702 pric(:,:) = pric(:,:) + ztimc(:,:) / plmass(:,:) * ( &
7703 zrimfin(:,:) + pudr(:,:) * puri(:,:) - zrimfout(:,:) - &
7704 puer(:,:) * pri(:,:) )
7717 DO jk = ikb + 1, jkmax
7719 IF( gwork1(ji) .AND. jk <= kctl(ji) )
THEN
7720 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
7721 zcph(ji) =
xcpd + prwc(ji,jk) *
xcpv
7722 zwork2(ji) = pth(ji,jk) / zpi(ji)
7726 zwork2(ji) = ( zthlc(ji,jk) + zlv(ji) * prcc(ji,jk) + zls(ji) * pric(ji,jk) &
7727 - (1. + prwc(ji,jk) ) *
xg * pz(ji,jk) ) / zcph(ji)
7728 zwork2(ji) = max( 180., min( 340., zwork2(ji) ) )
7729 pthc(ji,jk)= zwork2(ji) * zpi(ji)
7741 ppres, pthc, prwc, pz, gwork1, &
7742 zthlcl, zrvlcl, zzlcl, ztlcl, ztelcl, &
7746 ztlcl(:) = max( 230., min( 335., ztlcl(:) ) )
7747 ztelcl(:) = max( 230., min( 335., ztelcl(:) ) )
7748 zthlcl(:) = max( 230., min( 345., zthlcl(:) ) )
7749 zrvlcl(:) = max( 0., min( 1., zrvlcl(:) ) )
7756 zpi(:) = zthlcl(:) / ztlcl(:)
7757 zpi(:) = max( 0.95, min( 1.5, zpi(:) ) )
7758 zwork1(:) =
xp00 / zpi(:) ** zcpord
7761 zwork3(:) = min( .1, max( 0., zwork3(:) ) )
7764 ztheul(:) = ztlcl(:) * zpi(:) ** ( 1. - 0.28 * zrvlcl(:) ) &
7765 * exp( ( 3374.6525 / ztlcl(:) - 2.5403 ) &
7766 * zrvlcl(:) * ( 1. + 0.81 * zrvlcl(:) ) )
7769 zthes1(:) = ztelcl(:) * zpi(:) ** ( 1. - 0.28 * zwork3(:) ) &
7770 * exp( ( 3374.6525 / ztelcl(:) - 2.5403 ) &
7771 * zwork3(:) * ( 1. + 0.81 * zwork3(:) ) )
7773 DO jk = minval( ilcl(:) ), jkmax
7777 IF ( jk == ilcl(ji) ) zwork4(ji) = 0.
7782 gwork3(ji) = jk >= ilcl(ji) .AND. jk <= kctl(ji) .AND. gwork1(ji)
7784 zpi(ji) = (
xp00 / ppres(ji,jk) ) ** zrdocp
7785 zwork2(ji) = pthc(ji,jk) / zpi(ji)
7792 IF ( gwork3(ji) )
THEN
7793 zthes2(ji) = zwork2(ji) * zpi(ji) ** ( 1. - 0.28 * zwork3(ji) ) &
7794 * exp( ( 3374.6525 / zwork2(ji) - 2.5403 ) &
7795 * zwork3(ji) * ( 1. + 0.81 * zwork3(ji) ) )
7797 zwork3(ji) = pz(ji,jk) - pz(ji,jkp) * zwork4(ji) - &
7798 ( 1. - zwork4(ji) ) * zzlcl(ji)
7799 zwork1(ji) = ( 2. * ztheul(ji) ) / ( zthes1(ji) + zthes2(ji) ) - 1.
7800 zcape(ji) = zcape(ji) +
xg * zwork3(ji) * max( 0., zwork1(ji) )
7801 zthes1(ji) = zthes2(ji)
7812 zwork1(:) = max( pcape(:) - zcape(:), 0.1 * pcape(:) )
7813 zwork2(:) = zcape(:) / ( pcape(:) + 1.e-8 )
7815 gwork1(:) = zwork2(:) > 0.1 .OR. zcape(:) == 0.
7818 WHERE ( zcape(:) == 0. .AND. gwork1(:) ) zadj(:) = zadj(:) * 0.5
7819 WHERE ( zcape(:) /= 0. .AND. gwork1(:) ) &
7820 zadj(:) = zadj(:) *
xstabc * pcape(:) / ( zwork1(:) + 1.e-8 )
7821 zadj(:) = min( zadj(:), zadjmax(:) )
7829 pumf, zumf, puer, zuer, pudr, zudr )
7832 IF ( count( gwork1(:) ) == 0 )
EXIT
7841 prwc(:,jk) = max( 0., prwc(:,jk) - prcc(:,jk) - pric(:,jk) )
7848 pumf, pzumf, puer, pzuer, pudr, pzudr )
7905 INTEGER,
INTENT(IN) :: KLON
7906 INTEGER,
INTENT(IN) :: KLEV
7907 REAL,
DIMENSION(KLON),
INTENT(IN) :: PADJ
7910 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUMF
7911 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUMF
7912 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUER
7913 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUER
7914 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PUDR
7915 REAL,
DIMENSION(KLON,KLEV),
INTENT(INOUT) :: PZUDR
7920 INTEGER :: IIE, IKB, IKE
7938 DO jk = ikb + 1, ike
7939 pumf(:,jk) = pzumf(:,jk) * padj(:)
7940 puer(:,jk) = pzuer(:,jk) * padj(:)
7941 pudr(:,jk) = pzudr(:,jk) * padj(:)
subroutine convect_closure_shal(KLON, KLEV, PPRES, PDPRES, PZ, PDXDY, PLMASS, PTHL, PTH, PRW, PRC, PRI, OTRIG1, PTHC, PRWC, PRCC, PRIC, PWSUB, KLCL, KDPL, KPBL, KCTL, PUMF, PUER, PUDR, PUTHL, PURW, PURC, PURI, PCAPE, PTIMEC, KFTSTEPS)
subroutine convect_closure_adjust_shal(KLON, KLEV, PADJ, PUMF, PZUMF, PUER, PZUER, PUDR, PZUDR)
subroutine convect_satmixratio(KLON, PPRES, PT, PEW, PLV, PLS, PCPH)
INTERFACE SUBROUTINE RRTM_ECRT_140GP pth
subroutine convect_closure(KLON, KLEV, PPRES, PDPRES, PZ, PDXDY, PLMASS, PTHL, PTH, PRW, PRC, PRI, OTRIG1, PTHC, PRWC, PRCC, PRIC, PWSUB, KLCL, KDPL, KPBL, KLFS, KCTL, KML, PUMF, PUER, PUDR, PUTHL, PURW, PURC, PURI, PUPR, PDMF, PDER, PDDR, PDTHL, PDRW, PTPR, PSPR, PDTEVR, PCAPE, PTIMEC, KFTSTEPS, PDTEVRF, PPRLFLX, PPRSFLX)
subroutine convect_trigger_shal(KLON, KLEV, PPRES, PTH, PTHV, PTHES, PRV, PW, PZ, PDXDY, PTHLCL, PTLCL, PRVLCL, PWLCL, PZLCL, PTHVELCL, KLCL, KDPL, KPBL, OTRIG)
subroutine convect_closure_thrvlcl(KLON, KLEV, PPRES, PTH, PRV, PZ, OWORK1, PTHLCL, PRVLCL, PZLCL, PTLCL, PTELCL, KLCL, KDPL, KPBL)
subroutine convect_updraft_shal(KLON, KLEV, KICE, PPRES, PDPRES, PZ, PTHL, PTHV, PTHES, PRW, PTHLCL, PTLCL, PRVLCL, PWLCL, PZLCL, PTHVELCL, PMFLCL, OTRIG, KLCL, KDPL, KPBL, PUMF, PUER, PUDR, PUTHL, PUTHV, PURW, PURC, PURI, PCAPE, KCTL, KETL)
!$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 convect_downdraft(KLON, KLEV, KICE, PPRES, PDPRES, PZ, PTH, PTHES, PRW, PRC, PRI, PPREF, KLCL, KCTL, KETL, PUTHL, PURW, PURC, PURI, PDMF, PDER, PDDR, PDTHL, PDRW, PMIXF, PDTEVR, KLFS, KDBL, KML, PDTEVRF)
subroutine convect_trigger_funct(KLON, KLEV, PPRES, PTH, PTHV, PTHES, PRV, PW, PZ, PDXDY, PTHLCL, PTLCL, PRVLCL, PWLCL, PZLCL, PTHVELCL, KLCL, KDPL, KPBL, OTRIG, PCAPE)
subroutine convect_updraft(KLON, KLEV, KICE, PPRES, PDPRES, PZ, PTHL, PTHV, PTHES, PRW, PTHLCL, PTLCL, PRVLCL, PWLCL, PZLCL, PTHVELCL, PMFLCL, OTRIG, KLCL, KDPL, KPBL, PUMF, PUER, PUDR, PUTHL, PUTHV, PURW, PURC, PURI, PURR, PURS, PUPR, PUTPR, PCAPE, KCTL, KETL)
subroutine ini_convpar_shal
!$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 ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine convection(KLON, KLEV, KIDIA, KFDIA, KBDIA, KTDIA, PDTCONV, ODEEP, OSHAL, OREFRESH_ALL, ODOWN, KICE, OSETTADJ, PTADJD, PTADJS, KENSM, PPABS, PZZ, PDXDY, PT, PRV, PRC, PRI, PU, PV, PW, KCOUNT, PTTEN, PRVTEN, PRCTEN, PRITEN, PPRTEN, PPRSTEN, PUMF, PDMF, PPRLFLX, PPRSFLX, PCAPE, KCLTOP, KCLBAS, OCHTRANS, KCH1, PCH1, PCH1TEN)
subroutine convect_precip_adjust(KLON, KLEV, PPRES, PUMF, PUER, PUDR, PUPR, PUTPR, PURW, PDMF, PDER, PDDR, PDTHL, PDRW, PPREF, PTPR, PMIXF, PDTEVR, KLFS, KDBL, KLCL, KCTL, KETL, PDTEVRF)
subroutine convect_closure_adjust(KLON, KLEV, PADJ, PUMF, PZUMF, PUER, PZUER, PUDR, PZUDR, PDMF, PZDMF, PDER, PZDER, PDDR, PZDDR, PPRMELT, PZPRMELT, PDTEVR, PZDTEVR, PTPR, PZTPR, PPRLFLX, PZPRLFL, PPRSFLX, PZPRSFL)
subroutine convect_condens(KLON, KICE, PPRES, PTHL, PRW, PRCO, PRIO, PZ, OWORK1, PT, PEW, PRC, PRI, PLV, PLS, PCPH)
INTERFACE SUBROUTINE RRTM_ECRT_140GP pt
subroutine convect_mixing_funct(KLON, PMIXC, KMF, PER, PDR)
subroutine convect_deep(KLON, KLEV, KIDIA, KFDIA, KBDIA, KTDIA, PDTCONV, KICE, OREFRESH, ODOWN, OSETTADJ, PPABST, PZZ, PDXDY, PTIMEC, PTT, PRVT, PRCT, PRIT, PUT, PVT, PWT, KCOUNT, PTTEN, PRVTEN, PRCTEN, PRITEN, PPRLTEN, PPRSTEN, KCLTOP, KCLBAS, PPRLFLX, PPRSFLX, PUMF, PDMF, PCAPE, OCH1CONV, KCH1, PCH1, PCH1TEN)
subroutine convect_tstep_pref(KLON, KLEV, PU, PV, PPRES, PZ, PDXDY, KLCL, KCTL, PTIMEA, PPREF)
subroutine convect_chem_transport(KLON, KLEV, KCH, PCH1, PCH1C, KDPL, KPBL, KLCL, KCTL, KLFS, KDBL, PUMF, PUER, PUDR, PDMF, PDER, PDDR, PTIMEC, PDXDY, PMIXF, PLMASS, PWSUB, KFTSTEPS)
subroutine convect_shallow(KLON, KLEV, KIDIA, KFDIA, KBDIA, KTDIA, PDTCONV, KICE, OSETTADJ, PTADJS, PPABST, PZZ, PTT, PRVT, PRCT, PRIT, PWT, PTTEN, PRVTEN, PRCTEN, PRITEN, KCLTOP, KCLBAS, PUMF, OCH1CONV, KCH1, PCH1, PCH1TEN)