5 ! from dentener and crutzen for 5S, 160E on 100mb levels startin at 1000mb
6 REAL, PARAMETER, DIMENSION(10) :: &
7 kheti = (/4.2e-5, 3.8e-5, 1.e-5,3.e-6,4.e-6, 2.e-6,3.e-6,5.e-6,1.3e-5,1.8e-5/)
10 REAL, SAVE, DIMENSION(120) :: kheta
12 LOGICAL :: do_aerosol=.TRUE.
15 ! sticking coefficients for cloud water and cloud ice
17 REAL , PARAMETER, PRIVATE :: gammacldw = 0.05, &
18 gammacldi = 0.03 !cms check !
20 REAL , PARAMETER, PRIVATE :: rhograul = 400. ,&
23 REAL, PARAMETER, PRIVATE :: pi = 3.1415926
26 ! D_g: diffusivity of species in gas phase in m^2/s
27 REAL, PARAMETER, PRIVATE :: D_g = 0.1E-6
28 !in Match this is 1.e-5 (Schwartz ?!)
33 ! abar_c: mass mean radius for cloud drops in m
34 REAL, PARAMETER, PRIVATE :: abar_c = 10.E-6
38 ! RSTAR2 : universal gas constant in J/(kmol K)
39 REAL, PARAMETER, PRIVATE :: RSTAR2 = 8314.
42 ! parameters from Lin scheme
43 REAL , PARAMETER, PRIVATE :: xnor = 8.0e6
44 REAL , PARAMETER, PRIVATE :: xnos = 3.0e6
45 REAL , PARAMETER, PRIVATE :: xnog = 4.0e6
50 SUBROUTINE hetn2o5calc(hetn2o5, rho, T, QC, QR, QI, QS, QG, &
51 rhowater, rhosnow, M_n2o5, &
53 ids,ide, jds,jde, kds,kde, &
54 ims,ime, jms,jme, kms,kme, &
55 its,ite, jts,jte, kts,kte )
63 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , &
64 ims,ime, jms,jme, kms,kme , &
65 its,ite, jts,jte, kts,kte , &
69 REAL, DIMENSION( its:ite , kts:kte , jts:jte), &
70 INTENT(INOUT ) :: hetn2o5
74 REAL, INTENT(IN ) :: rhosnow, &
79 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
95 ! mass mean radii of the different hydrometeors
97 abar_r, abar_i, abar_s, abar_g
100 ! nu_th: thermal velocity of species in m/s
103 ! tau_Dg: gas diffusion timescale
104 ! tau_i : timescale for mass transfer across interface of hydrometeor
105 REAL :: tau_i, tau_Dg
108 ! L : water contents in cloud drops, rain drops, hail stones,...
109 ! in (cm^3 H_2O / cm^3 air)
114 REAL :: kc, kr, ki, ks, kg
122 j_loop: DO j = jts, jte
123 i_loop: DO i = its, ite
141 IF(QR(i,k,j) .GT. 1.e-12) THEN
142 tmp1=sqrt(pi*rhowater*xnor*orho/QR(i,k,j))
143 !!xlambdar1Dr(k)=sqrt(tmp1)
144 abar_r = 2./MAX(sqrt(tmp1), 1.E-8 ) !if abar is large, kt becomes small
148 !!$ IF(QI(i,k,j) .GT. 1.e-8) THEN
149 !!$ tmp1=sqrt(pi*rhoice*xnoi*orho/QI(i,k,j))
150 !!$ !!xlambdar1Di(k)=sqrt(tmp1)
151 !!$ abar_i = 2./MAX(sqrt(tmp1), 1.E-8 )
157 IF(QS(i,k,j) .GT. 1.e-12) THEN
158 tmp1=sqrt(pi*rhosnow*xnos*orho/QS(i,k,j))
159 !!xlambdar1Ds(k)=sqrt(tmp1)
160 abar_s = 2./MAX(sqrt(tmp1), 1.E-8 )
165 IF(QG(i,k,j) .GT. 1.e-12) THEN
166 tmp1=sqrt(pi*rhograul*xnog*orho/QG(i,k,j))
167 !!xlambdar1Dg(k)=sqrt(tmp1)
168 abar_g = 2./MAX(sqrt(tmp1), 1.E-8 )
174 ! calculate thermal velocity of species
175 nu_th = SQRT(8*RSTAR2*T(i,k,j)/(pi*M_n2o5))
179 ! calculate timescales
181 IF(QC(i,k,j) .GT. 1.e-12) THEN
182 tau_i = (4.*abar_c) / (3.* nu_th * gammacldw)
183 tau_Dg = (abar_c**2) / (3.* D_g)
185 L = (rho(i,k,j) / rhowater) * QC(i,k,j)
186 kc = L/(tau_i + tau_Dg)
190 IF(QR(i,k,j) .GT. 1.e-12) THEN
191 tau_i = (4.*abar_r) / (3.* nu_th * gammacldw)
192 tau_Dg = (abar_r**2) / (3.* D_g)
194 L = (rho(i,k,j) / rhowater) * QR(i,k,j)
195 kr = L/(tau_i + tau_Dg)
199 IF(QI(i,k,j) .GT. 1.e-12) THEN
200 tau_i = (4.*abar_i) / (3.* nu_th * gammacldi)
201 tau_Dg = (abar_i**2) / (3.* D_g)
203 L = (rho(i,k,j) / rhowater) * QI(i,k,j)
204 ki = L/(tau_i + tau_Dg)
208 IF(QS(i,k,j).GT. 1.e-12) THEN
209 tau_i = (4.*abar_s) / (3.* nu_th * gammacldi)
210 tau_Dg = (abar_s**2) / (3.* D_g)
212 L = (rho(i,k,j) / rhowater) * QS(i,k,j)
213 ks = L/(tau_i + tau_Dg)
217 IF(QG(i,k,j).GT. 1.e-12) THEN
218 tau_i = (4.*abar_g) / (3.* nu_th * gammacldi)
219 tau_Dg = (abar_g**2) / (3.* D_g)
221 L = (rho(i,k,j) / rhowater) * QG(i,k,j)
222 kg = L/(tau_i + tau_Dg)
227 !!HERE THE VENTILATION COEFF SHOULD BE INCLUDED AND IT PROBABLY DOES NOT HAPPEN ON ICE!!
229 !! hetn2o5(i,k,j) = kc + kr + ki + ks + kg
235 hetn2o5(i,k,j) = kc + kr + kheta(k) !!+ kg
236 !hetn2o5(i,k,j) = 0. !n2o5_test
244 END SUBROUTINE hetn2o5calc
250 !-----------------------------------------------------------------
252 SUBROUTINE hetn2o5_ini( pb, pp, z, &
253 ids, ide, jds, jde, kds, kde, &
254 ims, ime, jms, jme, kms, kme, &
255 its, ite, jts, jte, kts, kte)
264 INTEGER, INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
265 ims, ime, jms, jme, kms, kme, &
266 its, ite, jts, jte, kts, kte
269 REAL, DIMENSION( ims:ime, kms:kme, jms:jme), &
270 INTENT(IN ) :: z, pb, pp
272 REAL, DIMENSION(10) :: pin !moguntia
275 LOGICAL , EXTERNAL :: wrf_dm_on_monitor
280 REAL, DIMENSION(kms:kme) :: zloc, ploc
282 INTEGER :: k, kk, l_low, l_up
286 #define DM_BCAST_MACRO(A) CALL wrf_dm_bcast_bytes ( A , size ( A ) * RWORDSIZE )
287 IF (.NOT. do_aerosol) RETURN
289 !currently not really necessary
290 dm_on_monitor: IF ( wrf_dm_on_monitor() ) THEN
304 zloc(k) = z(its,k,jts)
305 ploc(k) = pb(its,k,jts) + pp(its,k,jts)
307 IF ( zloc(k) .GT. 1.e6 .OR. zloc(k) .LT. 0. ) THEN
308 CALL wrf_error_fatal ("STOP: hetn2o5_ini")
314 IF ( ploc(k) .GT. 1.e5 ) THEN
318 l_low = 11.-CEILING(ploc(k)/1.e4)
322 dp=ploc(k)/100. - pin(l_up)
323 m=(kheti(l_low)-kheti(l_up))/100.
324 kheta(k)=kheti(l_up) + m*dp
329 !print *, ploc(k), pin(l_low), pin(l_up)
330 !print *, " ", kheti(l_low),kheti(l_up), kheta(k)
344 DM_BCAST_MACRO( kheta )
348 END SUBROUTINE hetn2o5_ini
351 END MODULE module_hetn2o5