4 nstep, julien, gmtime, debutphy, &
6 paprs,
pplay, pmfu, pmfd, &
7 pen_u, pde_u, pen_d, pde_d, &
8 cdragh, coefh, fm_therm, entr_therm,&
9 yu1, yv1, ftsol, pctsrf, &
12 frac_impa,frac_nucl,beta_fisrt,beta_v1, &
14 sh, rh, cldfra, rneb, &
15 diafra, cldliq, itop_con, ibas_con, &
16 pmflxr, pmflxs, prfl, psfl, &
18 phi2, d1a, dam, sij, &
19 wdtraina, wdtrainm,
sigd, clw,elij, &
20 evap, ep, epmlmmm, eplamm, &
21 dnwd, aerosol_couple, flxmass_w, &
22 tau_aero, piz_aero, cg_aero, ccm, &
51 include
"dimensions.h"
65 INTEGER,
INTENT(IN) :: nstep
66 INTEGER,
INTENT(IN) :: julien
67 REAL,
INTENT(IN) :: gmtime
69 LOGICAL,
INTENT(IN) :: debutphy
70 LOGICAL,
INTENT(IN) :: lafin
72 REAL,
DIMENSION(klon),
INTENT(IN) ::
xlat
73 REAL,
DIMENSION(klon),
INTENT(IN) ::
xlon
77 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: t_seri
78 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
u
79 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
v
80 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: sh
81 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: rh
82 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
83 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
pplay
84 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pphi
85 REAL,
DIMENSION(klon),
INTENT(IN) :: pphis
86 REAL,
DIMENSION(klev),
INTENT(IN) ::
presnivs
87 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: cldliq
88 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: cldfra
89 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: diafra
90 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: rneb
93 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: beta_fisrt
94 REAL,
DIMENSION(klon,klev),
INTENT(out) :: beta_v1
97 INTEGER,
DIMENSION(klon),
INTENT(IN) :: itop_con
98 INTEGER,
DIMENSION(klon),
INTENT(IN) :: ibas_con
99 REAL,
DIMENSION(klon),
INTENT(IN) :: albsol
103 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(IN) :: d_tr_dyn
107 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmfu
108 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pmfd
109 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pen_u
110 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pde_u
111 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pen_d
112 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pde_d
115 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: pmflxr, pmflxs
116 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: prfl, psfl
118 LOGICAL,
INTENT(IN) :: aerosol_couple
119 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: flxmass_w
120 REAL,
DIMENSION(klon,klev,9,2),
INTENT(IN) :: tau_aero
121 REAL,
DIMENSION(klon,klev,9,2),
INTENT(IN) :: piz_aero
122 REAL,
DIMENSION(klon,klev,9,2),
INTENT(IN) :: cg_aero
123 CHARACTER(len=4),
DIMENSION(9),
INTENT(IN) :: rfname
124 REAL,
DIMENSION(klon,klev,2),
INTENT(IN) :: ccm
126 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: da
127 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN):: phi
129 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: d1a,dam
130 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: phi2
132 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtraina
133 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: wdtrainm
134 REAL,
DIMENSION(klon),
INTENT(IN) ::
sigd
136 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: evap
137 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: ep
138 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: sij
139 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: elij
140 REAL,
DIMENSION(klon,klev,klev),
INTENT(IN) :: epmlmmm
141 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: eplamm
142 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: clw
146 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: mp
147 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: upwd
148 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: dnwd
152 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: fm_therm
153 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: entr_therm
158 REAL,
DIMENSION(klon),
INTENT(IN) :: cdragh
159 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coefh
160 REAL,
DIMENSION(klon),
INTENT(IN) :: ustar,u10m,v10m
161 REAL,
DIMENSION(klon),
INTENT(IN) :: yu1
162 REAL,
DIMENSION(klon),
INTENT(IN) :: yv1
169 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: frac_impa
170 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: frac_nucl
173 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: ftsol
174 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: pctsrf
179 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(INOUT) :: tr_seri
180 REAL,
DIMENSION(klon,klev) :: sourcebe
191 REAL,
DIMENSION(:,:),
ALLOCATABLE,
SAVE :: source
200 INTEGER,
SAVE :: nid_tra
204 LOGICAL,
PARAMETER :: ok_sync=.true.
205 CHARACTER(len=20),
save :: chtratimestep,chtratimestep_omp
210 LOGICAL,
DIMENSION(:),
ALLOCATABLE,
SAVE :: aerosol
212 REAL,
DIMENSION(klon,klev) :: delp
216 REAL,
DIMENSION(klon,klev) :: d_tr
217 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_cl
218 REAL,
DIMENSION(klon,nbtr) :: d_tr_dry
219 REAL,
DIMENSION(klon,nbtr) :: flux_tr_dry
220 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_dec
221 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_cv
223 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_insc
224 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_bcscav
225 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_evapls
226 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_ls
227 REAL,
DIMENSION(klon,nbtr) :: qprls
228 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_trsp
229 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_sscav
230 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_sat
231 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_uscav
232 REAL,
DIMENSION(klon,klev,nbtr) :: qpr,qdi
233 REAL,
DIMENSION(klon,klev,nbtr) :: qpa,qmel
234 REAL,
DIMENSION(klon,klev,nbtr) :: qtrdi,dtrcvma
235 REAL,
DIMENSION(klon,klev) :: mint
236 REAL,
DIMENSION(klon,klev,nbtr) :: zmfd1a
237 REAL,
DIMENSION(klon,klev,nbtr) :: zmfdam
238 REAL,
DIMENSION(klon,klev,nbtr) :: zmfphi2
240 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_th
241 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_lessi_impa
242 REAL,
DIMENSION(klon,klev,nbtr) :: d_tr_lessi_nucl
246 REAL,
DIMENSION(klon,klev,nbtr) :: flestottr
247 REAL,
DIMENSION(klon,klev) ::
zmasse
248 REAL,
DIMENSION(klon,klev) :: ztra_th
250 REAL,
DIMENSION(klon,klev) :: zrho
251 REAL,
DIMENSION(klon,klev) :: zdz
252 REAL :: evaplsc,dx,
beta
253 REAL,
DIMENSION(klon) :: his_dh
255 REAL :: ql_incloud_ref
259 LOGICAL,
SAVE :: couchelimite=.true.
260 LOGICAL,
SAVE :: convection=.true.
261 LOGICAL,
SAVE :: lessivage
264 CHARACTER(len=8),
DIMENSION(nbtr) :: solsym
266 INTEGER,
SAVE :: iflag_lscav_omp,iflag_lscav
267 LOGICAL,
SAVE :: convscav_omp,convscav
286 d_tr_bcscav(
i,
k,
it)=0.
287 d_tr_evapls(
i,
k,
it)=0.
292 d_tr_sscav(
i,
k,
it)=0.
294 d_tr_uscav(
i,
k,
it)=0.
295 d_tr_lessi_impa(
i,
k,
it)=0.
296 d_tr_lessi_nucl(
i,
k,
it)=0.
312 chtratimestep_omp=
'DefFreq'
313 CALL
getin(
'tra_time_step',chtratimestep_omp)
316 chtratimestep=chtratimestep_omp
317 IF (chtratimestep .NE.
'DefFreq')
THEN
329 call
getin(
'convscav', convscav_omp)
332 convscav=convscav_omp
333 print*,
'phytrac passage dans routine conv avec lessivage', convscav
343 call
getin(
'iflag_lscav', iflag_lscav_omp)
346 iflag_lscav=iflag_lscav_omp
348 SELECT CASE(iflag_lscav)
350 print*,
'Large scale scavenging: none'
352 print*,
'Large scale scavenging: C. Genthon, Tellus(1992), 44B, 371-389'
354 print*,
'Large scale scavenging: C. Genthon, modified P. Heinrich'
356 print*,
'Large scale scavenging: M. Shekkar Reddy and O. Boucher, JGR(2004), 109, D14202'
358 print*,
'Large scale scavenging: Reddy and Boucher, modified R. Pilon'
361 WRITE(*,*)
'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',
pdtphys,
'ecrit_tra (sec) = ',ecrit_tra
362 ALLOCATE( source(klon,nbtr), stat=ierr)
363 IF (ierr /= 0) CALL
abort_gcm(
'phytrac',
'pb in allocation 1',1)
365 ALLOCATE( aerosol(nbtr), stat=ierr)
366 IF (ierr /= 0) CALL
abort_gcm(
'phytrac',
'pb in allocation 2',1)
370 SELECT CASE(type_trac)
372 CALL
traclmdz_init(pctsrf,
xlat,
xlon, ftsol, tr_seri, t_seri,
pplay, sh,
pdtphys, aerosol, lessivage)
383 include
"ini_histrac.h"
394 IF (id_be .GT. 0)
THEN
397 sourcebe(
i,
k)=srcbe(
i,
k)
406 SELECT CASE(type_trac)
410 cdragh, coefh, yu1, yv1, ftsol, pctsrf,
xlat,
xlon,couchelimite,sh, &
411 rh, pphi, ustar, u10m, v10m, &
413 tr_seri, source, solsym, d_tr_cl,d_tr_dec,
zmasse)
418 nstep, julien, gmtime, lafin, &
420 pmfu, ftsol, pctsrf, pphis, &
421 pphi, albsol, sh, rh, &
422 cldfra, rneb, diafra, cldliq, &
423 itop_con, ibas_con, pmflxr, pmflxs, &
424 prfl, psfl, aerosol_couple, flxmass_w, &
425 tau_aero, piz_aero, cg_aero, ccm, &
427 tr_seri, source, solsym)
434 t_seri,
pplay, paprs, sh , &
444 IF ( conv_flg(
it) == 0 ) cycle
449 CALL
nflxtr(
pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
450 pplay, paprs, tr_seri(:,:,
it), d_tr_cv(:,:,
it))
454 if (convscav.and.aerosol(
it))
then
457 sigd,sij,clw,elij,epmlmmm,eplamm, &
458 pmflxr,pmflxs,evap,t_seri,wdtraina,wdtrainm, &
459 paprs,
it,tr_seri,upwd,dnwd,itop_con,ibas_con, &
460 d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qdi,qpr,&
461 qpa,qmel,qtrdi,dtrcvma,mint, &
462 zmfd1a,zmfphi2,zmfdam)
476 CALL
minmaxqfi(tr_seri(:,:,
it),0.,1.e33,
'convection it = '//solsym(
it))
489 tr_seri(
i,
k,
it)=max(tr_seri(
i,
k,
it),0.)
490 tr_seri(
i,
k,
it)=min(tr_seri(
i,
k,
it),1.e10)
501 fm_therm,entr_therm,
zmasse, &
502 tr_seri(1:klon,1:
klev,
it),d_tr,ztra_th)
508 tr_seri(
i,
k,
it)=max(tr_seri(
i,
k,
it)+d_tr(
i,
k),0.)
519 IF (couchelimite)
THEN
523 delp(
i,
k) = paprs(
i,
k)-paprs(
i,
k+1)
529 IF( pbl_flg(
it) /= 0 )
THEN
532 tr_seri(:,:,
it), source(:,
it), &
533 paprs,
pplay, delp, &
534 d_tr_cl(:,:,
it),d_tr_dry(:,
it),flux_tr_dry(:,
it))
553 ql_incloud_ref = 10.e-4
554 ql_incloud_ref = 5.e-4
558 ql_incl = ql_incloud_ref
561 IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4)
THEN
570 beta_v1,
pplay,paprs,t_seri,tr_seri,d_tr_insc, &
571 d_tr_bcscav,d_tr_evapls,qprls)
580 CALL
minmaxqfi(tr_seri(:,:,
it),0.,1.e33,
'lsc scav it = '//solsym(
it))
583 ELSE IF (iflag_lscav .EQ. 2)
THEN
586 d_tr_lessi_nucl(:,:,:) = 0.
587 d_tr_lessi_impa(:,:,:) = 0.
588 flestottr(:,:,:) = 0.
591 IF (aerosol(
it))
THEN
597 zdz(
i,
k)=(paprs(
i,
k)-paprs(
i,
k+1))/zrho(
i,
k)/rg
607 evaplsc = prfl(
i,
k) - prfl(
i,
k+1) + psfl(
i,
k) - psfl(
i,
k+1)
609 IF ( evaplsc .LT.0..and.abs(prfl(
i,
k+1)+psfl(
i,
k+1)).gt.1.e-10)
THEN
610 evaplsc = (-evaplsc)/(prfl(
i,
k+1)+psfl(
i,
k+1))
613 d_tr_evapls(
i,
k,
it)=0.5*evaplsc*(d_tr_lessi_nucl(
i,
k+1,
it) &
614 +d_tr_lessi_impa(
i,
k+1,
it))
617 if ((prfl(
i,
k)+psfl(
i,
k)).lt.1.e-10)
THEN
621 his_dh(
i)=(1.-
beta)*his_dh(
i)
622 d_tr_evapls(
i,
k,
it)=dx
624 d_tr_ls(
i,
k,
it)=tr_seri(
i,
k,
it)*(frac_impa(
i,
k)*frac_nucl(
i,
k)-1.) &
628 d_tr_lessi_nucl(
i,
k,
it) = d_tr_lessi_nucl(
i,
k,
it) + &
629 ( 1 - frac_nucl(
i,
k) )*tr_seri(
i,
k,
it)
630 d_tr_lessi_impa(
i,
k,
it) = d_tr_lessi_impa(
i,
k,
it) + &
631 ( 1 - frac_impa(
i,
k) )*tr_seri(
i,
k,
it)
634 flestottr(
i,
k,
it) = flestottr(
i,
k,
it) - &
635 ( d_tr_lessi_nucl(
i,
k,
it) + &
636 d_tr_lessi_impa(
i,
k,
it) ) * &
637 ( paprs(
i,
k)-paprs(
i,
k+1) ) / &
651 ELSE IF (iflag_lscav .EQ. 1)
THEN
654 d_tr_lessi_nucl(:,:,:) = 0.
655 d_tr_lessi_impa(:,:,:) = 0.
656 flestottr(:,:,:) = 0.
664 IF (aerosol(
it))
THEN
667 d_tr_lessi_nucl(
i,
k,
it) = d_tr_lessi_nucl(
i,
k,
it) + &
668 ( 1 - frac_nucl(
i,
k) )*tr_seri(
i,
k,
it)
669 d_tr_lessi_impa(
i,
k,
it) = d_tr_lessi_impa(
i,
k,
it) + &
670 ( 1 - frac_impa(
i,
k) )*tr_seri(
i,
k,
it)
675 flestottr(
i,
k,
it) = flestottr(
i,
k,
it) - &
676 ( d_tr_lessi_nucl(
i,
k,
it) + &
677 d_tr_lessi_impa(
i,
k,
it) ) * &
678 ( paprs(
i,
k)-paprs(
i,
k+1) ) / &
683 tr_seri(
i,
k,
it)=tr_seri(
i,
k,
it)*frac_impa(
i,
k)*frac_nucl(
i,
k)
698 include
"write_histrac.h"