3 SUBROUTINE lsc_scav(pdtime,it,iflag_lscav, &
7 oliq,flxr,flxs,rneb,beta_fisrt, &
9 d_tr_bcscav,d_tr_evap,qprls)
29 REAL,
INTENT(IN) :: pdtime
30 INTEGER,
INTENT(IN) :: it
31 INTEGER,
INTENT(IN) :: iflag_lscav
33 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: flxr
34 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: flxs
35 REAL,
INTENT(IN) :: oliq
36 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: rneb
37 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pplay
38 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
39 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: t
41 LOGICAL,
DIMENSION(nbtr),
INTENT(IN) :: aerosol
42 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(IN) :: tr_seri
43 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: beta_fisrt
44 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: beta_v1
45 REAL,
DIMENSION(klon) :: his_dh
46 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: d_tr_insc
47 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: d_tr_bcscav
48 REAL,
DIMENSION(klon,klev,nbtr),
INTENT(OUT) :: d_tr_evap
49 REAL,
DIMENSION(klon,nbtr),
INTENT(OUT) :: qPrls
51 REAL,
DIMENSION(klon,klev) :: dxbc
55 LOGICAL,
SAVE :: debut=.
true.
58 REAL,
PARAMETER :: henry=1.4
60 REAL,
PARAMETER :: kk=2900.
65 REAL,
DIMENSION(klon,klev) :: scav
66 REAL,
DIMENSION(klon,klev) :: zrho
67 REAL,
DIMENSION(klon,klev) :: zdz
68 REAL,
DIMENSION(klon,klev) :: zmass
72 REAL,
PARAMETER :: frac_gas=1.0
74 REAL,
DIMENSION(klon,klev) :: deltaP
75 REAL,
DIMENSION(klon,klev) :: beta_ev
80 REAL,
SAVE :: frac_fine_scav
81 REAL,
SAVE :: frac_coar_scav
91 REAL :: pr, ps, ice, water
118 OPEN(99,file=
'lsc_scav_param.data',status=
'old', &
119 form=
'formatted',
err=9999)
120 READ(99,*,end=9998) alpha_r
121 READ(99,*,end=9998) alpha_s
122 READ(99,*,end=9998) r_r
123 READ(99,*,end=9998) r_s
124 READ(99,*,end=9998) frac_fine_scav
125 READ(99,*,end=9998) frac_coar_scav
126 READ(99,*,end=9998) frac_aer
131 print*,
'alpha_r',alpha_r
132 print*,
'alpha_s',alpha_s
135 print*,
'frac_fine_scav',frac_fine_scav
136 print*,
'frac_coar_scav',frac_coar_scav
137 print*,
'frac_aer ev',frac_aer
163 d_tr_bcscav(i,k,it)=0.
171 zrho(i,k)=pplay(i,k)/t(i,k)/rd
172 zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/
rg
173 zmass(i,k)=(paprs(i,k)-paprs(i,k+1))/
rg
181 IF (aerosol(it))
THEN
190 IF (aerosol(it))
THEN
194 scav(i,k)=frac_fine_scav
200 henry_t=henry*exp(-kk*(1./298.-1./t(i,k)))
201 f_a=henry_t/101.325*
r*t(i,k)*oliq*zrho(i,k)/
rho_water
202 scav(i,k)=f_a/(1.+f_a)
211 if (iflag_lscav .eq. 4)
then
212 beta=beta_fisrt(i,k)*rneb(i,k)
214 beta=flxr(i,k)-flxr(i,k+1)+flxs(i,k)-flxs(i,k+1)
216 beta=beta/zmass(i,k)/oliq
221 dxin=tr_seri(i,k,it)*(exp(-scav(i,k)*beta*pdtime)-1.)
223 his_dh(i)=his_dh(i)-dxin*zmass(i,k)/pdtime
224 d_tr_insc(i,k,it)=dxin
229 IF (.NOT.aerosol(it))
THEN
231 d_tr_bcscav(i,k,it)=0.
233 pr=0.5*(flxr(i,k)+flxr(i,k+1))
234 ps=0.5*(flxs(i,k)+flxs(i,k+1))
236 ice=ps*alpha_s/r_s/rho_ice
237 dxbc(i,k)=-3./4.*tr_seri(i,k,it)*pdtime*(water+ice)
239 his_dh(i)=his_dh(i)-dxbc(i,k)*zmass(i,k)/pdtime
240 d_tr_bcscav(i,k,it)=dxbc(i,k)
244 deltap(i,k)=flxr(i,k+1)+flxs(i,k+1)-flxr(i,k)-flxs(i,k)
245 deltap(i,k)=max(deltap(i,k),0.)
247 if(flxr(i,k+1)+flxs(i,k+1).gt.1.e-16)
then
248 beta_ev(i,k)=deltap(i,k)/(flxr(i,k+1)+flxs(i,k+1))
253 beta_ev(i,k)=max(min(1.,beta_ev(i,k)),0.)
257 if(abs(1-(1-frac_ev)*beta_ev(i,k)).gt.1.e-16)
then
260 dxev=frac_ev*beta_ev(i,k)*his_dh(i) *pdtime/(zmass(i,k)) &
261 /(1 -(1-frac_ev)*beta_ev(i,k))
262 his_dh(i)=his_dh(i)*(1 - frac_ev*beta_ev(i,k) / (1 -(1-frac_ev)*beta_ev(i,k)))
265 dxev=his_dh(i) *pdtime/(zmass(i,k))
276 d_tr_evap(i,k,it)=dxev
283 qprls(i,it) = his_dh(i)/max(flxr(i,1)+flxs(i,1),1.e-16)
subroutine lsc_scav(pdtime, it, iflag_lscav,
!$Id mode_top_bound COMMON comconstr r
!$Id!INTEGER ih2o2 REAL rho_water
subroutine err(ierr, typ, nam)
!$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 pplay
!$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 &zphi geo500!IM on interpole a chaque pas de temps le paprs
!$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