1 | !WRF:MODEL_LAYER:PHYSICS |
---|
2 | ! |
---|
3 | |
---|
4 | MODULE module_mp_gsfcgce |
---|
5 | |
---|
6 | USE module_wrf_error |
---|
7 | |
---|
8 | !JJS 1/3/2008 vvvvv |
---|
9 | |
---|
10 | ! common /bt/ |
---|
11 | REAL, PRIVATE :: rd1, rd2, al, cp |
---|
12 | |
---|
13 | ! common /cont/ |
---|
14 | REAL, PRIVATE :: c38, c358, c610, c149, & |
---|
15 | c879, c172, c409, c76, & |
---|
16 | c218, c580, c141 |
---|
17 | ! common /b3cs/ |
---|
18 | REAL, PRIVATE :: ag, bg, as, bs, & |
---|
19 | aw, bw, bgh, bgq, & |
---|
20 | bsh, bsq, bwh, bwq |
---|
21 | |
---|
22 | ! common /size/ |
---|
23 | REAL, PRIVATE :: tnw, tns, tng, & |
---|
24 | roqs, roqg, roqr |
---|
25 | |
---|
26 | ! common /bterv/ |
---|
27 | REAL, PRIVATE :: zrc, zgc, zsc, & |
---|
28 | vrc, vgc, vsc |
---|
29 | |
---|
30 | ! common /bsnw/ |
---|
31 | REAL, PRIVATE :: alv, alf, als, t0, t00, & |
---|
32 | avc, afc, asc, rn1, bnd1, & |
---|
33 | rn2, bnd2, rn3, rn4, rn5, & |
---|
34 | rn6, rn7, rn8, rn9, rn10, & |
---|
35 | rn101,rn10a, rn11,rn11a, rn12 |
---|
36 | |
---|
37 | REAL, PRIVATE :: rn14, rn15,rn15a, rn16, rn17, & |
---|
38 | rn17a,rn17b,rn17c, rn18, rn18a, & |
---|
39 | rn19,rn19a,rn19b, rn20, rn20a, & |
---|
40 | rn20b, bnd3, rn21, rn22, rn23, & |
---|
41 | rn23a,rn23b, rn25,rn30a, rn30b, & |
---|
42 | rn30c, rn31, beta, rn32 |
---|
43 | |
---|
44 | REAL, PRIVATE, DIMENSION( 31 ) :: rn12a, rn12b, rn13, rn25a |
---|
45 | |
---|
46 | ! common /rsnw1/ |
---|
47 | REAL, PRIVATE :: rn10b, rn10c, rnn191, rnn192, rn30, & |
---|
48 | rnn30a, rn33, rn331, rn332 |
---|
49 | |
---|
50 | ! |
---|
51 | REAL, PRIVATE, DIMENSION( 31 ) :: aa1, aa2 |
---|
52 | DATA aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, & |
---|
53 | .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, & |
---|
54 | .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, & |
---|
55 | .1725e-4, .9175e-5, .4412e-5, .2252e-5, .9115e-6, & |
---|
56 | .4876e-6, .3473e-6, .4758e-6, .6306e-6, .8573e-6, & |
---|
57 | .7868e-6, .7192e-6, .6513e-6, .5956e-6, .5333e-6, & |
---|
58 | .4834e-6/ |
---|
59 | DATA aa2/.4006, .4831, .5320, .5307, .5319, & |
---|
60 | .5249, .4888, .3894, .4047, .4318, & |
---|
61 | .4771, .5183, .5463, .5651, .5813, & |
---|
62 | .5655, .5478, .5203, .4906, .4447, & |
---|
63 | .4126, .3960, .4149, .4320, .4506, & |
---|
64 | .4483, .4460, .4433, .4413, .4382, & |
---|
65 | .4361/ |
---|
66 | |
---|
67 | !JJS 1/3/2008 ^^^^^ |
---|
68 | |
---|
69 | CONTAINS |
---|
70 | |
---|
71 | !------------------------------------------------------------------- |
---|
72 | ! NASA/GSFC GCE |
---|
73 | ! Tao et al, 2001, Meteo. & Atmos. Phy., 97-137 |
---|
74 | !------------------------------------------------------------------- |
---|
75 | ! SUBROUTINE gsfcgce( th, th_old, & |
---|
76 | SUBROUTINE gsfcgce( th, & |
---|
77 | qv, ql, & |
---|
78 | qr, qi, & |
---|
79 | qs, & |
---|
80 | ! qvold, qlold, & |
---|
81 | ! qrold, qiold, & |
---|
82 | ! qsold, & |
---|
83 | rho, pii, p, dt_in, z, & |
---|
84 | ht, dz8w, grav, & |
---|
85 | rhowater, rhosnow, & |
---|
86 | itimestep, & |
---|
87 | ids,ide, jds,jde, kds,kde, & ! domain dims |
---|
88 | ims,ime, jms,jme, kms,kme, & ! memory dims |
---|
89 | its,ite, jts,jte, kts,kte, & ! tile dims |
---|
90 | rainnc, rainncv, & |
---|
91 | snownc, snowncv, sr, & |
---|
92 | graupelnc, graupelncv, & |
---|
93 | ! f_qg, qg, pgold & |
---|
94 | f_qg, qg, & |
---|
95 | ihail, ice2 & |
---|
96 | ) |
---|
97 | |
---|
98 | !------------------------------------------------------------------- |
---|
99 | IMPLICIT NONE |
---|
100 | !------------------------------------------------------------------- |
---|
101 | ! |
---|
102 | ! JJS 2/15/2005 |
---|
103 | ! |
---|
104 | INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , & |
---|
105 | ims,ime, jms,jme, kms,kme , & |
---|
106 | its,ite, jts,jte, kts,kte |
---|
107 | INTEGER, INTENT(IN ) :: itimestep, ihail, ice2 |
---|
108 | |
---|
109 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
110 | INTENT(INOUT) :: & |
---|
111 | th, & |
---|
112 | qv, & |
---|
113 | ql, & |
---|
114 | qr, & |
---|
115 | qi, & |
---|
116 | qs, & |
---|
117 | qg |
---|
118 | ! |
---|
119 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
120 | INTENT(IN ) :: & |
---|
121 | ! th_old, & |
---|
122 | ! qvold, & |
---|
123 | ! qlold, & |
---|
124 | ! qrold, & |
---|
125 | ! qiold, & |
---|
126 | ! qsold, & |
---|
127 | ! qgold, & |
---|
128 | rho, & |
---|
129 | pii, & |
---|
130 | p, & |
---|
131 | dz8w, & |
---|
132 | z |
---|
133 | |
---|
134 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
135 | INTENT(INOUT) :: rainnc, & |
---|
136 | rainncv, & |
---|
137 | snownc, & |
---|
138 | snowncv, & |
---|
139 | sr, & |
---|
140 | graupelnc, & |
---|
141 | graupelncv |
---|
142 | |
---|
143 | |
---|
144 | |
---|
145 | |
---|
146 | REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: ht |
---|
147 | |
---|
148 | REAL, INTENT(IN ) :: dt_in, & |
---|
149 | grav, & |
---|
150 | rhowater, & |
---|
151 | rhosnow |
---|
152 | |
---|
153 | LOGICAL, INTENT(IN), OPTIONAL :: F_QG |
---|
154 | |
---|
155 | ! LOCAL VAR |
---|
156 | |
---|
157 | |
---|
158 | !jjs INTEGER :: min_q, max_q |
---|
159 | |
---|
160 | !jjs REAL, DIMENSION( its:ite , jts:jte ) & |
---|
161 | !jjs :: rain, snow, graupel,ice |
---|
162 | |
---|
163 | ! |
---|
164 | ! INTEGER :: IHAIL, itaobraun, ice2, istatmin, new_ice_sat, id |
---|
165 | INTEGER :: itaobraun, istatmin, new_ice_sat, id |
---|
166 | |
---|
167 | INTEGER :: i, j, k |
---|
168 | INTEGER :: iskip, ih, icount, ibud, i12h |
---|
169 | REAL :: hour |
---|
170 | REAL , PARAMETER :: cmin=1.e-20 |
---|
171 | REAL :: dth, dqv, dqrest, dqall, dqall1, rhotot, a1, a2 |
---|
172 | REAL, DIMENSION( its:ite , kts:kte , jts:jte ) :: & |
---|
173 | th1, qv1, ql1, qr1, qi1, qs1, qg1 |
---|
174 | |
---|
175 | LOGICAL :: flag_qg |
---|
176 | |
---|
177 | ! |
---|
178 | !c ihail = 0 for graupel, for tropical region |
---|
179 | !c ihail = 1 for hail, for mid-lat region |
---|
180 | |
---|
181 | ! itaobraun: 0 for Tao's constantis, 1 for Braun's constants |
---|
182 | !c if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6 |
---|
183 | !c if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8 |
---|
184 | itaobraun = 1 |
---|
185 | |
---|
186 | !c ice2 = 0 for 3 ice --- ice, snow and graupel/hail |
---|
187 | !c ice2 = 1 for 2 ice --- ice and snow only |
---|
188 | !c ice2 = 2 for 2 ice --- ice and graupel only, use ihail = 0 only |
---|
189 | |
---|
190 | i12h=int(86400./dt_in) |
---|
191 | ! if (itimestep.eq.1.or.itimestep.eq.1441) then |
---|
192 | ! if (mod(itimestep,1440).eq.1) then |
---|
193 | if (mod(itimestep,i12h).eq.1) then |
---|
194 | write(6,*) 'ihail=',ihail,' ice2=',ice2 |
---|
195 | if (ice2.eq.0) then |
---|
196 | write(6,*) 'Running 3-ice scheme in GSFCGCE with' |
---|
197 | if (ihail.eq.0) then |
---|
198 | write(6,*) ' ice, snow and graupel' |
---|
199 | else if (ihail.eq.1) then |
---|
200 | write(6,*) ' ice, snow and hail' |
---|
201 | else |
---|
202 | write(6,*) 'ihail has to be either 1 or 0' |
---|
203 | stop |
---|
204 | endif !ihail |
---|
205 | else if (ice2.eq.1) then |
---|
206 | write(6,*) 'Running 2-ice scheme in GSFCGCE with' |
---|
207 | write(6,*) ' ice and snow' |
---|
208 | else if (ice2.eq.2) then |
---|
209 | write(6,*) 'Running 2-ice scheme in GSFCGCE with' |
---|
210 | write(6,*) ' ice and graupel' |
---|
211 | else |
---|
212 | write(6,*) 'gsfcgce_2ice in namelist.input has to be 0, 1, or 2' |
---|
213 | stop |
---|
214 | endif !ice2 |
---|
215 | endif !itimestep |
---|
216 | |
---|
217 | !c new_ice_sat = 0, 1 or 2 |
---|
218 | new_ice_sat = 2 |
---|
219 | |
---|
220 | !c istatmin |
---|
221 | istatmin = 180 |
---|
222 | |
---|
223 | !c id = 0 without in-line staticstics |
---|
224 | !c id = 1 with in-line staticstics |
---|
225 | id = 0 |
---|
226 | |
---|
227 | !c ibud = 0 no calculation of dth, dqv, dqrest and dqall |
---|
228 | !c ibud = 1 yes |
---|
229 | ibud = 0 |
---|
230 | |
---|
231 | !jjs dt=dt_in |
---|
232 | !jjs rhoe_s=1.29 |
---|
233 | ! |
---|
234 | ! IF (P_QI .lt. P_FIRST_SCALAR .or. P_QS .lt. P_FIRST_SCALAR) THEN |
---|
235 | ! CALL wrf_error_fatal3 ( "module_mp_lin.b" , 130 , 'module_mp_lin: Improper use of Lin et al scheme; no ice phase. Please chose another one.') |
---|
236 | ! ENDIF |
---|
237 | |
---|
238 | ! calculte fallflux and precipiation in MKS system |
---|
239 | |
---|
240 | call fall_flux(dt_in, qr, qi, qs, qg, p, & |
---|
241 | rho, z, dz8w, ht, rainnc, & |
---|
242 | rainncv, grav,itimestep, & |
---|
243 | rhowater, rhosnow, & |
---|
244 | snownc, snowncv, sr, & |
---|
245 | graupelnc, graupelncv, & |
---|
246 | ihail, ice2, & |
---|
247 | ims,ime, jms,jme, kms,kme, & ! memory dims |
---|
248 | its,ite, jts,jte, kts,kte ) ! tile dims |
---|
249 | !----------------------------------------------------------------------- |
---|
250 | |
---|
251 | !c set up constants used internally in GCE |
---|
252 | |
---|
253 | call consat_s (ihail, itaobraun) |
---|
254 | |
---|
255 | |
---|
256 | !c Negative values correction |
---|
257 | |
---|
258 | iskip = 1 |
---|
259 | ! i12h=int(86400./dt_in) |
---|
260 | |
---|
261 | if (iskip.eq.0) then |
---|
262 | call negcor(qv,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
263 | itimestep,1, & |
---|
264 | its,ite,jts,jte,kts,kte) |
---|
265 | call negcor(ql,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
266 | itimestep,2, & |
---|
267 | its,ite,jts,jte,kts,kte) |
---|
268 | call negcor(qr,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
269 | itimestep,3, & |
---|
270 | its,ite,jts,jte,kts,kte) |
---|
271 | call negcor(qi,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
272 | itimestep,4, & |
---|
273 | its,ite,jts,jte,kts,kte) |
---|
274 | call negcor(qs,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
275 | itimestep,5, & |
---|
276 | its,ite,jts,jte,kts,kte) |
---|
277 | call negcor(qg,rho,dz8w,ims,ime,jms,jme,kms,kme, & |
---|
278 | itimestep,6, & |
---|
279 | its,ite,jts,jte,kts,kte) |
---|
280 | if (mod(itimestep,i12h).eq.1) then |
---|
281 | print *,'negative correction used in gsfcgce mp ' |
---|
282 | endif |
---|
283 | endif ! iskip |
---|
284 | |
---|
285 | !c microphysics in GCE |
---|
286 | |
---|
287 | call SATICEL_S( dt_in, IHAIL, itaobraun, ICE2, istatmin, & |
---|
288 | new_ice_sat, id, & |
---|
289 | ! th, th_old, qv, ql, qr, & |
---|
290 | th, qv, ql, qr, & |
---|
291 | qi, qs, qg, & |
---|
292 | ! qvold, qlold, qrold, & |
---|
293 | ! qiold, qsold, qgold, & |
---|
294 | rho, pii, p, itimestep, & |
---|
295 | ids,ide, jds,jde, kds,kde, & ! domain dims |
---|
296 | ims,ime, jms,jme, kms,kme, & ! memory dims |
---|
297 | its,ite, jts,jte, kts,kte & ! tile dims |
---|
298 | ) |
---|
299 | |
---|
300 | END SUBROUTINE gsfcgce |
---|
301 | |
---|
302 | !----------------------------------------------------------------------- |
---|
303 | SUBROUTINE fall_flux ( dt, qr, qi, qs, qg, p, & |
---|
304 | rho, z, dz8w, topo, rainnc, & |
---|
305 | rainncv, grav, itimestep, & |
---|
306 | rhowater, rhosnow, & |
---|
307 | snownc, snowncv, sr, & |
---|
308 | graupelnc, graupelncv, & |
---|
309 | ihail, ice2, & |
---|
310 | ims,ime, jms,jme, kms,kme, & ! memory dims |
---|
311 | its,ite, jts,jte, kts,kte ) ! tile dims |
---|
312 | !----------------------------------------------------------------------- |
---|
313 | ! adopted from Jiun-Dar Chern's codes for Purdue Regional Model |
---|
314 | ! adopted by Jainn J. Shi, 6/10/2005 |
---|
315 | !----------------------------------------------------------------------- |
---|
316 | |
---|
317 | IMPLICIT NONE |
---|
318 | INTEGER, INTENT(IN ) :: ihail, ice2, & |
---|
319 | ims,ime, jms,jme, kms,kme, & |
---|
320 | its,ite, jts,jte, kts,kte |
---|
321 | INTEGER, INTENT(IN ) :: itimestep |
---|
322 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
323 | INTENT(INOUT) :: qr, qi, qs, qg |
---|
324 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
325 | INTENT(INOUT) :: rainnc, rainncv, & |
---|
326 | snownc, snowncv, sr, & |
---|
327 | graupelnc, graupelncv |
---|
328 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
329 | INTENT(IN ) :: rho, z, dz8w, p |
---|
330 | |
---|
331 | REAL, INTENT(IN ) :: dt, grav, rhowater, rhosnow |
---|
332 | |
---|
333 | |
---|
334 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
335 | INTENT(IN ) :: topo |
---|
336 | |
---|
337 | ! temperary vars |
---|
338 | |
---|
339 | REAL, DIMENSION( kts:kte ) :: sqrhoz |
---|
340 | REAL :: tmp1, term0 |
---|
341 | REAL :: pptrain, pptsnow, & |
---|
342 | pptgraul, pptice |
---|
343 | REAL, DIMENSION( kts:kte ) :: qrz, qiz, qsz, qgz, & |
---|
344 | zz, dzw, prez, rhoz, & |
---|
345 | orhoz |
---|
346 | |
---|
347 | |
---|
348 | INTEGER :: k, i, j |
---|
349 | ! |
---|
350 | |
---|
351 | REAL, DIMENSION( kts:kte ) :: vtr, vts, vtg, vti |
---|
352 | |
---|
353 | REAL :: dtb, pi, consta, constc, gambp4, & |
---|
354 | gamdp4, gam4pt5, gam4bbar |
---|
355 | |
---|
356 | ! Lin |
---|
357 | REAL , PARAMETER :: xnor = 8.0e6 |
---|
358 | ! REAL , PARAMETER :: xnos = 3.0e6 |
---|
359 | REAL , PARAMETER :: xnos = 1.6e7 ! Tao's value |
---|
360 | REAL , PARAMETER :: & |
---|
361 | constb = 0.8, constd = 0.25, o6 = 1./6., & |
---|
362 | cdrag = 0.6 |
---|
363 | ! Lin |
---|
364 | ! REAL , PARAMETER :: xnoh = 4.0e4 |
---|
365 | REAL , PARAMETER :: xnoh = 2.0e5 ! Tao's value |
---|
366 | REAL , PARAMETER :: rhohail = 917. |
---|
367 | |
---|
368 | ! Hobbs |
---|
369 | REAL , PARAMETER :: xnog = 4.0e6 |
---|
370 | REAL , PARAMETER :: rhograul = 400. |
---|
371 | REAL , PARAMETER :: abar = 19.3, bbar = 0.37, & |
---|
372 | p0 = 1.0e5 |
---|
373 | |
---|
374 | REAL , PARAMETER :: rhoe_s = 1.29 |
---|
375 | |
---|
376 | ! for terminal velocity flux |
---|
377 | INTEGER :: min_q, max_q |
---|
378 | REAL :: t_del_tv, del_tv, flux, fluxin, fluxout ,tmpqrz |
---|
379 | LOGICAL :: notlast |
---|
380 | |
---|
381 | ! if (itimestep.eq.1) then |
---|
382 | ! write(6, *) 'in fall_flux' |
---|
383 | ! write(6, *) 'ims=', ims, ' ime=', ime |
---|
384 | ! write(6, *) 'jms=', jms, ' jme=', jme |
---|
385 | ! write(6, *) 'kms=', kms, ' kme=', kme |
---|
386 | ! write(6, *) 'its=', its, ' ite=', ite |
---|
387 | ! write(6, *) 'jts=', jts, ' jte=', jte |
---|
388 | ! write(6, *) 'kts=', kts, ' kte=', kte |
---|
389 | ! write(6, *) 'dt=', dt |
---|
390 | ! write(6, *) 'ihail=', ihail |
---|
391 | ! write(6, *) 'ICE2=', ICE2 |
---|
392 | ! write(6, *) 'dt=', dt |
---|
393 | ! endif |
---|
394 | |
---|
395 | !----------------------------------------------------------------------- |
---|
396 | ! This program calculates precipitation fluxes due to terminal velocities. |
---|
397 | !----------------------------------------------------------------------- |
---|
398 | |
---|
399 | dtb=dt |
---|
400 | pi=acos(-1.) |
---|
401 | consta=2115.0*0.01**(1-constb) |
---|
402 | ! constc=152.93*0.01**(1-constd) |
---|
403 | constc=78.63*0.01**(1-constd) |
---|
404 | |
---|
405 | ! Gamma function |
---|
406 | gambp4=ggamma(constb+4.) |
---|
407 | gamdp4=ggamma(constd+4.) |
---|
408 | gam4pt5=ggamma(4.5) |
---|
409 | gam4bbar=ggamma(4.+bbar) |
---|
410 | |
---|
411 | !*********************************************************************** |
---|
412 | ! Calculate precipitation fluxes due to terminal velocities. |
---|
413 | !*********************************************************************** |
---|
414 | ! |
---|
415 | !- Calculate termianl velocity (vt?) of precipitation q?z |
---|
416 | !- Find maximum vt? to determine the small delta t |
---|
417 | |
---|
418 | j_loop: do j = jts, jte |
---|
419 | i_loop: do i = its, ite |
---|
420 | |
---|
421 | pptrain = 0. |
---|
422 | pptsnow = 0. |
---|
423 | pptgraul = 0. |
---|
424 | pptice = 0. |
---|
425 | |
---|
426 | do k = kts, kte |
---|
427 | qrz(k)=qr(i,k,j) |
---|
428 | rhoz(k)=rho(i,k,j) |
---|
429 | orhoz(k)=1./rhoz(k) |
---|
430 | prez(k)=p(i,k,j) |
---|
431 | sqrhoz(k)=sqrt(rhoe_s/rhoz(k)) |
---|
432 | zz(k)=z(i,k,j) |
---|
433 | dzw(k)=dz8w(i,k,j) |
---|
434 | enddo !k |
---|
435 | |
---|
436 | DO k = kts, kte |
---|
437 | qiz(k)=qi(i,k,j) |
---|
438 | ENDDO |
---|
439 | |
---|
440 | DO k = kts, kte |
---|
441 | qsz(k)=qs(i,k,j) |
---|
442 | ENDDO |
---|
443 | |
---|
444 | IF (ice2 .eq. 0) THEN |
---|
445 | DO k = kts, kte |
---|
446 | qgz(k)=qg(i,k,j) |
---|
447 | ENDDO |
---|
448 | ELSE |
---|
449 | DO k = kts, kte |
---|
450 | qgz(k)=0. |
---|
451 | ENDDO |
---|
452 | ENDIF |
---|
453 | |
---|
454 | |
---|
455 | ! |
---|
456 | !-- rain |
---|
457 | ! |
---|
458 | t_del_tv=0. |
---|
459 | del_tv=dtb |
---|
460 | notlast=.true. |
---|
461 | DO while (notlast) |
---|
462 | ! |
---|
463 | min_q=kte |
---|
464 | max_q=kts-1 |
---|
465 | ! |
---|
466 | do k=kts,kte-1 |
---|
467 | if (qrz(k) .gt. 1.0e-8) then |
---|
468 | min_q=min0(min_q,k) |
---|
469 | max_q=max0(max_q,k) |
---|
470 | tmp1=sqrt(pi*rhowater*xnor/rhoz(k)/qrz(k)) |
---|
471 | tmp1=sqrt(tmp1) |
---|
472 | vtr(k)=consta*gambp4*sqrhoz(k)/tmp1**constb |
---|
473 | vtr(k)=vtr(k)/6. |
---|
474 | if (k .eq. 1) then |
---|
475 | del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtr(k)) |
---|
476 | else |
---|
477 | del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtr(k)) |
---|
478 | endif |
---|
479 | else |
---|
480 | vtr(k)=0. |
---|
481 | endif |
---|
482 | enddo |
---|
483 | |
---|
484 | if (max_q .ge. min_q) then |
---|
485 | ! |
---|
486 | !- Check if the summation of the small delta t >= big delta t |
---|
487 | ! (t_del_tv) (del_tv) (dtb) |
---|
488 | |
---|
489 | t_del_tv=t_del_tv+del_tv |
---|
490 | ! |
---|
491 | if ( t_del_tv .ge. dtb ) then |
---|
492 | notlast=.false. |
---|
493 | del_tv=dtb+del_tv-t_del_tv |
---|
494 | endif |
---|
495 | |
---|
496 | ! use small delta t to calculate the qrz flux |
---|
497 | ! termi is the qrz flux pass in the grid box through the upper boundary |
---|
498 | ! termo is the qrz flux pass out the grid box through the lower boundary |
---|
499 | ! |
---|
500 | fluxin=0. |
---|
501 | do k=max_q,min_q,-1 |
---|
502 | fluxout=rhoz(k)*vtr(k)*qrz(k) |
---|
503 | flux=(fluxin-fluxout)/rhoz(k)/dzw(k) |
---|
504 | ! tmpqrz=qrz(k) |
---|
505 | qrz(k)=qrz(k)+del_tv*flux |
---|
506 | qrz(k)=amax1(0.,qrz(k)) |
---|
507 | qr(i,k,j)=qrz(k) |
---|
508 | fluxin=fluxout |
---|
509 | enddo |
---|
510 | if (min_q .eq. 1) then |
---|
511 | pptrain=pptrain+fluxin*del_tv |
---|
512 | else |
---|
513 | qrz(min_q-1)=qrz(min_q-1)+del_tv* & |
---|
514 | fluxin/rhoz(min_q-1)/dzw(min_q-1) |
---|
515 | qr(i,min_q-1,j)=qrz(min_q-1) |
---|
516 | endif |
---|
517 | ! |
---|
518 | else |
---|
519 | notlast=.false. |
---|
520 | endif |
---|
521 | ENDDO |
---|
522 | |
---|
523 | ! |
---|
524 | !-- snow |
---|
525 | ! |
---|
526 | t_del_tv=0. |
---|
527 | del_tv=dtb |
---|
528 | notlast=.true. |
---|
529 | |
---|
530 | DO while (notlast) |
---|
531 | ! |
---|
532 | min_q=kte |
---|
533 | max_q=kts-1 |
---|
534 | ! |
---|
535 | do k=kts,kte-1 |
---|
536 | if (qsz(k) .gt. 1.0e-8) then |
---|
537 | min_q=min0(min_q,k) |
---|
538 | max_q=max0(max_q,k) |
---|
539 | tmp1=sqrt(pi*rhosnow*xnos/rhoz(k)/qsz(k)) |
---|
540 | tmp1=sqrt(tmp1) |
---|
541 | vts(k)=constc*gamdp4*sqrhoz(k)/tmp1**constd |
---|
542 | vts(k)=vts(k)/6. |
---|
543 | if (k .eq. 1) then |
---|
544 | del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vts(k)) |
---|
545 | else |
---|
546 | del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vts(k)) |
---|
547 | endif |
---|
548 | else |
---|
549 | vts(k)=0. |
---|
550 | endif |
---|
551 | enddo |
---|
552 | |
---|
553 | if (max_q .ge. min_q) then |
---|
554 | ! |
---|
555 | ! |
---|
556 | !- Check if the summation of the small delta t >= big delta t |
---|
557 | ! (t_del_tv) (del_tv) (dtb) |
---|
558 | |
---|
559 | t_del_tv=t_del_tv+del_tv |
---|
560 | |
---|
561 | if ( t_del_tv .ge. dtb ) then |
---|
562 | notlast=.false. |
---|
563 | del_tv=dtb+del_tv-t_del_tv |
---|
564 | endif |
---|
565 | |
---|
566 | ! use small delta t to calculate the qsz flux |
---|
567 | ! termi is the qsz flux pass in the grid box through the upper boundary |
---|
568 | ! termo is the qsz flux pass out the grid box through the lower boundary |
---|
569 | ! |
---|
570 | fluxin=0. |
---|
571 | do k=max_q,min_q,-1 |
---|
572 | fluxout=rhoz(k)*vts(k)*qsz(k) |
---|
573 | flux=(fluxin-fluxout)/rhoz(k)/dzw(k) |
---|
574 | qsz(k)=qsz(k)+del_tv*flux |
---|
575 | qsz(k)=amax1(0.,qsz(k)) |
---|
576 | qs(i,k,j)=qsz(k) |
---|
577 | fluxin=fluxout |
---|
578 | enddo |
---|
579 | if (min_q .eq. 1) then |
---|
580 | pptsnow=pptsnow+fluxin*del_tv |
---|
581 | else |
---|
582 | qsz(min_q-1)=qsz(min_q-1)+del_tv* & |
---|
583 | fluxin/rhoz(min_q-1)/dzw(min_q-1) |
---|
584 | qs(i,min_q-1,j)=qsz(min_q-1) |
---|
585 | endif |
---|
586 | ! |
---|
587 | else |
---|
588 | notlast=.false. |
---|
589 | endif |
---|
590 | |
---|
591 | ENDDO |
---|
592 | |
---|
593 | ! |
---|
594 | ! ice2=0 --- with hail/graupel |
---|
595 | ! ice2=1 --- without hail/graupel |
---|
596 | ! |
---|
597 | if (ice2.eq.0) then |
---|
598 | ! |
---|
599 | !-- If IHAIL=1, use hail. |
---|
600 | !-- If IHAIL=0, use graupel. |
---|
601 | ! |
---|
602 | ! if (ihail .eq. 1) then |
---|
603 | ! xnog = xnoh |
---|
604 | ! rhograul = rhohail |
---|
605 | ! endif |
---|
606 | |
---|
607 | t_del_tv=0. |
---|
608 | del_tv=dtb |
---|
609 | notlast=.true. |
---|
610 | ! |
---|
611 | DO while (notlast) |
---|
612 | ! |
---|
613 | min_q=kte |
---|
614 | max_q=kts-1 |
---|
615 | ! |
---|
616 | do k=kts,kte-1 |
---|
617 | if (qgz(k) .gt. 1.0e-8) then |
---|
618 | if (ihail .eq. 1) then |
---|
619 | ! for hail, based on Lin et al (1983) |
---|
620 | min_q=min0(min_q,k) |
---|
621 | max_q=max0(max_q,k) |
---|
622 | tmp1=sqrt(pi*rhohail*xnoh/rhoz(k)/qgz(k)) |
---|
623 | tmp1=sqrt(tmp1) |
---|
624 | term0=sqrt(4.*grav*rhohail/3./rhoz(k)/cdrag) |
---|
625 | vtg(k)=gam4pt5*term0*sqrt(1./tmp1) |
---|
626 | vtg(k)=vtg(k)/6. |
---|
627 | if (k .eq. 1) then |
---|
628 | del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k)) |
---|
629 | else |
---|
630 | del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k)) |
---|
631 | endif !k |
---|
632 | else |
---|
633 | ! added by JJS |
---|
634 | ! for graupel, based on RH (1984) |
---|
635 | min_q=min0(min_q,k) |
---|
636 | max_q=max0(max_q,k) |
---|
637 | tmp1=sqrt(pi*rhograul*xnog/rhoz(k)/qgz(k)) |
---|
638 | tmp1=sqrt(tmp1) |
---|
639 | tmp1=tmp1**bbar |
---|
640 | tmp1=1./tmp1 |
---|
641 | term0=abar*gam4bbar/6. |
---|
642 | vtg(k)=term0*tmp1*(p0/prez(k))**0.4 |
---|
643 | if (k .eq. 1) then |
---|
644 | del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k)) |
---|
645 | else |
---|
646 | del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k)) |
---|
647 | endif !k |
---|
648 | endif !ihail |
---|
649 | else |
---|
650 | vtg(k)=0. |
---|
651 | endif !qgz |
---|
652 | enddo !k |
---|
653 | |
---|
654 | if (max_q .ge. min_q) then |
---|
655 | ! |
---|
656 | ! |
---|
657 | !- Check if the summation of the small delta t >= big delta t |
---|
658 | ! (t_del_tv) (del_tv) (dtb) |
---|
659 | |
---|
660 | t_del_tv=t_del_tv+del_tv |
---|
661 | |
---|
662 | if ( t_del_tv .ge. dtb ) then |
---|
663 | notlast=.false. |
---|
664 | del_tv=dtb+del_tv-t_del_tv |
---|
665 | endif |
---|
666 | |
---|
667 | ! use small delta t to calculate the qgz flux |
---|
668 | ! termi is the qgz flux pass in the grid box through the upper boundary |
---|
669 | ! termo is the qgz flux pass out the grid box through the lower boundary |
---|
670 | ! |
---|
671 | fluxin=0. |
---|
672 | do k=max_q,min_q,-1 |
---|
673 | fluxout=rhoz(k)*vtg(k)*qgz(k) |
---|
674 | flux=(fluxin-fluxout)/rhoz(k)/dzw(k) |
---|
675 | qgz(k)=qgz(k)+del_tv*flux |
---|
676 | qgz(k)=amax1(0.,qgz(k)) |
---|
677 | qg(i,k,j)=qgz(k) |
---|
678 | fluxin=fluxout |
---|
679 | enddo |
---|
680 | if (min_q .eq. 1) then |
---|
681 | pptgraul=pptgraul+fluxin*del_tv |
---|
682 | else |
---|
683 | qgz(min_q-1)=qgz(min_q-1)+del_tv* & |
---|
684 | fluxin/rhoz(min_q-1)/dzw(min_q-1) |
---|
685 | qg(i,min_q-1,j)=qgz(min_q-1) |
---|
686 | endif |
---|
687 | ! |
---|
688 | else |
---|
689 | notlast=.false. |
---|
690 | endif |
---|
691 | ! |
---|
692 | ENDDO |
---|
693 | ENDIF !ice2 |
---|
694 | ! |
---|
695 | !-- cloud ice (03/21/02) follow Vaughan T.J. Phillips at GFDL |
---|
696 | ! |
---|
697 | |
---|
698 | t_del_tv=0. |
---|
699 | del_tv=dtb |
---|
700 | notlast=.true. |
---|
701 | ! |
---|
702 | DO while (notlast) |
---|
703 | ! |
---|
704 | min_q=kte |
---|
705 | max_q=kts-1 |
---|
706 | ! |
---|
707 | do k=kts,kte-1 |
---|
708 | if (qiz(k) .gt. 1.0e-8) then |
---|
709 | min_q=min0(min_q,k) |
---|
710 | max_q=max0(max_q,k) |
---|
711 | vti(k)= 3.29 * (rhoz(k)* qiz(k))** 0.16 ! Heymsfield and Donner |
---|
712 | if (k .eq. 1) then |
---|
713 | del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vti(k)) |
---|
714 | else |
---|
715 | del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vti(k)) |
---|
716 | endif |
---|
717 | else |
---|
718 | vti(k)=0. |
---|
719 | endif |
---|
720 | enddo |
---|
721 | |
---|
722 | if (max_q .ge. min_q) then |
---|
723 | ! |
---|
724 | ! |
---|
725 | !- Check if the summation of the small delta t >= big delta t |
---|
726 | ! (t_del_tv) (del_tv) (dtb) |
---|
727 | |
---|
728 | t_del_tv=t_del_tv+del_tv |
---|
729 | |
---|
730 | if ( t_del_tv .ge. dtb ) then |
---|
731 | notlast=.false. |
---|
732 | del_tv=dtb+del_tv-t_del_tv |
---|
733 | endif |
---|
734 | |
---|
735 | ! use small delta t to calculate the qiz flux |
---|
736 | ! termi is the qiz flux pass in the grid box through the upper boundary |
---|
737 | ! termo is the qiz flux pass out the grid box through the lower boundary |
---|
738 | ! |
---|
739 | |
---|
740 | fluxin=0. |
---|
741 | do k=max_q,min_q,-1 |
---|
742 | fluxout=rhoz(k)*vti(k)*qiz(k) |
---|
743 | flux=(fluxin-fluxout)/rhoz(k)/dzw(k) |
---|
744 | qiz(k)=qiz(k)+del_tv*flux |
---|
745 | qiz(k)=amax1(0.,qiz(k)) |
---|
746 | qi(i,k,j)=qiz(k) |
---|
747 | fluxin=fluxout |
---|
748 | enddo |
---|
749 | if (min_q .eq. 1) then |
---|
750 | pptice=pptice+fluxin*del_tv |
---|
751 | else |
---|
752 | qiz(min_q-1)=qiz(min_q-1)+del_tv* & |
---|
753 | fluxin/rhoz(min_q-1)/dzw(min_q-1) |
---|
754 | qi(i,min_q-1,j)=qiz(min_q-1) |
---|
755 | endif |
---|
756 | ! |
---|
757 | else |
---|
758 | notlast=.false. |
---|
759 | endif |
---|
760 | ! |
---|
761 | ENDDO !notlast |
---|
762 | |
---|
763 | ! prnc(i,j)=prnc(i,j)+pptrain |
---|
764 | ! psnowc(i,j)=psnowc(i,j)+pptsnow |
---|
765 | ! pgrauc(i,j)=pgrauc(i,j)+pptgraul |
---|
766 | ! picec(i,j)=picec(i,j)+pptice |
---|
767 | ! |
---|
768 | |
---|
769 | ! write(6,*) 'i=',i,' j=',j,' ', pptrain, pptsnow, pptgraul, pptice |
---|
770 | ! call flush(6) |
---|
771 | |
---|
772 | snowncv(i,j) = pptsnow |
---|
773 | snownc(i,j) = snownc(i,j) + pptsnow |
---|
774 | graupelncv(i,j) = pptgraul |
---|
775 | graupelnc(i,j) = graupelnc(i,j) + pptgraul |
---|
776 | RAINNCV(i,j) = pptrain + pptsnow + pptgraul + pptice |
---|
777 | RAINNC(i,j) = RAINNC(i,j) + pptrain + pptsnow + pptgraul + pptice |
---|
778 | sr(i,j) = 0. |
---|
779 | if (RAINNCV(i,j) .gt. 0.) sr(i,j) = (pptsnow + pptgraul + pptice) / RAINNCV(i,j) |
---|
780 | |
---|
781 | ENDDO i_loop |
---|
782 | ENDDO j_loop |
---|
783 | |
---|
784 | ! if (itimestep.eq.6480) then |
---|
785 | ! write(51,*) 'in the end of fallflux, itimestep=',itimestep |
---|
786 | ! do j=jts,jte |
---|
787 | ! do i=its,ite |
---|
788 | ! if (rainnc(i,j).gt.400.) then |
---|
789 | ! write(50,*) 'i=',i,' j=',j,' rainnc=',rainnc |
---|
790 | ! endif |
---|
791 | ! enddo |
---|
792 | ! enddo |
---|
793 | ! endif |
---|
794 | |
---|
795 | END SUBROUTINE fall_flux |
---|
796 | |
---|
797 | !---------------------------------------------------------------- |
---|
798 | REAL FUNCTION ggamma(X) |
---|
799 | !---------------------------------------------------------------- |
---|
800 | IMPLICIT NONE |
---|
801 | !---------------------------------------------------------------- |
---|
802 | REAL, INTENT(IN ) :: x |
---|
803 | REAL, DIMENSION(8) :: B |
---|
804 | INTEGER ::j, K1 |
---|
805 | REAL ::PF, G1TO2 ,TEMP |
---|
806 | |
---|
807 | DATA B/-.577191652,.988205891,-.897056937,.918206857, & |
---|
808 | -.756704078,.482199394,-.193527818,.035868343/ |
---|
809 | |
---|
810 | PF=1. |
---|
811 | TEMP=X |
---|
812 | DO 10 J=1,200 |
---|
813 | IF (TEMP .LE. 2) GO TO 20 |
---|
814 | TEMP=TEMP-1. |
---|
815 | 10 PF=PF*TEMP |
---|
816 | 100 FORMAT(//,5X,'module_gsfcgce: INPUT TO GAMMA FUNCTION TOO LARGE, X=',E12.5) |
---|
817 | WRITE(wrf_err_message,100)X |
---|
818 | CALL wrf_error_fatal(wrf_err_message) |
---|
819 | 20 G1TO2=1. |
---|
820 | TEMP=TEMP - 1. |
---|
821 | DO 30 K1=1,8 |
---|
822 | 30 G1TO2=G1TO2 + B(K1)*TEMP**K1 |
---|
823 | ggamma=PF*G1TO2 |
---|
824 | |
---|
825 | END FUNCTION ggamma |
---|
826 | |
---|
827 | !----------------------------------------------------------------------- |
---|
828 | !c Correction of negative values |
---|
829 | SUBROUTINE negcor ( X, rho, dz8w, & |
---|
830 | ims,ime, jms,jme, kms,kme, & ! memory dims |
---|
831 | itimestep, ics, & |
---|
832 | its,ite, jts,jte, kts,kte ) ! tile dims |
---|
833 | !----------------------------------------------------------------------- |
---|
834 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
835 | INTENT(INOUT) :: X |
---|
836 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), & |
---|
837 | INTENT(IN ) :: rho, dz8w |
---|
838 | integer, INTENT(IN ) :: itimestep, ics |
---|
839 | |
---|
840 | !c Local variables |
---|
841 | ! REAL, DIMENSION( kts:kte ) :: Y1, Y2 |
---|
842 | REAL :: A0, A1, A2 |
---|
843 | |
---|
844 | A1=0. |
---|
845 | A2=0. |
---|
846 | do k=kts,kte |
---|
847 | do j=jts,jte |
---|
848 | do i=its,ite |
---|
849 | A1=A1+max(X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j) |
---|
850 | A2=A2+max(-X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j) |
---|
851 | enddo |
---|
852 | enddo |
---|
853 | enddo |
---|
854 | |
---|
855 | ! A1=0.0 |
---|
856 | ! A2=0.0 |
---|
857 | ! do k=kts,kte |
---|
858 | ! A1=A1+Y1(k) |
---|
859 | ! A2=A2+Y2(k) |
---|
860 | ! enddo |
---|
861 | |
---|
862 | A0=0.0 |
---|
863 | |
---|
864 | if (A1.NE.0.0.and.A1.GT.A2) then |
---|
865 | A0=(A1-A2)/A1 |
---|
866 | |
---|
867 | if (mod(itimestep,540).eq.0) then |
---|
868 | if (ics.eq.1) then |
---|
869 | write(61,*) 'kms=',kms,' kme=',kme,' kts=',kts,' kte=',kte |
---|
870 | write(61,*) 'jms=',jms,' jme=',jme,' jts=',jts,' jte=',jte |
---|
871 | write(61,*) 'ims=',ims,' ime=',ime,' its=',its,' ite=',ite |
---|
872 | endif |
---|
873 | if (ics.eq.1) then |
---|
874 | write(61,*) 'qv timestep=',itimestep |
---|
875 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
876 | else if (ics.eq.2) then |
---|
877 | write(61,*) 'ql timestep=',itimestep |
---|
878 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
879 | else if (ics.eq.3) then |
---|
880 | write(61,*) 'qr timestep=',itimestep |
---|
881 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
882 | else if (ics.eq.4) then |
---|
883 | write(61,*) 'qi timestep=',itimestep |
---|
884 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
885 | else if (ics.eq.5) then |
---|
886 | write(61,*) 'qs timestep=',itimestep |
---|
887 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
888 | else if (ics.eq.6) then |
---|
889 | write(61,*) 'qg timestep=',itimestep |
---|
890 | write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0 |
---|
891 | else |
---|
892 | write(61,*) 'wrong cloud specieis number' |
---|
893 | endif |
---|
894 | endif |
---|
895 | |
---|
896 | do k=kts,kte |
---|
897 | do j=jts,jte |
---|
898 | do i=its,ite |
---|
899 | X(i,k,j)=A0*AMAX1(X(i,k,j), 0.0) |
---|
900 | enddo |
---|
901 | enddo |
---|
902 | enddo |
---|
903 | endif |
---|
904 | |
---|
905 | END SUBROUTINE negcor |
---|
906 | |
---|
907 | SUBROUTINE consat_s (ihail,itaobraun) |
---|
908 | |
---|
909 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
910 | ! c |
---|
911 | ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c |
---|
912 | ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c |
---|
913 | ! c |
---|
914 | ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c |
---|
915 | ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c |
---|
916 | ! c |
---|
917 | ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c |
---|
918 | ! Model. Part I: Model description. Terrestrial, Atmospheric and c |
---|
919 | ! Oceanic Sciences, 4, 35-72. c |
---|
920 | ! c |
---|
921 | ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c |
---|
922 | ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c |
---|
923 | ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c |
---|
924 | ! radiation and surface processes in the Goddard Cumulus Ensemble c |
---|
925 | ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c |
---|
926 | ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c |
---|
927 | ! c |
---|
928 | ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c |
---|
929 | ! Rutledge, and J. Simpson, 2007: Improving simulations of c |
---|
930 | ! convective system from TRMM LBA: Easterly and Westerly regimes. c |
---|
931 | ! J. Atmos. Sci., 64, 1141-1164. c |
---|
932 | ! c |
---|
933 | ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c |
---|
934 | ! c |
---|
935 | ! Implemented into WRF by Roger Shi 2006/2007 c |
---|
936 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
937 | |
---|
938 | ! itaobraun=0 ! see Tao and Simpson (1993) |
---|
939 | ! itaobraun=1 ! see Tao et al. (2003) |
---|
940 | |
---|
941 | integer :: itaobraun |
---|
942 | real :: cn0 |
---|
943 | |
---|
944 | !JJS 1/3/2008 vvvvv |
---|
945 | !JJS the following common blocks have been moved to the top of |
---|
946 | !JJS module_mp_gsfcgce_driver_instat.F |
---|
947 | ! |
---|
948 | ! real, dimension (1:31) :: a1, a2 |
---|
949 | ! data a1/.7939e-7,.7841e-6,.3369e-5,.4336e-5,.5285e-5,.3728e-5, & |
---|
950 | ! .1852e-5,.2991e-6,.4248e-6,.7434e-6,.1812e-5,.4394e-5,.9145e-5, & |
---|
951 | ! .1725e-4,.3348e-4,.1725e-4,.9175e-5,.4412e-5,.2252e-5,.9115e-6, & |
---|
952 | ! .4876e-6,.3473e-6,.4758e-6,.6306e-6,.8573e-6,.7868e-6,.7192e-6, & |
---|
953 | ! .6513e-6,.5956e-6,.5333e-6,.4834e-6/ |
---|
954 | ! data a2/.4006,.4831,.5320,.5307,.5319,.5249,.4888,.3894,.4047, & |
---|
955 | ! .4318,.4771,.5183,.5463,.5651,.5813,.5655,.5478,.5203,.4906, & |
---|
956 | ! .4447,.4126,.3960,.4149,.4320,.4506,.4483,.4460,.4433,.4413, & |
---|
957 | ! .4382,.4361/ |
---|
958 | !JJS 1/3/2008 ^^^^^ |
---|
959 | |
---|
960 | |
---|
961 | ! ****************************************************************** |
---|
962 | !JJS |
---|
963 | al = 2.5e10 |
---|
964 | cp = 1.004e7 |
---|
965 | rd1 = 1.e-3 |
---|
966 | rd2 = 2.2 |
---|
967 | !JJS |
---|
968 | cpi=4.*atan(1.) |
---|
969 | cpi2=cpi*cpi |
---|
970 | grvt=980. |
---|
971 | cd1=6.e-1 |
---|
972 | cd2=4.*grvt/(3.*cd1) |
---|
973 | tca=2.43e3 |
---|
974 | dwv=.226 |
---|
975 | dva=1.718e-4 |
---|
976 | amw=18.016 |
---|
977 | ars=8.314e7 |
---|
978 | scv=2.2904487 |
---|
979 | t0=273.16 |
---|
980 | t00=238.16 |
---|
981 | alv=2.5e10 |
---|
982 | alf=3.336e9 |
---|
983 | als=2.8336e10 |
---|
984 | avc=alv/cp |
---|
985 | afc=alf/cp |
---|
986 | asc=als/cp |
---|
987 | rw=4.615e6 |
---|
988 | cw=4.187e7 |
---|
989 | ci=2.093e7 |
---|
990 | c76=7.66 |
---|
991 | c358=35.86 |
---|
992 | c172=17.26939 |
---|
993 | c409=4098.026 |
---|
994 | c218=21.87456 |
---|
995 | c580=5807.695 |
---|
996 | c610=6.1078e3 |
---|
997 | c149=1.496286e-5 |
---|
998 | c879=8.794142 |
---|
999 | c141=1.4144354e7 |
---|
1000 | !*** DEFINE THE COEFFICIENTS USED IN TERMINAL VELOCITY |
---|
1001 | !*** DEFINE THE DENSITY AND SIZE DISTRIBUTION OF PRECIPITATION |
---|
1002 | !********** HAIL OR GRAUPEL PARAMETERS ********** |
---|
1003 | if(ihail .eq. 1) then |
---|
1004 | roqg=.9 |
---|
1005 | ag=sqrt(cd2*roqg) |
---|
1006 | bg=.5 |
---|
1007 | tng=.002 |
---|
1008 | else |
---|
1009 | roqg=.4 |
---|
1010 | ag=351.2 |
---|
1011 | ! AG=372.3 ! if ice913=1 6/15/02 tao's |
---|
1012 | bg=.37 |
---|
1013 | tng=.04 |
---|
1014 | endif |
---|
1015 | !********** SNOW PARAMETERS ********** |
---|
1016 | !ccshie 6/15/02 tao's |
---|
1017 | ! TNS=1. |
---|
1018 | ! TNS=.08 ! if ice913=1, tao's |
---|
1019 | tns=.16 ! if ice913=0, tao's |
---|
1020 | roqs=.1 |
---|
1021 | ! AS=152.93 |
---|
1022 | as=78.63 |
---|
1023 | ! BS=.25 |
---|
1024 | bs=.11 |
---|
1025 | !********** RAIN PARAMETERS ********** |
---|
1026 | aw=2115. |
---|
1027 | bw=.8 |
---|
1028 | roqr=1. |
---|
1029 | tnw=.08 |
---|
1030 | !***************************************************************** |
---|
1031 | bgh=.5*bg |
---|
1032 | bsh=.5*bs |
---|
1033 | bwh=.5*bw |
---|
1034 | bgq=.25*bg |
---|
1035 | bsq=.25*bs |
---|
1036 | bwq=.25*bw |
---|
1037 | !**********GAMMA FUNCTION CALCULATIONS************* |
---|
1038 | ga3b = gammagce(3.+bw) |
---|
1039 | ga4b = gammagce(4.+bw) |
---|
1040 | ga6b = gammagce(6.+bw) |
---|
1041 | ga5bh = gammagce((5.+bw)/2.) |
---|
1042 | ga3g = gammagce(3.+bg) |
---|
1043 | ga4g = gammagce(4.+bg) |
---|
1044 | ga5gh = gammagce((5.+bg)/2.) |
---|
1045 | ga3d = gammagce(3.+bs) |
---|
1046 | ga4d = gammagce(4.+bs) |
---|
1047 | ga5dh = gammagce((5.+bs)/2.) |
---|
1048 | !CCCCC LIN ET AL., 1983 OR LORD ET AL., 1984 CCCCCCCCCCCCCCCCC |
---|
1049 | ac1=aw |
---|
1050 | !JJS |
---|
1051 | ac2=ag |
---|
1052 | ac3=as |
---|
1053 | !JJS |
---|
1054 | bc1=bw |
---|
1055 | cc1=as |
---|
1056 | dc1=bs |
---|
1057 | zrc=(cpi*roqr*tnw)**0.25 |
---|
1058 | zsc=(cpi*roqs*tns)**0.25 |
---|
1059 | zgc=(cpi*roqg*tng)**0.25 |
---|
1060 | vrc=aw*ga4b/(6.*zrc**bw) |
---|
1061 | vsc=as*ga4d/(6.*zsc**bs) |
---|
1062 | vgc=ag*ga4g/(6.*zgc**bg) |
---|
1063 | ! **************************** |
---|
1064 | ! RN1=1.E-3 |
---|
1065 | rn1=9.4e-15 ! 6/15/02 tao's |
---|
1066 | bnd1=6.e-4 |
---|
1067 | rn2=1.e-3 |
---|
1068 | ! BND2=1.25E-3 |
---|
1069 | ! BND2=1.5E-3 ! if ice913=1 6/15/02 tao's |
---|
1070 | bnd2=2.0e-3 ! if ice913=0 6/15/02 tao's |
---|
1071 | rn3=.25*cpi*tns*cc1*ga3d |
---|
1072 | esw=1. |
---|
1073 | rn4=.25*cpi*esw*tns*cc1*ga3d |
---|
1074 | ! ERI=1. |
---|
1075 | eri=.1 ! 6/17/02 tao's ice913=0 (not 1) |
---|
1076 | rn5=.25*cpi*eri*tnw*ac1*ga3b |
---|
1077 | ! AMI=1./(24.*4.19E-10) |
---|
1078 | ami=1./(24.*6.e-9) ! 6/15/02 tao's |
---|
1079 | rn6=cpi2*eri*tnw*ac1*roqr*ga6b*ami |
---|
1080 | ! ESR=1. ! also if ice913=1 for tao's |
---|
1081 | esr=.5 ! 6/15/02 for ice913=0 tao's |
---|
1082 | rn7=cpi2*esr*tnw*tns*roqs |
---|
1083 | esr=1. |
---|
1084 | rn8=cpi2*esr*tnw*tns*roqr |
---|
1085 | rn9=cpi2*tns*tng*roqs |
---|
1086 | rn10=2.*cpi*tns |
---|
1087 | rn101=.31*ga5dh*sqrt(cc1) |
---|
1088 | rn10a=als*als/rw |
---|
1089 | !JJS |
---|
1090 | rn10b=alv/tca |
---|
1091 | rn10c=ars/(dwv*amw) |
---|
1092 | !JJS |
---|
1093 | rn11=2.*cpi*tns/alf |
---|
1094 | rn11a=cw/alf |
---|
1095 | ! AMI50=1.51e-7 |
---|
1096 | ami50=3.84e-6 ! 6/15/02 tao's |
---|
1097 | ! AMI40=2.41e-8 |
---|
1098 | ami40=3.08e-8 ! 6/15/02 tao's |
---|
1099 | eiw=1. |
---|
1100 | ! UI50=20. |
---|
1101 | ui50=100. ! 6/15/02 tao's |
---|
1102 | ri50=2.*5.e-3 |
---|
1103 | cmn=1.05e-15 |
---|
1104 | rn12=cpi*eiw*ui50*ri50**2 |
---|
1105 | |
---|
1106 | do 10 k=1,31 |
---|
1107 | y1=1.-aa2(k) |
---|
1108 | rn13(k)=aa1(k)*y1/(ami50**y1-ami40**y1) |
---|
1109 | rn12a(k)=rn13(k)/ami50 |
---|
1110 | rn12b(k)=aa1(k)*ami50**aa2(k) |
---|
1111 | rn25a(k)=aa1(k)*cmn**aa2(k) |
---|
1112 | 10 continue |
---|
1113 | |
---|
1114 | egw=1. |
---|
1115 | rn14=.25*cpi*egw*tng*ga3g*ag |
---|
1116 | egi=.1 |
---|
1117 | rn15=.25*cpi*egi*tng*ga3g*ag |
---|
1118 | egi=1. |
---|
1119 | rn15a=.25*cpi*egi*tng*ga3g*ag |
---|
1120 | egr=1. |
---|
1121 | rn16=cpi2*egr*tng*tnw*roqr |
---|
1122 | rn17=2.*cpi*tng |
---|
1123 | rn17a=.31*ga5gh*sqrt(ag) |
---|
1124 | rn17b=cw-ci |
---|
1125 | rn17c=cw |
---|
1126 | apri=.66 |
---|
1127 | bpri=1.e-4 |
---|
1128 | bpri=0.5*bpri ! 6/17/02 tao's |
---|
1129 | rn18=20.*cpi2*bpri*tnw*roqr |
---|
1130 | rn18a=apri |
---|
1131 | rn19=2.*cpi*tng/alf |
---|
1132 | rn19a=.31*ga5gh*sqrt(ag) |
---|
1133 | rn19b=cw/alf |
---|
1134 | ! |
---|
1135 | rnn191=.78 |
---|
1136 | rnn192=.31*ga5gh*sqrt(ac2/dva) |
---|
1137 | ! |
---|
1138 | rn20=2.*cpi*tng |
---|
1139 | rn20a=als*als/rw |
---|
1140 | rn20b=.31*ga5gh*sqrt(ag) |
---|
1141 | bnd3=2.e-3 |
---|
1142 | rn21=1.e3*1.569e-12/0.15 |
---|
1143 | erw=1. |
---|
1144 | rn22=.25*cpi*erw*ac1*tnw*ga3b |
---|
1145 | rn23=2.*cpi*tnw |
---|
1146 | rn23a=.31*ga5bh*sqrt(ac1) |
---|
1147 | rn23b=alv*alv/rw |
---|
1148 | |
---|
1149 | |
---|
1150 | !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1151 | !cc |
---|
1152 | !cc "c0" in routine "consat" (2d), "consatrh" (3d) |
---|
1153 | !cc if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6 |
---|
1154 | !cc if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8 |
---|
1155 | |
---|
1156 | if (itaobraun .eq. 0) then |
---|
1157 | cn0=1.e-8 |
---|
1158 | beta=-.6 |
---|
1159 | elseif (itaobraun .eq. 1) then |
---|
1160 | cn0=1.e-6 |
---|
1161 | beta=-.46 |
---|
1162 | endif |
---|
1163 | !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1164 | ! CN0=1.E-6 |
---|
1165 | ! CN0=1.E-8 ! 6/15/02 tao's |
---|
1166 | ! BETA=-.46 |
---|
1167 | ! BETA=-.6 ! 6/15/02 tao's |
---|
1168 | |
---|
1169 | rn25=cn0 |
---|
1170 | rn30a=alv*als*amw/(tca*ars) |
---|
1171 | rn30b=alv/tca |
---|
1172 | rn30c=ars/(dwv*amw) |
---|
1173 | rn31=1.e-17 |
---|
1174 | |
---|
1175 | rn32=4.*51.545e-4 |
---|
1176 | ! |
---|
1177 | rn30=2.*cpi*tng |
---|
1178 | rnn30a=alv*alv*amw/(tca*ars) |
---|
1179 | ! |
---|
1180 | rn33=4.*tns |
---|
1181 | rn331=.65 |
---|
1182 | rn332=.44*sqrt(ac3/dva)*ga5dh |
---|
1183 | ! |
---|
1184 | |
---|
1185 | return |
---|
1186 | END SUBROUTINE consat_s |
---|
1187 | |
---|
1188 | SUBROUTINE saticel_s (dt, ihail, itaobraun, ice2, istatmin, & |
---|
1189 | new_ice_sat, id, & |
---|
1190 | ptwrf, qvwrf, qlwrf, qrwrf, & |
---|
1191 | qiwrf, qswrf, qgwrf, & |
---|
1192 | rho_mks, pi_mks, p0_mks,itimestep, & |
---|
1193 | ids,ide, jds,jde, kds,kde, & |
---|
1194 | ims,ime, jms,jme, kms,kme, & |
---|
1195 | its,ite, jts,jte, kts,kte & |
---|
1196 | ) |
---|
1197 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1198 | ! c |
---|
1199 | ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c |
---|
1200 | ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c |
---|
1201 | ! c |
---|
1202 | ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c |
---|
1203 | ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c |
---|
1204 | ! c |
---|
1205 | ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c |
---|
1206 | ! Model. Part I: Model description. Terrestrial, Atmospheric and c |
---|
1207 | ! Oceanic Sciences, 4, 35-72. c |
---|
1208 | ! c |
---|
1209 | ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c |
---|
1210 | ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c |
---|
1211 | ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c |
---|
1212 | ! radiation and surface processes in the Goddard Cumulus Ensemble c |
---|
1213 | ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c |
---|
1214 | ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c |
---|
1215 | ! c |
---|
1216 | ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c |
---|
1217 | ! Rutledge, and J. Simpson, 2007: Improving simulations of c |
---|
1218 | ! convective system from TRMM LBA: Easterly and Westerly regimes. c |
---|
1219 | ! J. Atmos. Sci., 64, 1141-1164. c |
---|
1220 | ! c |
---|
1221 | ! Tao, W.-K., J. J. Shi, S. Lang, C. Peters-Lidard, A. Hou, S. c |
---|
1222 | ! Braun, and J. Simpson, 2007: New, improved bulk-microphysical c |
---|
1223 | ! schemes for studying precipitation processes in WRF. Part I: c |
---|
1224 | ! Comparisons with other schemes. to appear on Mon. Wea. Rev. C |
---|
1225 | ! c |
---|
1226 | ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c |
---|
1227 | ! c |
---|
1228 | ! Implemented into WRF by Roger Shi 2006/2007 c |
---|
1229 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1230 | ! |
---|
1231 | ! COMPUTE ICE PHASE MICROPHYSICS AND SATURATION PROCESSES |
---|
1232 | ! |
---|
1233 | integer, parameter :: nt=2880, nt2=2*nt |
---|
1234 | |
---|
1235 | !cc using scott braun's way for pint, pidep computations |
---|
1236 | integer :: itaobraun,ice2,ihail,new_ice_sat,id,istatmin |
---|
1237 | integer :: itimestep |
---|
1238 | real :: tairccri, cn0, dt |
---|
1239 | !cc |
---|
1240 | |
---|
1241 | !JJS common/bxyz/ n,isec,nran,kt1,kt2 |
---|
1242 | !JJS common/option/ lipps,ijkadv,istatmin,iwater,itoga,imlifting,lin, |
---|
1243 | !JJS 1 irf,iadvh,irfg,ismg,id |
---|
1244 | |
---|
1245 | !JJS common/timestat/ ndt_stat,idq |
---|
1246 | !JJS common/iice/ new_ice_sat |
---|
1247 | !JJS common/bt/ dt,d2t,rijl2,dts,f5,rd1,rd2,bound,al,cp,ra,ck,ce,eps, |
---|
1248 | !JJS 1 psfc,fcor,sec,aminut,rdt |
---|
1249 | |
---|
1250 | !JJS the following common blocks have been moved to the top of |
---|
1251 | !JJS module_mp_gsfcgce_driver_instat.F |
---|
1252 | |
---|
1253 | ! common/bt/ rd1,rd2,al,cp |
---|
1254 | ! |
---|
1255 | ! |
---|
1256 | ! common/bterv/ zrc,zgc,zsc,vrc,vgc,vsc |
---|
1257 | ! common/size/ tnw,tns,tng,roqs,roqg,roqr |
---|
1258 | ! common/cont/ c38,c358,c610,c149,c879,c172,c409,c76,c218,c580,c141 |
---|
1259 | ! common/b3cs/ ag,bg,as,bs,aw,bw,bgh,bgq,bsh,bsq,bwh,bwq |
---|
1260 | ! common/bsnw/ alv,alf,als,t0,t00,avc,afc,asc,rn1,bnd1,rn2,bnd2, & |
---|
1261 | ! rn3,rn4,rn5,rn6,rn7,rn8,rn9,rn10,rn101,rn10a,rn11,rn11a, & |
---|
1262 | ! rn12,rn12a(31),rn12b(31),rn13(31),rn14,rn15,rn15a,rn16,rn17, & |
---|
1263 | ! rn17a,rn17b,rn17c,rn18,rn18a,rn19,rn19a,rn19b,rn20,rn20a,rn20b, & |
---|
1264 | ! bnd3,rn21,rn22,rn23,rn23a,rn23b,rn25,rn25a(31),rn30a,rn30b, & |
---|
1265 | ! rn30c,rn31,beta,rn32 |
---|
1266 | ! common/rsnw1/ rn10b,rn10c,rnn191,rnn192,rn30,rnn30a,rn33,rn331, & |
---|
1267 | ! rn332 |
---|
1268 | !JJS |
---|
1269 | |
---|
1270 | real, dimension (its:ite,jts:jte,kts:kte) :: fv |
---|
1271 | real, dimension (its:ite,jts:jte,kts:kte) :: dpt, dqv |
---|
1272 | real, dimension (its:ite,jts:jte,kts:kte) :: qcl, qrn, & |
---|
1273 | qci, qcs, qcg |
---|
1274 | !JJS 10/16/06 vvvv |
---|
1275 | ! real dpt1(ims:ime,jms:jme,kms:kme) |
---|
1276 | ! real dqv1(ims:ime,jms:jme,kms:kme), |
---|
1277 | ! 1 qcl1(ims:ime,jms:jme,kms:kme) |
---|
1278 | ! real qrn1(ims:ime,jms:jme,kms:kme), |
---|
1279 | ! 1 qci1(ims:ime,jms:jme,kms:kme) |
---|
1280 | ! real qcs1(ims:ime,jms:jme,kms:kme), |
---|
1281 | ! 1 qcg1(ims:ime,jms:jme,kms:kme) |
---|
1282 | !JJS 10/16/06 ^^^^ |
---|
1283 | |
---|
1284 | !JJS |
---|
1285 | |
---|
1286 | real, dimension (ims:ime, kms:kme, jms:jme) :: ptwrf, qvwrf |
---|
1287 | real, dimension (ims:ime, kms:kme, jms:jme) :: qlwrf, qrwrf, & |
---|
1288 | qiwrf, qswrf, qgwrf |
---|
1289 | !JJS 10/16/06 vvvv |
---|
1290 | ! real ptwrfold(ims:ime, kms:kme, jms:jme) |
---|
1291 | ! real qvwrfold(ims:ime, kms:kme, jms:jme), |
---|
1292 | ! 1 qlwrfold(ims:ime, kms:kme, jms:jme) |
---|
1293 | ! real qrwrfold(ims:ime, kms:kme, jms:jme), |
---|
1294 | ! 1 qiwrfold(ims:ime, kms:kme, jms:jme) |
---|
1295 | ! real qswrfold(ims:ime, kms:kme, jms:jme), |
---|
1296 | ! 1 qgwrfold(ims:ime, kms:kme, jms:jme) |
---|
1297 | !JJS 10/16/06 ^^^^ |
---|
1298 | |
---|
1299 | !JJS in MKS |
---|
1300 | real, dimension (ims:ime, kms:kme, jms:jme) :: rho_mks |
---|
1301 | real, dimension (ims:ime, kms:kme, jms:jme) :: pi_mks |
---|
1302 | real, dimension (ims:ime, kms:kme, jms:jme) :: p0_mks |
---|
1303 | !JJS |
---|
1304 | ! real, dimension (its:ite,jts:jte,kts:kte) :: ww1 |
---|
1305 | ! real, dimension (its:ite,jts:jte,kts:kte) :: rsw |
---|
1306 | ! real, dimension (its:ite,jts:jte,kts:kte) :: rlw |
---|
1307 | |
---|
1308 | !JJS COMMON /BADV/ |
---|
1309 | real, dimension (its:ite,jts:jte) :: & |
---|
1310 | vg, zg, & |
---|
1311 | ps, pg, & |
---|
1312 | prn, psn, & |
---|
1313 | pwacs, wgacr, & |
---|
1314 | pidep, pint, & |
---|
1315 | qsi, ssi, & |
---|
1316 | esi, esw, & |
---|
1317 | qsw, pr, & |
---|
1318 | ssw, pihom, & |
---|
1319 | pidw, pimlt, & |
---|
1320 | psaut, qracs, & |
---|
1321 | psaci, psacw, & |
---|
1322 | qsacw, praci, & |
---|
1323 | pmlts, pmltg, & |
---|
1324 | asss, y1, y2 |
---|
1325 | !JJS Y2(its:ite,jts:jte), DDE(NB) |
---|
1326 | |
---|
1327 | !JJS COMMON/BSAT/ |
---|
1328 | real, dimension (its:ite,jts:jte) :: & |
---|
1329 | praut, pracw, & |
---|
1330 | psfw, psfi, & |
---|
1331 | dgacs, dgacw, & |
---|
1332 | dgaci, dgacr, & |
---|
1333 | pgacs, wgacs, & |
---|
1334 | qgacw, wgaci, & |
---|
1335 | qgacr, pgwet, & |
---|
1336 | pgaut, pracs, & |
---|
1337 | psacr, qsacr, & |
---|
1338 | pgfr, psmlt, & |
---|
1339 | pgmlt, psdep, & |
---|
1340 | pgdep, piacr, & |
---|
1341 | y5, scv, & |
---|
1342 | tca, dwv, & |
---|
1343 | egs, y3, & |
---|
1344 | y4, ddb |
---|
1345 | |
---|
1346 | !JJS COMMON/BSAT1/ |
---|
1347 | real, dimension (its:ite,jts:jte) :: & |
---|
1348 | pt, qv, & |
---|
1349 | qc, qr, & |
---|
1350 | qi, qs, & |
---|
1351 | qg, tair, & |
---|
1352 | tairc, rtair, & |
---|
1353 | dep, dd, & |
---|
1354 | dd1, qvs, & |
---|
1355 | dm, rq, & |
---|
1356 | rsub1, col, & |
---|
1357 | cnd, ern, & |
---|
1358 | dlt1, dlt2, & |
---|
1359 | dlt3, dlt4, & |
---|
1360 | zr, vr, & |
---|
1361 | zs, vs, & |
---|
1362 | dbz, pssub, & |
---|
1363 | pgsub, dda |
---|
1364 | |
---|
1365 | !JJS COMMON/B5/ |
---|
1366 | real, dimension (its:ite,jts:jte,kts:kte) :: rho |
---|
1367 | real, dimension (kts:kte) :: & |
---|
1368 | tb, qb, rho1, & |
---|
1369 | ta, qa, ta1, qa1, & |
---|
1370 | coef, z1, z2, z3, & |
---|
1371 | am, am1, ub, vb, & |
---|
1372 | wb, ub1, vb1, rrho, & |
---|
1373 | rrho1, wbx |
---|
1374 | |
---|
1375 | !JJS COMMON/B6/ |
---|
1376 | real, dimension (its:ite,jts:jte,kts:kte) :: p0, pi, f0 |
---|
1377 | real, dimension (kts:kte) :: & |
---|
1378 | fd, fe, & |
---|
1379 | st, sv, & |
---|
1380 | sq, sc, & |
---|
1381 | se, sqa |
---|
1382 | |
---|
1383 | !JJS COMMON/BRH1/ |
---|
1384 | real, dimension (kts:kte) :: & |
---|
1385 | srro, qrro, sqc, sqr, & |
---|
1386 | sqi, sqs, sqg, stqc, & |
---|
1387 | stqr, stqi, stqs, stqg |
---|
1388 | real, dimension (nt) :: & |
---|
1389 | tqc, tqr, tqi, tqs, tqg |
---|
1390 | |
---|
1391 | !JJS common/bls/ y0(nx,ny),ts0new(nx,ny),qss0new(nx,ny) |
---|
1392 | |
---|
1393 | !JJS COMMON/BLS/ |
---|
1394 | real, dimension (its:ite,jts:jte) :: & |
---|
1395 | y0, ts0, qss0 |
---|
1396 | |
---|
1397 | !JJS COMMON/BI/ IT(its:ite,jts:jte), ICS(its:ite,jts:jte,4) |
---|
1398 | integer, dimension (its:ite,jts:jte) :: it |
---|
1399 | integer, dimension (its:ite,jts:jte, 4) :: ics |
---|
1400 | |
---|
1401 | !JJS COMMON/MICRO/ |
---|
1402 | real, dimension (its:ite,kts:kte,jts:jte) :: & |
---|
1403 | physc, physe, physd, & |
---|
1404 | physs, physm, physf |
---|
1405 | |
---|
1406 | !23456789012345678901234567890123456789012345678901234567890123456789012 |
---|
1407 | |
---|
1408 | ! |
---|
1409 | !JJS 1/3/2008 vvvvv |
---|
1410 | !JJS the following common blocks have been moved to the top of |
---|
1411 | !JJS module_mp_gsfcgce_driver.F |
---|
1412 | |
---|
1413 | ! real, dimension (31) :: aa1, aa2 |
---|
1414 | ! data aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, & |
---|
1415 | ! .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, & |
---|
1416 | ! .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, & |
---|
1417 | ! .1725e-4, .9175e-5, .4412e-5, .2252e-5, .9115e-6, & |
---|
1418 | ! .4876e-6, .3473e-6, .4758e-6, .6306e-6, .8573e-6, & |
---|
1419 | ! .7868e-6, .7192e-6, .6513e-6, .5956e-6, .5333e-6, & |
---|
1420 | ! .4834e-6/ |
---|
1421 | ! data aa2/.4006, .4831, .5320, .5307, .5319, & |
---|
1422 | ! .5249, .4888, .3894, .4047, .4318, & |
---|
1423 | ! .4771, .5183, .5463, .5651, .5813, & |
---|
1424 | ! .5655, .5478, .5203, .4906, .4447, & |
---|
1425 | ! .4126, .3960, .4149, .4320, .4506, & |
---|
1426 | ! .4483, .4460, .4433, .4413, .4382, & |
---|
1427 | ! .4361/ |
---|
1428 | |
---|
1429 | !JJS 1/3/2008 ^^^^^ |
---|
1430 | |
---|
1431 | ! |
---|
1432 | save |
---|
1433 | |
---|
1434 | ! write(6, *) 'in gsfcgce_open_ice2 at itimestep=',itimestep |
---|
1435 | ! write(6, *) 'ims=', ims, ' ime=', ime |
---|
1436 | ! write(6, *) 'jms=', jms, ' jme=', jme |
---|
1437 | ! write(6, *) 'kms=', kms, ' kme=', kme |
---|
1438 | ! write(6, *) 'its=', its, ' ite=', ite |
---|
1439 | ! write(6, *) 'jts=', jts, ' jte=', jte |
---|
1440 | ! write(6, *) 'kts=', kts, ' kte=', kte |
---|
1441 | ! write(6, *) 'ihail=', ihail |
---|
1442 | ! write(6, *) 'itaobraun=',itaobraun |
---|
1443 | ! write(6, *) 'ICE2=', ICE2 |
---|
1444 | ! write(6, *) 'istatmin=',istatmin |
---|
1445 | ! write(6, *) 'new_ice_sat=', new_ice_sat |
---|
1446 | ! write(6, *) 'id=', id |
---|
1447 | ! write(6, *) 'dt=', dt |
---|
1448 | ! endif |
---|
1449 | |
---|
1450 | !JJS convert from mks to cgs, and move from WRF grid to GCE grid |
---|
1451 | do k=kts,kte |
---|
1452 | do j=jts,jte |
---|
1453 | do i=its,ite |
---|
1454 | rho(i,j,k)=rho_mks(i,k,j)*0.001 |
---|
1455 | p0(i,j,k)=p0_mks(i,k,j)*10.0 |
---|
1456 | pi(i,j,k)=pi_mks(i,k,j) |
---|
1457 | dpt(i,j,k)=ptwrf(i,k,j) |
---|
1458 | dqv(i,j,k)=qvwrf(i,k,j) |
---|
1459 | qcl(i,j,k)=qlwrf(i,k,j) |
---|
1460 | qrn(i,j,k)=qrwrf(i,k,j) |
---|
1461 | qci(i,j,k)=qiwrf(i,k,j) |
---|
1462 | qcs(i,j,k)=qswrf(i,k,j) |
---|
1463 | qcg(i,j,k)=qgwrf(i,k,j) |
---|
1464 | !JJS 10/16/06 vvvv |
---|
1465 | ! dpt1(i,j,k)=ptwrfold(i,k,j) |
---|
1466 | ! dqv1(i,j,k)=qvwrfold(i,k,j) |
---|
1467 | ! qcl1(i,j,k)=qlwrfold(i,k,j) |
---|
1468 | ! qrn1(i,j,k)=qrwrfold(i,k,j) |
---|
1469 | ! qci1(i,j,k)=qiwrfold(i,k,j) |
---|
1470 | ! qcs1(i,j,k)=qswrfold(i,k,j) |
---|
1471 | ! qcg1(i,j,k)=qgwrfold(i,k,j) |
---|
1472 | !JJS 10/16/06 ^^^^ |
---|
1473 | enddo !i |
---|
1474 | enddo !j |
---|
1475 | enddo !k |
---|
1476 | |
---|
1477 | if (ice2 .eq. 2) ihail = 0 |
---|
1478 | |
---|
1479 | do k=kts,kte |
---|
1480 | do j=jts,jte |
---|
1481 | do i=its,ite |
---|
1482 | fv(i,j,k)=sqrt(rho(i,j,2)/rho(i,j,k)) |
---|
1483 | enddo !i |
---|
1484 | enddo !j |
---|
1485 | enddo !k |
---|
1486 | !JJS |
---|
1487 | |
---|
1488 | ! |
---|
1489 | ! ****** THREE CLASSES OF ICE-PHASE (LIN ET AL, 1983) ********* |
---|
1490 | |
---|
1491 | !JJS D22T=D2T |
---|
1492 | !JJS IF(IJKADV .EQ. 0) THEN |
---|
1493 | !JJS D2T=D2T |
---|
1494 | !JJS ELSE |
---|
1495 | d2t=dt |
---|
1496 | !JJS ENDIF |
---|
1497 | ! |
---|
1498 | ! itaobraun=0 ! original pint and pidep & see Tao and Simpson 1993 |
---|
1499 | itaobraun=1 ! see Tao et al. (2003) |
---|
1500 | ! |
---|
1501 | if ( itaobraun.eq.0 ) then |
---|
1502 | cn0=1.e-8 |
---|
1503 | !c beta=-.6 |
---|
1504 | elseif ( itaobraun.eq.1 ) then |
---|
1505 | cn0=1.e-6 |
---|
1506 | ! cn0=1.e-8 ! special |
---|
1507 | !c beta=-.46 |
---|
1508 | endif |
---|
1509 | !C TAO 2007 START |
---|
1510 | ! ICE2=2 ! 2ICE with cloud ice and graupel (no snow) - r2ice=1, r2iceg=0. |
---|
1511 | ! ICE2=1 ! 2ice with cloud ice and snow (no graupel) - r2iceg=1, r2ice=0. |
---|
1512 | !c |
---|
1513 | r2ice=1. |
---|
1514 | r2iceg=1. |
---|
1515 | if (ice2 .eq. 1) then |
---|
1516 | r2ice=0. |
---|
1517 | r2iceg=1. |
---|
1518 | endif |
---|
1519 | if (ice2 .eq. 2) then |
---|
1520 | r2ice=1. |
---|
1521 | r2iceg=0. |
---|
1522 | endif |
---|
1523 | !C TAO 2007 END |
---|
1524 | cmin=1.e-19 |
---|
1525 | cmin1=1.e-20 |
---|
1526 | cmin2=1.e-12 |
---|
1527 | ucor=3071.29/tnw**.75 |
---|
1528 | ucos=687.97*roqs**.25/tns**.75 |
---|
1529 | ucog=687.97*roqg**.25/tng**.75 |
---|
1530 | uwet=4.464**.95 |
---|
1531 | |
---|
1532 | rijl2 = 1. / (ide-ids) / (jde-jds) |
---|
1533 | |
---|
1534 | !JJScap $doacross local(j,i) |
---|
1535 | |
---|
1536 | !JJS DO 1 J=1,JMAX |
---|
1537 | !JJS DO 1 I=1,IMAX |
---|
1538 | do j=jts,jte |
---|
1539 | do i=its,ite |
---|
1540 | it(i,j)=1 |
---|
1541 | enddo |
---|
1542 | enddo |
---|
1543 | |
---|
1544 | f2=rd1*d2t |
---|
1545 | f3=rd2*d2t |
---|
1546 | |
---|
1547 | ft=dt/d2t |
---|
1548 | rft=rijl2*ft |
---|
1549 | a0=.5*istatmin*rijl2 |
---|
1550 | rt0=1./(t0-t00) |
---|
1551 | bw3=bw+3. |
---|
1552 | bs3=bs+3. |
---|
1553 | bg3=bg+3. |
---|
1554 | bsh5=2.5+bsh |
---|
1555 | bgh5=2.5+bgh |
---|
1556 | bwh5=2.5+bwh |
---|
1557 | bw6=bw+6. |
---|
1558 | bs6=bs+6. |
---|
1559 | betah=.5*beta |
---|
1560 | r10t=rn10*d2t |
---|
1561 | r11at=rn11a*d2t |
---|
1562 | r19bt=rn19b*d2t |
---|
1563 | r20t=-rn20*d2t |
---|
1564 | r23t=-rn23*d2t |
---|
1565 | r25a=rn25 |
---|
1566 | |
---|
1567 | ! ami50 for use in PINT |
---|
1568 | ami50=3.76e-8 |
---|
1569 | ami100=1.51e-7 |
---|
1570 | ami40=2.41e-8 |
---|
1571 | |
---|
1572 | !C ****************************************************************** |
---|
1573 | |
---|
1574 | !JJS DO 1000 K=2,kles |
---|
1575 | do 1000 k=kts,kte |
---|
1576 | kp=k+1 |
---|
1577 | !JJS tb0=ta1(k) |
---|
1578 | !JJS qb0=qa1(k) |
---|
1579 | tb0=0. |
---|
1580 | qb0=0. |
---|
1581 | |
---|
1582 | do 2000 j=jts,jte |
---|
1583 | do 2000 i=its,ite |
---|
1584 | |
---|
1585 | rp0=3.799052e3/p0(i,j,k) |
---|
1586 | pi0=pi(i,j,k) |
---|
1587 | pir=1./(pi(i,j,k)) |
---|
1588 | pr0=1./p0(i,j,k) |
---|
1589 | r00=rho(i,j,k) |
---|
1590 | r0s=sqrt(rho(i,j,k)) |
---|
1591 | !JJS RR0=RRHO(K) |
---|
1592 | rr0=1./rho(i,j,k) |
---|
1593 | !JJS RRS=SRRO(K) |
---|
1594 | rrs=sqrt(rr0) |
---|
1595 | !JJS RRQ=QRRO(K) |
---|
1596 | rrq=sqrt(rrs) |
---|
1597 | f0(i,j,k)=al/cp/pi(i,j,k) |
---|
1598 | f00=f0(i,j,k) |
---|
1599 | fv0=fv(i,j,k) |
---|
1600 | fvs=sqrt(fv(i,j,k)) |
---|
1601 | zrr=1.e5*zrc*rrq |
---|
1602 | zsr=1.e5*zsc*rrq |
---|
1603 | zgr=1.e5*zgc*rrq |
---|
1604 | cp409=c409*pi0 |
---|
1605 | cv409=c409*avc |
---|
1606 | cp580=c580*pi0 |
---|
1607 | cs580=c580*asc |
---|
1608 | alvr=r00*alv |
---|
1609 | afcp=afc*pir |
---|
1610 | avcp=avc*pir |
---|
1611 | ascp=asc*pir |
---|
1612 | vrcf=vrc*fv0 |
---|
1613 | vscf=vsc*fv0 |
---|
1614 | vgcf=vgc*fv0 |
---|
1615 | vgcr=vgc*rrs |
---|
1616 | dwvp=c879*pr0 |
---|
1617 | r3f=rn3*fv0 |
---|
1618 | r4f=rn4*fv0 |
---|
1619 | r5f=rn5*fv0 |
---|
1620 | r6f=rn6*fv0 |
---|
1621 | r7r=rn7*rr0 |
---|
1622 | r8r=rn8*rr0 |
---|
1623 | r9r=rn9*rr0 |
---|
1624 | r101f=rn101*fvs |
---|
1625 | r10ar=rn10a*r00 |
---|
1626 | r11rt=rn11*rr0*d2t |
---|
1627 | r12r=rn12*r00 |
---|
1628 | r14r=rn14*rrs |
---|
1629 | r14f=rn14*fv0 |
---|
1630 | r15r=rn15*rrs |
---|
1631 | r15ar=rn15a*rrs |
---|
1632 | r15f=rn15*fv0 |
---|
1633 | r15af=rn15a*fv0 |
---|
1634 | r16r=rn16*rr0 |
---|
1635 | r17r=rn17*rr0 |
---|
1636 | r17aq=rn17a*rrq |
---|
1637 | r17as=rn17a*fvs |
---|
1638 | r18r=rn18*rr0 |
---|
1639 | r19rt=rn19*rr0*d2t |
---|
1640 | r19aq=rn19a*rrq |
---|
1641 | r19as=rn19a*fvs |
---|
1642 | r20bq=rn20b*rrq |
---|
1643 | r20bs=rn20b*fvs |
---|
1644 | r22f=rn22*fv0 |
---|
1645 | r23af=rn23a*fvs |
---|
1646 | r23br=rn23b*r00 |
---|
1647 | r25rt=rn25*rr0*d2t |
---|
1648 | r31r=rn31*rr0 |
---|
1649 | r32rt=rn32*d2t*rrs |
---|
1650 | |
---|
1651 | !JJS DO 100 J=3,JLES |
---|
1652 | !JJS DO 100 I=3,ILES |
---|
1653 | pt(i,j)=dpt(i,j,k) |
---|
1654 | qv(i,j)=dqv(i,j,k) |
---|
1655 | qc(i,j)=qcl(i,j,k) |
---|
1656 | qr(i,j)=qrn(i,j,k) |
---|
1657 | qi(i,j)=qci(i,j,k) |
---|
1658 | qs(i,j)=qcs(i,j,k) |
---|
1659 | qg(i,j)=qcg(i,j,k) |
---|
1660 | ! IF (QV(I,J)+QB0 .LE. 0.) QV(I,J)=-QB0 |
---|
1661 | if (qc(i,j) .le. cmin1) qc(i,j)=0.0 |
---|
1662 | if (qr(i,j) .le. cmin1) qr(i,j)=0.0 |
---|
1663 | if (qi(i,j) .le. cmin1) qi(i,j)=0.0 |
---|
1664 | if (qs(i,j) .le. cmin1) qs(i,j)=0.0 |
---|
1665 | if (qg(i,j) .le. cmin1) qg(i,j)=0.0 |
---|
1666 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
1667 | tairc(i,j)=tair(i,j)-t0 |
---|
1668 | zr(i,j)=zrr |
---|
1669 | zs(i,j)=zsr |
---|
1670 | zg(i,j)=zgr |
---|
1671 | vr(i,j)=0.0 |
---|
1672 | vs(i,j)=0.0 |
---|
1673 | vg(i,j)=0.0 |
---|
1674 | |
---|
1675 | ! *** COMPUTE ZR,ZS,ZG,VR,VS,VG ***************************** |
---|
1676 | |
---|
1677 | if (qr(i,j) .gt. cmin1) then |
---|
1678 | dd(i,j)=r00*qr(i,j) |
---|
1679 | y1(i,j)=dd(i,j)**.25 |
---|
1680 | zr(i,j)=zrc/y1(i,j) |
---|
1681 | vr(i,j)=max(vrcf*dd(i,j)**bwq, 0.) |
---|
1682 | endif |
---|
1683 | |
---|
1684 | if (qs(i,j) .gt. cmin1) then |
---|
1685 | dd(i,j)=r00*qs(i,j) |
---|
1686 | y1(i,j)=dd(i,j)**.25 |
---|
1687 | zs(i,j)=zsc/y1(i,j) |
---|
1688 | vs(i,j)=max(vscf*dd(i,j)**bsq, 0.) |
---|
1689 | endif |
---|
1690 | |
---|
1691 | if (qg(i,j) .gt. cmin1) then |
---|
1692 | dd(i,j)=r00*qg(i,j) |
---|
1693 | y1(i,j)=dd(i,j)**.25 |
---|
1694 | zg(i,j)=zgc/y1(i,j) |
---|
1695 | if(ihail .eq. 1) then |
---|
1696 | vg(i,j)=max(vgcr*dd(i,j)**bgq, 0.) |
---|
1697 | else |
---|
1698 | vg(i,j)=max(vgcf*dd(i,j)**bgq, 0.) |
---|
1699 | endif |
---|
1700 | endif |
---|
1701 | |
---|
1702 | if (qr(i,j) .le. cmin2) vr(i,j)=0.0 |
---|
1703 | if (qs(i,j) .le. cmin2) vs(i,j)=0.0 |
---|
1704 | if (qg(i,j) .le. cmin2) vg(i,j)=0.0 |
---|
1705 | |
---|
1706 | ! ****************************************************************** |
---|
1707 | ! *** Y1 : DYNAMIC VISCOSITY OF AIR (U) |
---|
1708 | ! *** DWV : DIFFUSIVITY OF WATER VAPOR IN AIR (PI) |
---|
1709 | ! *** TCA : THERMAL CONDUCTIVITY OF AIR (KA) |
---|
1710 | ! *** Y2 : KINETIC VISCOSITY (V) |
---|
1711 | |
---|
1712 | y1(i,j)=c149*tair(i,j)**1.5/(tair(i,j)+120.) |
---|
1713 | dwv(i,j)=dwvp*tair(i,j)**1.81 |
---|
1714 | tca(i,j)=c141*y1(i,j) |
---|
1715 | scv(i,j)=1./((rr0*y1(i,j))**.1666667*dwv(i,j)**.3333333) |
---|
1716 | !JJS 100 CONTINUE |
---|
1717 | |
---|
1718 | !* 1 * PSAUT : AUTOCONVERSION OF QI TO QS ***1** |
---|
1719 | !* 3 * PSACI : ACCRETION OF QI TO QS ***3** |
---|
1720 | !* 4 * PSACW : ACCRETION OF QC BY QS (RIMING) (QSACW FOR PSMLT) ***4** |
---|
1721 | !* 5 * PRACI : ACCRETION OF QI BY QR ***5** |
---|
1722 | !* 6 * PIACR : ACCRETION OF QR OR QG BY QI ***6** |
---|
1723 | |
---|
1724 | !JJS DO 125 J=3,JLES |
---|
1725 | !JJS DO 125 I=3,ILES |
---|
1726 | psaut(i,j)=0.0 |
---|
1727 | psaci(i,j)=0.0 |
---|
1728 | praci(i,j)=0.0 |
---|
1729 | piacr(i,j)=0.0 |
---|
1730 | psacw(i,j)=0.0 |
---|
1731 | qsacw(i,j)=0.0 |
---|
1732 | dd(i,j)=1./zs(i,j)**bs3 |
---|
1733 | |
---|
1734 | if (tair(i,j).lt.t0) then |
---|
1735 | esi(i,j)=exp(.025*tairc(i,j)) |
---|
1736 | psaut(i,j)=r2iceg*max(rn1*esi(i,j)*(qi(i,j)-bnd1) ,0.0) |
---|
1737 | psaci(i,j)=r2iceg*r3f*esi(i,j)*qi(i,j)*dd(i,j) |
---|
1738 | !JJS 3/30/06 |
---|
1739 | ! to cut water to snow accretion by half |
---|
1740 | ! PSACW(I,J)=R4F*QC(I,J)*DD(I,J) |
---|
1741 | psacw(i,j)=r2iceg*0.5*r4f*qc(i,j)*dd(i,j) |
---|
1742 | !JJS 3/30/06 |
---|
1743 | praci(i,j)=r2iceg*r5f*qi(i,j)/zr(i,j)**bw3 |
---|
1744 | piacr(i,j)=r2iceg*r6f*qi(i,j)*(zr(i,j)**(-bw6)) |
---|
1745 | !JJS PIACR(I,J)=R6F*QI(I,J)/ZR(I,J)**BW6 |
---|
1746 | else |
---|
1747 | qsacw(i,j)=r2iceg*r4f*qc(i,j)*dd(i,j) |
---|
1748 | endif |
---|
1749 | |
---|
1750 | !* 21 * PRAUT AUTOCONVERSION OF QC TO QR **21** |
---|
1751 | !* 22 * PRACW : ACCRETION OF QC BY QR **22** |
---|
1752 | |
---|
1753 | pracw(i,j)=r22f*qc(i,j)/zr(i,j)**bw3 |
---|
1754 | praut(i,j)=0.0 |
---|
1755 | y1(i,j)=qc(i,j)-bnd3 |
---|
1756 | if (y1(i,j).gt.0.0) then |
---|
1757 | praut(i,j)=r00*y1(i,j)*y1(i,j)/(1.2e-4+rn21/y1(i,j)) |
---|
1758 | endif |
---|
1759 | |
---|
1760 | !* 12 * PSFW : BERGERON PROCESSES FOR QS (KOENING, 1971) **12** |
---|
1761 | !* 13 * PSFI : BERGERON PROCESSES FOR QS **13** |
---|
1762 | |
---|
1763 | psfw(i,j)=0.0 |
---|
1764 | psfi(i,j)=0.0 |
---|
1765 | pidep(i,j)=0.0 |
---|
1766 | |
---|
1767 | if(tair(i,j).lt.t0.and.qi(i,j).gt.cmin) then |
---|
1768 | y1(i,j)=max( min(tairc(i,j), -1.), -31.) |
---|
1769 | it(i,j)=int(abs(y1(i,j))) |
---|
1770 | y1(i,j)=rn12a(it(i,j)) |
---|
1771 | y2(i,j)=rn12b(it(i,j)) |
---|
1772 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1773 | psfw(i,j)=r2iceg* & |
---|
1774 | max(d2t*y1(i,j)*(y2(i,j)+r12r*qc(i,j))*qi(i,j),0.0) |
---|
1775 | rtair(i,j)=1./(tair(i,j)-c76) |
---|
1776 | y2(i,j)=exp(c218-c580*rtair(i,j)) |
---|
1777 | qsi(i,j)=rp0*y2(i,j) |
---|
1778 | esi(i,j)=c610*y2(i,j) |
---|
1779 | ssi(i,j)=(qv(i,j)+qb0)/qsi(i,j)-1. |
---|
1780 | r_nci=min(1.e-6*exp(-.46*tairc(i,j)),1.) |
---|
1781 | ! R_NCI=min(1.e-8*EXP(-.6*TAIRC(I,J)),1.) ! use Tao's |
---|
1782 | dm(i,j)=max( (qv(i,j)+qb0-qsi(i,j)), 0.) |
---|
1783 | rsub1(i,j)=cs580*qsi(i,j)*rtair(i,j)*rtair(i,j) |
---|
1784 | y3(i,j)=1./tair(i,j) |
---|
1785 | dd(i,j)=y3(i,j)*(rn30a*y3(i,j)-rn30b)+rn30c*tair(i,j)/esi(i,j) |
---|
1786 | y1(i,j)=206.18*ssi(i,j)/dd(i,j) |
---|
1787 | pidep(i,j)=y1(i,j)*sqrt(r_nci*qi(i,j)/r00) |
---|
1788 | dep(i,j)=dm(i,j)/(1.+rsub1(i,j))/d2t |
---|
1789 | if(dm(i,j).gt.cmin2) then |
---|
1790 | a2=1. |
---|
1791 | if(pidep(i,j).gt.dep(i,j).and.pidep(i,j).gt.cmin2) then |
---|
1792 | a2=dep(i,j)/pidep(i,j) |
---|
1793 | pidep(i,j)=dep(i,j) |
---|
1794 | endif |
---|
1795 | psfi(i,j)=r2iceg*a2*.5*qi(i,j)*y1(i,j)/(sqrt(ami100) & |
---|
1796 | -sqrt(ami40)) |
---|
1797 | elseif(dm(i,j).lt.-cmin2) then |
---|
1798 | ! |
---|
1799 | ! SUBLIMATION TERMS USED ONLY WHEN SATURATION ADJUSTMENT FOR ICE |
---|
1800 | ! IS TURNED OFF |
---|
1801 | ! |
---|
1802 | pidep(i,j)=0. |
---|
1803 | psfi(i,j)=0. |
---|
1804 | else |
---|
1805 | pidep(i,j)=0. |
---|
1806 | psfi(i,j)=0. |
---|
1807 | endif |
---|
1808 | endif |
---|
1809 | |
---|
1810 | !TTT***** QG=QG+MIN(PGDRY,PGWET) |
---|
1811 | !* 9 * PGACS : ACCRETION OF QS BY QG (DGACS,WGACS: DRY AND WET) ***9** |
---|
1812 | !* 14 * DGACW : ACCRETION OF QC BY QG (QGACW FOR PGMLT) **14** |
---|
1813 | !* 16 * DGACR : ACCRETION OF QR TO QG (QGACR FOR PGMLT) **16** |
---|
1814 | |
---|
1815 | if(qc(i,j)+qr(i,j).lt.1.e-4) then |
---|
1816 | ee1=.01 |
---|
1817 | else |
---|
1818 | ee1=1. |
---|
1819 | endif |
---|
1820 | ee2=0.09 |
---|
1821 | egs(i,j)=ee1*exp(ee2*tairc(i,j)) |
---|
1822 | ! EGS(I,J)=0.1 ! 6/15/02 tao's |
---|
1823 | if (tair(i,j).ge.t0) egs(i,j)=1.0 |
---|
1824 | y1(i,j)=abs(vg(i,j)-vs(i,j)) |
---|
1825 | y2(i,j)=zs(i,j)*zg(i,j) |
---|
1826 | y3(i,j)=5./y2(i,j) |
---|
1827 | y4(i,j)=.08*y3(i,j)*y3(i,j) |
---|
1828 | y5(i,j)=.05*y3(i,j)*y4(i,j) |
---|
1829 | dd(i,j)=y1(i,j)*(y3(i,j)/zs(i,j)**5+y4(i,j)/zs(i,j)**3 & |
---|
1830 | +y5(i,j)/zs(i,j)) |
---|
1831 | pgacs(i,j)=r2ice*r2iceg*r9r*egs(i,j)*dd(i,j) |
---|
1832 | !JJS 1/3/06 from Steve and Chunglin |
---|
1833 | if (ihail.eq.1) then |
---|
1834 | dgacs(i,j)=pgacs(i,j) |
---|
1835 | else |
---|
1836 | dgacs(i,j)=0. |
---|
1837 | endif |
---|
1838 | !JJS 1/3/06 from Steve and Chunglin |
---|
1839 | wgacs(i,j)=r2ice*r2iceg*r9r*dd(i,j) |
---|
1840 | ! WGACS(I,J)=0. ! 6/15/02 tao's |
---|
1841 | y1(i,j)=1./zg(i,j)**bg3 |
---|
1842 | |
---|
1843 | if(ihail .eq. 1) then |
---|
1844 | dgacw(i,j)=r2ice*max(r14r*qc(i,j)*y1(i,j), 0.0) |
---|
1845 | else |
---|
1846 | dgacw(i,j)=r2ice*max(r14f*qc(i,j)*y1(i,j), 0.0) |
---|
1847 | endif |
---|
1848 | |
---|
1849 | qgacw(i,j)=dgacw(i,j) |
---|
1850 | y1(i,j)=abs(vg(i,j)-vr(i,j)) |
---|
1851 | y2(i,j)=zr(i,j)*zg(i,j) |
---|
1852 | y3(i,j)=5./y2(i,j) |
---|
1853 | y4(i,j)=.08*y3(i,j)*y3(i,j) |
---|
1854 | y5(i,j)=.05*y3(i,j)*y4(i,j) |
---|
1855 | dd(i,j)=r16r*y1(i,j)*(y3(i,j)/zr(i,j)**5+y4(i,j)/zr(i,j)**3 & |
---|
1856 | +y5(i,j)/zr(i,j)) |
---|
1857 | dgacr(i,j)=r2ice*max(dd(i,j), 0.0) |
---|
1858 | qgacr(i,j)=dgacr(i,j) |
---|
1859 | |
---|
1860 | if (tair(i,j).ge.t0) then |
---|
1861 | dgacs(i,j)=0.0 |
---|
1862 | wgacs(i,j)=0.0 |
---|
1863 | dgacw(i,j)=0.0 |
---|
1864 | dgacr(i,j)=0.0 |
---|
1865 | else |
---|
1866 | pgacs(i,j)=0.0 |
---|
1867 | qgacw(i,j)=0.0 |
---|
1868 | qgacr(i,j)=0.0 |
---|
1869 | endif |
---|
1870 | |
---|
1871 | !*******PGDRY : DGACW+DGACI+DGACR+DGACS ****** |
---|
1872 | !* 15 * DGACI : ACCRETION OF QI BY QG (WGACI FOR WET GROWTH) **15** |
---|
1873 | !* 17 * PGWET : WET GROWTH OF QG **17** |
---|
1874 | |
---|
1875 | dgaci(i,j)=0.0 |
---|
1876 | wgaci(i,j)=0.0 |
---|
1877 | pgwet(i,j)=0.0 |
---|
1878 | |
---|
1879 | if (tair(i,j).lt.t0) then |
---|
1880 | y1(i,j)=qi(i,j)/zg(i,j)**bg3 |
---|
1881 | if (ihail.eq.1) then |
---|
1882 | dgaci(i,j)=r2ice*r15r*y1(i,j) |
---|
1883 | wgaci(i,j)=r2ice*r15ar*y1(i,j) |
---|
1884 | ! WGACI(I,J)=0. ! 6/15/02 tao's |
---|
1885 | else |
---|
1886 | |
---|
1887 | !JJS DGACI(I,J)=r2ice*R15F*Y1(I,J) |
---|
1888 | dgaci(i,j)=0. |
---|
1889 | wgaci(i,j)=r2ice*r15af*y1(i,j) |
---|
1890 | ! WGACI(I,J)=0. ! 6/15/02 tao's |
---|
1891 | endif |
---|
1892 | ! |
---|
1893 | if (tairc(i,j).ge.-50.) then |
---|
1894 | if (alf+rn17c*tairc(i,j) .eq. 0.) then |
---|
1895 | write(91,*) itimestep, i,j,k, alf, rn17c, tairc(i,j) |
---|
1896 | endif |
---|
1897 | y1(i,j)=1./(alf+rn17c*tairc(i,j)) |
---|
1898 | if (ihail.eq.1) then |
---|
1899 | y3(i,j)=.78/zg(i,j)**2+r17aq*scv(i,j)/zg(i,j)**bgh5 |
---|
1900 | else |
---|
1901 | y3(i,j)=.78/zg(i,j)**2+r17as*scv(i,j)/zg(i,j)**bgh5 |
---|
1902 | endif |
---|
1903 | y4(i,j)=alvr*dwv(i,j)*(rp0-(qv(i,j)+qb0)) & |
---|
1904 | -tca(i,j)*tairc(i,j) |
---|
1905 | dd(i,j)=y1(i,j)*(r17r*y4(i,j)*y3(i,j) & |
---|
1906 | +(wgaci(i,j)+wgacs(i,j))*(alf+rn17b*tairc(i,j))) |
---|
1907 | pgwet(i,j)=r2ice*max(dd(i,j), 0.0) |
---|
1908 | endif |
---|
1909 | endif |
---|
1910 | !JJS 125 CONTINUE |
---|
1911 | |
---|
1912 | !******** HANDLING THE NEGATIVE CLOUD WATER (QC) ****************** |
---|
1913 | !******** HANDLING THE NEGATIVE CLOUD ICE (QI) ****************** |
---|
1914 | |
---|
1915 | !JJS DO 150 J=3,JLES |
---|
1916 | !JJS DO 150 I=3,ILES |
---|
1917 | |
---|
1918 | y1(i,j)=qc(i,j)/d2t |
---|
1919 | psacw(i,j)=min(y1(i,j), psacw(i,j)) |
---|
1920 | praut(i,j)=min(y1(i,j), praut(i,j)) |
---|
1921 | pracw(i,j)=min(y1(i,j), pracw(i,j)) |
---|
1922 | psfw(i,j)= min(y1(i,j), psfw(i,j)) |
---|
1923 | dgacw(i,j)=min(y1(i,j), dgacw(i,j)) |
---|
1924 | qsacw(i,j)=min(y1(i,j), qsacw(i,j)) |
---|
1925 | qgacw(i,j)=min(y1(i,j), qgacw(i,j)) |
---|
1926 | |
---|
1927 | y1(i,j)=(psacw(i,j)+praut(i,j)+pracw(i,j)+psfw(i,j) & |
---|
1928 | +dgacw(i,j)+qsacw(i,j)+qgacw(i,j))*d2t |
---|
1929 | qc(i,j)=qc(i,j)-y1(i,j) |
---|
1930 | |
---|
1931 | if (qc(i,j) .lt. 0.0) then |
---|
1932 | a1=1. |
---|
1933 | if (y1(i,j) .ne. 0.0) a1=qc(i,j)/y1(i,j)+1. |
---|
1934 | psacw(i,j)=psacw(i,j)*a1 |
---|
1935 | praut(i,j)=praut(i,j)*a1 |
---|
1936 | pracw(i,j)=pracw(i,j)*a1 |
---|
1937 | psfw(i,j)=psfw(i,j)*a1 |
---|
1938 | dgacw(i,j)=dgacw(i,j)*a1 |
---|
1939 | qsacw(i,j)=qsacw(i,j)*a1 |
---|
1940 | qgacw(i,j)=qgacw(i,j)*a1 |
---|
1941 | qc(i,j)=0.0 |
---|
1942 | endif |
---|
1943 | !c |
---|
1944 | ! |
---|
1945 | !******** SHED PROCESS (WGACR=PGWET-DGACW-WGACI-WGACS) |
---|
1946 | !c |
---|
1947 | wgacr(i,j)=pgwet(i,j)-dgacw(i,j)-wgaci(i,j)-wgacs(i,j) |
---|
1948 | y2(i,j)=dgacw(i,j)+dgaci(i,j)+dgacr(i,j)+dgacs(i,j) |
---|
1949 | if (pgwet(i,j).ge.y2(i,j)) then |
---|
1950 | wgacr(i,j)=0.0 |
---|
1951 | wgaci(i,j)=0.0 |
---|
1952 | wgacs(i,j)=0.0 |
---|
1953 | else |
---|
1954 | dgacr(i,j)=0.0 |
---|
1955 | dgaci(i,j)=0.0 |
---|
1956 | dgacs(i,j)=0.0 |
---|
1957 | endif |
---|
1958 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
1959 | !c |
---|
1960 | y1(i,j)=qi(i,j)/d2t |
---|
1961 | psaut(i,j)=min(y1(i,j), psaut(i,j)) |
---|
1962 | psaci(i,j)=min(y1(i,j), psaci(i,j)) |
---|
1963 | praci(i,j)=min(y1(i,j), praci(i,j)) |
---|
1964 | psfi(i,j)= min(y1(i,j), psfi(i,j)) |
---|
1965 | dgaci(i,j)=min(y1(i,j), dgaci(i,j)) |
---|
1966 | wgaci(i,j)=min(y1(i,j), wgaci(i,j)) |
---|
1967 | ! |
---|
1968 | y2(i,j)=(psaut(i,j)+psaci(i,j)+praci(i,j)+psfi(i,j) & |
---|
1969 | +dgaci(i,j)+wgaci(i,j))*d2t |
---|
1970 | qi(i,j)=qi(i,j)-y2(i,j)+pidep(i,j)*d2t |
---|
1971 | |
---|
1972 | if (qi(i,j).lt.0.0) then |
---|
1973 | a2=1. |
---|
1974 | if (y2(i,j) .ne. 0.0) a2=qi(i,j)/y2(i,j)+1. |
---|
1975 | psaut(i,j)=psaut(i,j)*a2 |
---|
1976 | psaci(i,j)=psaci(i,j)*a2 |
---|
1977 | praci(i,j)=praci(i,j)*a2 |
---|
1978 | psfi(i,j)=psfi(i,j)*a2 |
---|
1979 | dgaci(i,j)=dgaci(i,j)*a2 |
---|
1980 | wgaci(i,j)=wgaci(i,j)*a2 |
---|
1981 | qi(i,j)=0.0 |
---|
1982 | endif |
---|
1983 | ! |
---|
1984 | dlt3(i,j)=0.0 |
---|
1985 | dlt2(i,j)=0.0 |
---|
1986 | ! |
---|
1987 | |
---|
1988 | ! DLT4(I,J)=1.0 |
---|
1989 | ! if(qc(i,j) .gt. 5.e-4) dlt4(i,j)=0.0 |
---|
1990 | ! if(qs(i,j) .le. 1.e-4) dlt4(i,j)=1.0 |
---|
1991 | ! |
---|
1992 | ! IF (TAIR(I,J).ge.T0) THEN |
---|
1993 | ! DLT4(I,J)=0.0 |
---|
1994 | ! ENDIF |
---|
1995 | |
---|
1996 | if (tair(i,j).lt.t0) then |
---|
1997 | if (qr(i,j).lt.1.e-4) then |
---|
1998 | dlt3(i,j)=1.0 |
---|
1999 | dlt2(i,j)=1.0 |
---|
2000 | endif |
---|
2001 | if (qs(i,j).ge.1.e-4) then |
---|
2002 | dlt2(i,j)=0.0 |
---|
2003 | endif |
---|
2004 | endif |
---|
2005 | |
---|
2006 | if (ice2 .eq. 1) then |
---|
2007 | dlt3(i,j)=1.0 |
---|
2008 | dlt2(i,j)=1.0 |
---|
2009 | endif |
---|
2010 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2011 | pr(i,j)=(qsacw(i,j)+praut(i,j)+pracw(i,j)+qgacw(i,j))*d2t |
---|
2012 | ps(i,j)=(psaut(i,j)+psaci(i,j)+psacw(i,j)+psfw(i,j) & |
---|
2013 | +psfi(i,j)+dlt3(i,j)*praci(i,j))*d2t |
---|
2014 | ! PS(I,J)=(PSAUT(I,J)+PSACI(I,J)+dlt4(i,j)*PSACW(I,J) |
---|
2015 | ! 1 +PSFW(I,J)+PSFI(I,J)+DLT3(I,J)*PRACI(I,J))*D2T |
---|
2016 | pg(i,j)=((1.-dlt3(i,j))*praci(i,j)+dgaci(i,j)+wgaci(i,j) & |
---|
2017 | +dgacw(i,j))*d2t |
---|
2018 | ! PG(I,J)=((1.-DLT3(I,J))*PRACI(I,J)+DGACI(I,J)+WGACI(I,J) |
---|
2019 | ! 1 +DGACW(I,J)+(1.-dlt4(i,j))*PSACW(I,J))*D2T |
---|
2020 | |
---|
2021 | !JJS 150 CONTINUE |
---|
2022 | |
---|
2023 | !* 7 * PRACS : ACCRETION OF QS BY QR ***7** |
---|
2024 | !* 8 * PSACR : ACCRETION OF QR BY QS (QSACR FOR PSMLT) ***8** |
---|
2025 | |
---|
2026 | !JJS DO 175 J=3,JLES |
---|
2027 | !JJS DO 175 I=3,ILES |
---|
2028 | |
---|
2029 | y1(i,j)=abs(vr(i,j)-vs(i,j)) |
---|
2030 | y2(i,j)=zr(i,j)*zs(i,j) |
---|
2031 | y3(i,j)=5./y2(i,j) |
---|
2032 | y4(i,j)=.08*y3(i,j)*y3(i,j) |
---|
2033 | y5(i,j)=.05*y3(i,j)*y4(i,j) |
---|
2034 | pracs(i,j)=r2ice*r2iceg*r7r*y1(i,j)*(y3(i,j)/zs(i,j)**5 & |
---|
2035 | +y4(i,j)/zs(i,j)**3+y5(i,j)/zs(i,j)) |
---|
2036 | psacr(i,j)=r2iceg*r8r*y1(i,j)*(y3(i,j)/zr(i,j)**5 & |
---|
2037 | +y4(i,j)/zr(i,j)**3+y5(i,j)/zr(i,j)) |
---|
2038 | qsacr(i,j)=psacr(i,j) |
---|
2039 | |
---|
2040 | if (tair(i,j).ge.t0) then |
---|
2041 | pracs(i,j)=0.0 |
---|
2042 | psacr(i,j)=0.0 |
---|
2043 | else |
---|
2044 | qsacr(i,j)=0.0 |
---|
2045 | endif |
---|
2046 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2047 | !* 2 * PGAUT : AUTOCONVERSION OF QS TO QG ***2** |
---|
2048 | !* 18 * PGFR : FREEZING OF QR TO QG **18** |
---|
2049 | |
---|
2050 | pgaut(i,j)=0.0 |
---|
2051 | pgfr(i,j)=0.0 |
---|
2052 | |
---|
2053 | if (tair(i,j) .lt. t0) then |
---|
2054 | ! Y1(I,J)=EXP(.09*TAIRC(I,J)) |
---|
2055 | ! PGAUT(I,J)=r2iceg*max(RN2*Y1(I,J)*(QS(I,J)-BND2), 0.0) |
---|
2056 | ! IF(IHAIL.EQ.1) PGAUT(I,J)=max(RN2*Y1(I,J)*(QS(I,J)-BND2),0.0) |
---|
2057 | y2(i,j)=exp(rn18a*(t0-tair(i,j))) |
---|
2058 | !JJS PGFR(I,J)=r2ice*max(R18R*(Y2(I,J)-1.)/ZR(I,J)**7., 0.0) |
---|
2059 | ! pgfr(i,j)=r2ice*max(r18r*(y2(i,j)-1.)* & |
---|
2060 | ! (zr(i,j)**(-7.)), 0.0) |
---|
2061 | ! modify to prevent underflow on some computers (JD) |
---|
2062 | temp = 1./zr(i,j) |
---|
2063 | temp = temp*temp*temp*temp*temp*temp*temp |
---|
2064 | pgfr(i,j)=r2ice*max(r18r*(y2(i,j)-1.)* & |
---|
2065 | temp, 0.0) |
---|
2066 | endif |
---|
2067 | |
---|
2068 | !JJS 175 CONTINUE |
---|
2069 | |
---|
2070 | !******** HANDLING THE NEGATIVE RAIN WATER (QR) ******************* |
---|
2071 | !******** HANDLING THE NEGATIVE SNOW (QS) ******************* |
---|
2072 | |
---|
2073 | !JJS DO 200 J=3,JLES |
---|
2074 | !JJS DO 200 I=3,ILES |
---|
2075 | |
---|
2076 | y1(i,j)=qr(i,j)/d2t |
---|
2077 | y2(i,j)=-qg(i,j)/d2t |
---|
2078 | piacr(i,j)=min(y1(i,j), piacr(i,j)) |
---|
2079 | dgacr(i,j)=min(y1(i,j), dgacr(i,j)) |
---|
2080 | wgacr(i,j)=min(y1(i,j), wgacr(i,j)) |
---|
2081 | wgacr(i,j)=max(y2(i,j), wgacr(i,j)) |
---|
2082 | psacr(i,j)=min(y1(i,j), psacr(i,j)) |
---|
2083 | pgfr(i,j)= min(y1(i,j), pgfr(i,j)) |
---|
2084 | del=0. |
---|
2085 | if(wgacr(i,j) .lt. 0.) del=1. |
---|
2086 | y1(i,j)=(piacr(i,j)+dgacr(i,j)+(1.-del)*wgacr(i,j) & |
---|
2087 | +psacr(i,j)+pgfr(i,j))*d2t |
---|
2088 | qr(i,j)=qr(i,j)+pr(i,j)-y1(i,j)-del*wgacr(i,j)*d2t |
---|
2089 | if (qr(i,j) .lt. 0.0) then |
---|
2090 | a1=1. |
---|
2091 | if(y1(i,j) .ne. 0.) a1=qr(i,j)/y1(i,j)+1. |
---|
2092 | piacr(i,j)=piacr(i,j)*a1 |
---|
2093 | dgacr(i,j)=dgacr(i,j)*a1 |
---|
2094 | if (wgacr(i,j).gt.0.) wgacr(i,j)=wgacr(i,j)*a1 |
---|
2095 | pgfr(i,j)=pgfr(i,j)*a1 |
---|
2096 | psacr(i,j)=psacr(i,j)*a1 |
---|
2097 | qr(i,j)=0.0 |
---|
2098 | endif |
---|
2099 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2100 | prn(i,j)=d2t*((1.-dlt3(i,j))*piacr(i,j)+dgacr(i,j) & |
---|
2101 | +wgacr(i,j)+(1.-dlt2(i,j))*psacr(i,j)+pgfr(i,j)) |
---|
2102 | ps(i,j)=ps(i,j)+d2t*(dlt3(i,j)*piacr(i,j) & |
---|
2103 | +dlt2(i,j)*psacr(i,j)) |
---|
2104 | pracs(i,j)=(1.-dlt2(i,j))*pracs(i,j) |
---|
2105 | y1(i,j)=qs(i,j)/d2t |
---|
2106 | pgacs(i,j)=min(y1(i,j), pgacs(i,j)) |
---|
2107 | dgacs(i,j)=min(y1(i,j), dgacs(i,j)) |
---|
2108 | wgacs(i,j)=min(y1(i,j), wgacs(i,j)) |
---|
2109 | pgaut(i,j)=min(y1(i,j), pgaut(i,j)) |
---|
2110 | pracs(i,j)=min(y1(i,j), pracs(i,j)) |
---|
2111 | psn(i,j)=d2t*(pgacs(i,j)+dgacs(i,j)+wgacs(i,j) & |
---|
2112 | +pgaut(i,j)+pracs(i,j)) |
---|
2113 | qs(i,j)=qs(i,j)+ps(i,j)-psn(i,j) |
---|
2114 | |
---|
2115 | if (qs(i,j).lt.0.0) then |
---|
2116 | a2=1. |
---|
2117 | if (psn(i,j) .ne. 0.0) a2=qs(i,j)/psn(i,j)+1. |
---|
2118 | pgacs(i,j)=pgacs(i,j)*a2 |
---|
2119 | dgacs(i,j)=dgacs(i,j)*a2 |
---|
2120 | wgacs(i,j)=wgacs(i,j)*a2 |
---|
2121 | pgaut(i,j)=pgaut(i,j)*a2 |
---|
2122 | pracs(i,j)=pracs(i,j)*a2 |
---|
2123 | psn(i,j)=psn(i,j)*a2 |
---|
2124 | qs(i,j)=0.0 |
---|
2125 | endif |
---|
2126 | ! |
---|
2127 | !C PSN(I,J)=D2T*(PGACS(I,J)+DGACS(I,J)+WGACS(I,J) |
---|
2128 | !c +PGAUT(I,J)+PRACS(I,J)) |
---|
2129 | y2(i,j)=d2t*(psacw(i,j)+psfw(i,j)+dgacw(i,j)+piacr(i,j) & |
---|
2130 | +dgacr(i,j)+wgacr(i,j)+psacr(i,j)+pgfr(i,j)) |
---|
2131 | pt(i,j)=pt(i,j)+afcp*y2(i,j) |
---|
2132 | qg(i,j)=qg(i,j)+pg(i,j)+prn(i,j)+psn(i,j) |
---|
2133 | |
---|
2134 | !JJS 200 CONTINUE |
---|
2135 | |
---|
2136 | !* 11 * PSMLT : MELTING OF QS **11** |
---|
2137 | !* 19 * PGMLT : MELTING OF QG TO QR **19** |
---|
2138 | |
---|
2139 | !JJS DO 225 J=3,JLES |
---|
2140 | !JJS DO 225 I=3,ILES |
---|
2141 | |
---|
2142 | psmlt(i,j)=0.0 |
---|
2143 | pgmlt(i,j)=0.0 |
---|
2144 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2145 | |
---|
2146 | if (tair(i,j).ge.t0) then |
---|
2147 | tairc(i,j)=tair(i,j)-t0 |
---|
2148 | y1(i,j)=tca(i,j)*tairc(i,j)-alvr*dwv(i,j) & |
---|
2149 | *(rp0-(qv(i,j)+qb0)) |
---|
2150 | y2(i,j)=.78/zs(i,j)**2+r101f*scv(i,j)/zs(i,j)**bsh5 |
---|
2151 | dd(i,j)=r11rt*y1(i,j)*y2(i,j)+r11at*tairc(i,j) & |
---|
2152 | *(qsacw(i,j)+qsacr(i,j)) |
---|
2153 | psmlt(i,j)=r2iceg*max(0.0, min(dd(i,j), qs(i,j))) |
---|
2154 | |
---|
2155 | if(ihail.eq.1) then |
---|
2156 | y3(i,j)=.78/zg(i,j)**2+r19aq*scv(i,j)/zg(i,j)**bgh5 |
---|
2157 | else |
---|
2158 | y3(i,j)=.78/zg(i,j)**2+r19as*scv(i,j)/zg(i,j)**bgh5 |
---|
2159 | endif |
---|
2160 | |
---|
2161 | dd1(i,j)=r19rt*y1(i,j)*y3(i,j)+r19bt*tairc(i,j) & |
---|
2162 | *(qgacw(i,j)+qgacr(i,j)) |
---|
2163 | pgmlt(i,j)=r2ice*max(0.0, min(dd1(i,j), qg(i,j))) |
---|
2164 | pt(i,j)=pt(i,j)-afcp*(psmlt(i,j)+pgmlt(i,j)) |
---|
2165 | qr(i,j)=qr(i,j)+psmlt(i,j)+pgmlt(i,j) |
---|
2166 | qs(i,j)=qs(i,j)-psmlt(i,j) |
---|
2167 | qg(i,j)=qg(i,j)-pgmlt(i,j) |
---|
2168 | endif |
---|
2169 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2170 | !* 24 * PIHOM : HOMOGENEOUS FREEZING OF QC TO QI (T < T00) **24** |
---|
2171 | !* 25 * PIDW : DEPOSITION GROWTH OF QC TO QI ( T0 < T <= T00) **25** |
---|
2172 | !* 26 * PIMLT : MELTING OF QI TO QC (T >= T0) **26** |
---|
2173 | |
---|
2174 | if (qc(i,j).le.cmin1) qc(i,j)=0.0 |
---|
2175 | if (qi(i,j).le.cmin1) qi(i,j)=0.0 |
---|
2176 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2177 | |
---|
2178 | if(tair(i,j).le.t00) then |
---|
2179 | pihom(i,j)=qc(i,j) |
---|
2180 | else |
---|
2181 | pihom(i,j)=0.0 |
---|
2182 | endif |
---|
2183 | if(tair(i,j).ge.t0) then |
---|
2184 | pimlt(i,j)=qi(i,j) |
---|
2185 | else |
---|
2186 | pimlt(i,j)=0.0 |
---|
2187 | endif |
---|
2188 | pidw(i,j)=0.0 |
---|
2189 | |
---|
2190 | if (tair(i,j).lt.t0 .and. tair(i,j).gt.t00) then |
---|
2191 | tairc(i,j)=tair(i,j)-t0 |
---|
2192 | y1(i,j)=max( min(tairc(i,j), -1.), -31.) |
---|
2193 | it(i,j)=int(abs(y1(i,j))) |
---|
2194 | y2(i,j)=aa1(it(i,j)) |
---|
2195 | y3(i,j)=aa2(it(i,j)) |
---|
2196 | y4(i,j)=exp(abs(beta*tairc(i,j))) |
---|
2197 | y5(i,j)=(r00*qi(i,j)/(r25a*y4(i,j)))**y3(i,j) |
---|
2198 | pidw(i,j)=min(r25rt*y2(i,j)*y4(i,j)*y5(i,j), qc(i,j)) |
---|
2199 | endif |
---|
2200 | |
---|
2201 | y1(i,j)=pihom(i,j)-pimlt(i,j)+pidw(i,j) |
---|
2202 | pt(i,j)=pt(i,j)+afcp*y1(i,j)+ascp*(pidep(i,j))*d2t |
---|
2203 | qv(i,j)=qv(i,j)-(pidep(i,j))*d2t |
---|
2204 | qc(i,j)=qc(i,j)-y1(i,j) |
---|
2205 | qi(i,j)=qi(i,j)+y1(i,j) |
---|
2206 | |
---|
2207 | !* 31 * PINT : INITIATION OF QI **31** |
---|
2208 | !* 32 * PIDEP : DEPOSITION OF QI **32** |
---|
2209 | ! |
---|
2210 | ! CALCULATION OF PINT USES DIFFERENT VALUES OF THE INTERCEPT AND SLOPE FOR |
---|
2211 | ! THE FLETCHER EQUATION. ALSO, ONLY INITIATE MORE ICE IF THE NEW NUMBER |
---|
2212 | ! CONCENTRATION EXCEEDS THAT ALREADY PRESENT. |
---|
2213 | !* 31 * pint : initiation of qi **31** |
---|
2214 | !* 32 * pidep : deposition of qi **32** |
---|
2215 | pint(i,j)=0.0 |
---|
2216 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2217 | if ( itaobraun.eq.1 ) then |
---|
2218 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2219 | if (tair(i,j) .lt. t0) then |
---|
2220 | ! if (qi(i,j) .le. cmin) qi(i,j)=0. |
---|
2221 | if (qi(i,j) .le. cmin2) qi(i,j)=0. |
---|
2222 | tairc(i,j)=tair(i,j)-t0 |
---|
2223 | rtair(i,j)=1./(tair(i,j)-c76) |
---|
2224 | y2(i,j)=exp(c218-c580*rtair(i,j)) |
---|
2225 | qsi(i,j)=rp0*y2(i,j) |
---|
2226 | esi(i,j)=c610*y2(i,j) |
---|
2227 | ssi(i,j)=(qv(i,j)+qb0)/qsi(i,j)-1. |
---|
2228 | ami50=3.76e-8 |
---|
2229 | |
---|
2230 | !ccif ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6 |
---|
2231 | !ccif ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8 |
---|
2232 | |
---|
2233 | y1(i,j)=1./tair(i,j) |
---|
2234 | |
---|
2235 | !cc insert a restriction on ice collection that ice collection |
---|
2236 | !cc should be stopped at -30 c (with cn0=1.e-6, beta=-.46) |
---|
2237 | |
---|
2238 | tairccri=tairc(i,j) ! in degree c |
---|
2239 | if(tairccri.le.-30.) tairccri=-30. |
---|
2240 | |
---|
2241 | ! y2(i,j)=exp(betah*tairc(i,j)) |
---|
2242 | y2(i,j)=exp(betah*tairccri) |
---|
2243 | y3(i,j)=sqrt(qi(i,j)) |
---|
2244 | dd(i,j)=y1(i,j)*(rn10a*y1(i,j)-rn10b)+rn10c*tair(i,j) & |
---|
2245 | /esi(i,j) |
---|
2246 | pidep(i,j)=max(r32rt*ssi(i,j)*y2(i,j)*y3(i,j)/dd(i,j), 0.e0) |
---|
2247 | |
---|
2248 | r_nci=min(cn0*exp(beta*tairc(i,j)),1.) |
---|
2249 | ! r_nci=min(1.e-6*exp(-.46*tairc(i,j)),1.) |
---|
2250 | |
---|
2251 | dd(i,j)=max(1.e-9*r_nci/r00-qi(i,j)*1.e-9/ami50, 0.) |
---|
2252 | dm(i,j)=max( (qv(i,j)+qb0-qsi(i,j)), 0.0) |
---|
2253 | rsub1(i,j)=cs580*qsi(i,j)*rtair(i,j)*rtair(i,j) |
---|
2254 | dep(i,j)=dm(i,j)/(1.+rsub1(i,j)) |
---|
2255 | pint(i,j)=max(min(dd(i,j), dm(i,j)), 0.) |
---|
2256 | |
---|
2257 | ! pint(i,j)=min(pint(i,j), dep(i,j)) |
---|
2258 | pint(i,j)=min(pint(i,j)+pidep(i,j), dep(i,j)) |
---|
2259 | |
---|
2260 | ! if (pint(i,j) .le. cmin) pint(i,j)=0. |
---|
2261 | if (pint(i,j) .le. cmin2) pint(i,j)=0. |
---|
2262 | pt(i,j)=pt(i,j)+ascp*pint(i,j) |
---|
2263 | qv(i,j)=qv(i,j)-pint(i,j) |
---|
2264 | qi(i,j)=qi(i,j)+pint(i,j) |
---|
2265 | endif |
---|
2266 | endif ! if ( itaobraun.eq.1 ) |
---|
2267 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2268 | ! |
---|
2269 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2270 | if ( itaobraun.eq.0 ) then |
---|
2271 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2272 | if (tair(i,j) .lt. t0) then |
---|
2273 | if (qi(i,j) .le. cmin1) qi(i,j)=0. |
---|
2274 | tairc(i,j)=tair(i,j)-t0 |
---|
2275 | dd(i,j)=r31r*exp(beta*tairc(i,j)) |
---|
2276 | rtair(i,j)=1./(tair(i,j)-c76) |
---|
2277 | y2(i,j)=exp(c218-c580*rtair(i,j)) |
---|
2278 | qsi(i,j)=rp0*y2(i,j) |
---|
2279 | esi(i,j)=c610*y2(i,j) |
---|
2280 | ssi(i,j)=(qv(i,j)+qb0)/qsi(i,j)-1. |
---|
2281 | dm(i,j)=max( (qv(i,j)+qb0-qsi(i,j)), 0.) |
---|
2282 | rsub1(i,j)=cs580*qsi(i,j)*rtair(i,j)*rtair(i,j) |
---|
2283 | dep(i,j)=dm(i,j)/(1.+rsub1(i,j)) |
---|
2284 | pint(i,j)=max(min(dd(i,j), dm(i,j)), 0.) |
---|
2285 | y1(i,j)=1./tair(i,j) |
---|
2286 | y2(i,j)=exp(betah*tairc(i,j)) |
---|
2287 | y3(i,j)=sqrt(qi(i,j)) |
---|
2288 | dd(i,j)=y1(i,j)*(rn10a*y1(i,j)-rn10b) & |
---|
2289 | +rn10c*tair(i,j)/esi(i,j) |
---|
2290 | pidep(i,j)=max(r32rt*ssi(i,j)*y2(i,j)*y3(i,j)/dd(i,j), 0.) |
---|
2291 | pint(i,j)=pint(i,j)+pidep(i,j) |
---|
2292 | pint(i,j)=min(pint(i,j),dep(i,j)) |
---|
2293 | !c if (pint(i,j) .le. cmin2) pint(i,j)=0. |
---|
2294 | pt(i,j)=pt(i,j)+ascp*pint(i,j) |
---|
2295 | qv(i,j)=qv(i,j)-pint(i,j) |
---|
2296 | qi(i,j)=qi(i,j)+pint(i,j) |
---|
2297 | endif |
---|
2298 | endif ! if ( itaobraun.eq.0 ) |
---|
2299 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2300 | |
---|
2301 | !JJS 225 CONTINUE |
---|
2302 | |
---|
2303 | !***** TAO ET AL (1989) SATURATION TECHNIQUE *********************** |
---|
2304 | |
---|
2305 | if (new_ice_sat .eq. 0) then |
---|
2306 | |
---|
2307 | !JJS DO 250 J=3,JLES |
---|
2308 | !JJS DO 250 I=3,ILES |
---|
2309 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2310 | cnd(i,j)=rt0*(tair(i,j)-t00) |
---|
2311 | dep(i,j)=rt0*(t0-tair(i,j)) |
---|
2312 | y1(i,j)=1./(tair(i,j)-c358) |
---|
2313 | y2(i,j)=1./(tair(i,j)-c76) |
---|
2314 | qsw(i,j)=rp0*exp(c172-c409*y1(i,j)) |
---|
2315 | qsi(i,j)=rp0*exp(c218-c580*y2(i,j)) |
---|
2316 | dd(i,j)=cp409*y1(i,j)*y1(i,j) |
---|
2317 | dd1(i,j)=cp580*y2(i,j)*y2(i,j) |
---|
2318 | if (qc(i,j).le.cmin) qc(i,j)=cmin |
---|
2319 | if (qi(i,j).le.cmin) qi(i,j)=cmin |
---|
2320 | if (tair(i,j).ge.t0) then |
---|
2321 | dep(i,j)=0.0 |
---|
2322 | cnd(i,j)=1. |
---|
2323 | qi(i,j)=0.0 |
---|
2324 | endif |
---|
2325 | |
---|
2326 | if (tair(i,j).lt.t00) then |
---|
2327 | cnd(i,j)=0.0 |
---|
2328 | dep(i,j)=1. |
---|
2329 | qc(i,j)=0.0 |
---|
2330 | endif |
---|
2331 | |
---|
2332 | y5(i,j)=avcp*cnd(i,j)+ascp*dep(i,j) |
---|
2333 | ! if (qc(i,j) .ge. cmin .or. qi(i,j) .ge. cmin) then |
---|
2334 | y1(i,j)=qc(i,j)*qsw(i,j)/(qc(i,j)+qi(i,j)) |
---|
2335 | y2(i,j)=qi(i,j)*qsi(i,j)/(qc(i,j)+qi(i,j)) |
---|
2336 | y4(i,j)=dd(i,j)*y1(i,j)+dd1(i,j)*y2(i,j) |
---|
2337 | qvs(i,j)=y1(i,j)+y2(i,j) |
---|
2338 | rsub1(i,j)=(qv(i,j)+qb0-qvs(i,j))/(1.+y4(i,j)*y5(i,j)) |
---|
2339 | cnd(i,j)=cnd(i,j)*rsub1(i,j) |
---|
2340 | dep(i,j)=dep(i,j)*rsub1(i,j) |
---|
2341 | if (qc(i,j).le.cmin) qc(i,j)=0. |
---|
2342 | if (qi(i,j).le.cmin) qi(i,j)=0. |
---|
2343 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2344 | !c ****** condensation or evaporation of qc ****** |
---|
2345 | |
---|
2346 | cnd(i,j)=max(-qc(i,j),cnd(i,j)) |
---|
2347 | |
---|
2348 | !c ****** deposition or sublimation of qi ****** |
---|
2349 | |
---|
2350 | dep(i,j)=max(-qi(i,j),dep(i,j)) |
---|
2351 | |
---|
2352 | pt(i,j)=pt(i,j)+avcp*cnd(i,j)+ascp*dep(i,j) |
---|
2353 | qv(i,j)=qv(i,j)-cnd(i,j)-dep(i,j) |
---|
2354 | qc(i,j)=qc(i,j)+cnd(i,j) |
---|
2355 | qi(i,j)=qi(i,j)+dep(i,j) |
---|
2356 | !JJS 250 continue |
---|
2357 | endif |
---|
2358 | |
---|
2359 | if (new_ice_sat .eq. 1) then |
---|
2360 | |
---|
2361 | !JJS DO J=3,JLES |
---|
2362 | !JJS DO I=3,ILES |
---|
2363 | |
---|
2364 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2365 | cnd(i,j)=rt0*(tair(i,j)-t00) |
---|
2366 | dep(i,j)=rt0*(t0-tair(i,j)) |
---|
2367 | y1(i,j)=1./(tair(i,j)-c358) |
---|
2368 | y2(i,j)=1./(tair(i,j)-c76) |
---|
2369 | qsw(i,j)=rp0*exp(c172-c409*y1(i,j)) |
---|
2370 | qsi(i,j)=rp0*exp(c218-c580*y2(i,j)) |
---|
2371 | dd(i,j)=cp409*y1(i,j)*y1(i,j) |
---|
2372 | dd1(i,j)=cp580*y2(i,j)*y2(i,j) |
---|
2373 | y5(i,j)=avcp*cnd(i,j)+ascp*dep(i,j) |
---|
2374 | y1(i,j)=rt0*(tair(i,j)-t00)*qsw(i,j) |
---|
2375 | y2(i,j)=rt0*(t0-tair(i,j))*qsi(i,j) |
---|
2376 | ! IF (QC(I,J).LE.CMIN) QC(I,J)=CMIN |
---|
2377 | ! IF (QI(I,J).LE.CMIN) QI(I,J)=CMIN |
---|
2378 | |
---|
2379 | if (tair(i,j).ge.t0) then |
---|
2380 | ! QI(I,J)=0.0 |
---|
2381 | dep(i,j)=0.0 |
---|
2382 | cnd(i,j)=1. |
---|
2383 | y2(i,j)=0. |
---|
2384 | y1(i,j)=qsw(i,j) |
---|
2385 | endif |
---|
2386 | if (tair(i,j).lt.t00) then |
---|
2387 | cnd(i,j)=0.0 |
---|
2388 | dep(i,j)=1. |
---|
2389 | y2(i,j)=qsi(i,j) |
---|
2390 | y1(i,j)=0. |
---|
2391 | ! QC(I,J)=0.0 |
---|
2392 | endif |
---|
2393 | |
---|
2394 | ! Y1(I,J)=QC(I,J)*QSW(I,J)/(QC(I,J)+QI(I,J)) |
---|
2395 | ! Y2(I,J)=QI(I,J)*QSI(I,J)/(QC(I,J)+QI(I,J)) |
---|
2396 | |
---|
2397 | y4(i,j)=dd(i,j)*y1(i,j)+dd1(i,j)*y2(i,j) |
---|
2398 | qvs(i,j)=y1(i,j)+y2(i,j) |
---|
2399 | rsub1(i,j)=(qv(i,j)+qb0-qvs(i,j))/(1.+y4(i,j)*y5(i,j)) |
---|
2400 | cnd(i,j)=cnd(i,j)*rsub1(i,j) |
---|
2401 | dep(i,j)=dep(i,j)*rsub1(i,j) |
---|
2402 | ! IF (QC(I,J).LE.CMIN) QC(I,J)=0. |
---|
2403 | ! IF (QI(I,J).LE.CMIN) QI(I,J)=0. |
---|
2404 | |
---|
2405 | !C ****** CONDENSATION OR EVAPORATION OF QC ****** |
---|
2406 | |
---|
2407 | cnd(i,j)=max(-qc(i,j),cnd(i,j)) |
---|
2408 | |
---|
2409 | !C ****** DEPOSITION OR SUBLIMATION OF QI ****** |
---|
2410 | |
---|
2411 | dep(i,j)=max(-qi(i,j),dep(i,j)) |
---|
2412 | |
---|
2413 | pt(i,j)=pt(i,j)+avcp*cnd(i,j)+ascp*dep(i,j) |
---|
2414 | qv(i,j)=qv(i,j)-cnd(i,j)-dep(i,j) |
---|
2415 | qc(i,j)=qc(i,j)+cnd(i,j) |
---|
2416 | qi(i,j)=qi(i,j)+dep(i,j) |
---|
2417 | !JJS ENDDO |
---|
2418 | !JJS ENDDO |
---|
2419 | endif |
---|
2420 | |
---|
2421 | !c |
---|
2422 | ! |
---|
2423 | if (new_ice_sat .eq. 2) then |
---|
2424 | !JJS do j=3,jles |
---|
2425 | !JJS do i=3,iles |
---|
2426 | dep(i,j)=0.0 |
---|
2427 | cnd(i,j)=0.0 |
---|
2428 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2429 | if (tair(i,j) .ge. 253.16) then |
---|
2430 | y1(i,j)=1./(tair(i,j)-c358) |
---|
2431 | qsw(i,j)=rp0*exp(c172-c409*y1(i,j)) |
---|
2432 | dd(i,j)=cp409*y1(i,j)*y1(i,j) |
---|
2433 | dm(i,j)=qv(i,j)+qb0-qsw(i,j) |
---|
2434 | cnd(i,j)=dm(i,j)/(1.+avcp*dd(i,j)*qsw(i,j)) |
---|
2435 | !c ****** condensation or evaporation of qc ****** |
---|
2436 | cnd(i,j)=max(-qc(i,j), cnd(i,j)) |
---|
2437 | pt(i,j)=pt(i,j)+avcp*cnd(i,j) |
---|
2438 | qv(i,j)=qv(i,j)-cnd(i,j) |
---|
2439 | qc(i,j)=qc(i,j)+cnd(i,j) |
---|
2440 | endif |
---|
2441 | if (tair(i,j) .le. 258.16) then |
---|
2442 | !c cnd(i,j)=0.0 |
---|
2443 | y2(i,j)=1./(tair(i,j)-c76) |
---|
2444 | qsi(i,j)=rp0*exp(c218-c580*y2(i,j)) |
---|
2445 | dd1(i,j)=cp580*y2(i,j)*y2(i,j) |
---|
2446 | dep(i,j)=(qv(i,j)+qb0-qsi(i,j))/(1.+ascp*dd1(i,j)*qsi(i,j)) |
---|
2447 | !c ****** deposition or sublimation of qi ****** |
---|
2448 | dep(i,j)=max(-qi(i,j),dep(i,j)) |
---|
2449 | pt(i,j)=pt(i,j)+ascp*dep(i,j) |
---|
2450 | qv(i,j)=qv(i,j)-dep(i,j) |
---|
2451 | qi(i,j)=qi(i,j)+dep(i,j) |
---|
2452 | endif |
---|
2453 | !JJS enddo |
---|
2454 | !JJS enddo |
---|
2455 | endif |
---|
2456 | |
---|
2457 | !c |
---|
2458 | ! |
---|
2459 | !* 10 * PSDEP : DEPOSITION OR SUBLIMATION OF QS **10** |
---|
2460 | !* 20 * PGSUB : SUBLIMATION OF QG **20** |
---|
2461 | |
---|
2462 | !JJS DO 275 J=3,JLES |
---|
2463 | !JJS DO 275 I=3,ILES |
---|
2464 | |
---|
2465 | psdep(i,j)=0.0 |
---|
2466 | pssub(i,j)=0.0 |
---|
2467 | pgsub(i,j)=0.0 |
---|
2468 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2469 | |
---|
2470 | if(tair(i,j).lt.t0) then |
---|
2471 | if(qs(i,j).lt.cmin1) qs(i,j)=0.0 |
---|
2472 | if(qg(i,j).lt.cmin1) qg(i,j)=0.0 |
---|
2473 | rtair(i,j)=1./(tair(i,j)-c76) |
---|
2474 | qsi(i,j)=rp0*exp(c218-c580*rtair(i,j)) |
---|
2475 | ssi(i,j)=(qv(i,j)+qb0)/qsi(i,j)-1. |
---|
2476 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2477 | y1(i,j)=r10ar/(tca(i,j)*tair(i,j)**2)+1./(dwv(i,j) & |
---|
2478 | *qsi(i,j)) |
---|
2479 | y2(i,j)=.78/zs(i,j)**2+r101f*scv(i,j)/zs(i,j)**bsh5 |
---|
2480 | psdep(i,j)=r10t*ssi(i,j)*y2(i,j)/y1(i,j) |
---|
2481 | pssub(i,j)=psdep(i,j) |
---|
2482 | psdep(i,j)=r2iceg*max(psdep(i,j), 0.) |
---|
2483 | pssub(i,j)=r2iceg*max(-qs(i,j), min(pssub(i,j), 0.)) |
---|
2484 | |
---|
2485 | if(ihail.eq.1) then |
---|
2486 | y2(i,j)=.78/zg(i,j)**2+r20bq*scv(i,j)/zg(i,j)**bgh5 |
---|
2487 | else |
---|
2488 | y2(i,j)=.78/zg(i,j)**2+r20bs*scv(i,j)/zg(i,j)**bgh5 |
---|
2489 | endif |
---|
2490 | |
---|
2491 | pgsub(i,j)=r2ice*r20t*ssi(i,j)*y2(i,j)/y1(i,j) |
---|
2492 | dm(i,j)=qv(i,j)+qb0-qsi(i,j) |
---|
2493 | rsub1(i,j)=cs580*qsi(i,j)*rtair(i,j)*rtair(i,j) |
---|
2494 | |
---|
2495 | ! ******** DEPOSITION OR SUBLIMATION OF QS ********************** |
---|
2496 | |
---|
2497 | y1(i,j)=dm(i,j)/(1.+rsub1(i,j)) |
---|
2498 | psdep(i,j)=r2iceg*min(psdep(i,j),max(y1(i,j),0.)) |
---|
2499 | y2(i,j)=min(y1(i,j),0.) |
---|
2500 | pssub(i,j)=r2iceg*max(pssub(i,j),y2(i,j)) |
---|
2501 | |
---|
2502 | ! ******** SUBLIMATION OF QG *********************************** |
---|
2503 | |
---|
2504 | dd(i,j)=max((-y2(i,j)-qs(i,j)), 0.) |
---|
2505 | pgsub(i,j)=r2ice*min(dd(i,j), qg(i,j), max(pgsub(i,j),0.)) |
---|
2506 | |
---|
2507 | if(qc(i,j)+qi(i,j).gt.1.e-5) then |
---|
2508 | dlt1(i,j)=1. |
---|
2509 | else |
---|
2510 | dlt1(i,j)=0. |
---|
2511 | endif |
---|
2512 | |
---|
2513 | psdep(i,j)=dlt1(i,j)*psdep(i,j) |
---|
2514 | pssub(i,j)=(1.-dlt1(i,j))*pssub(i,j) |
---|
2515 | pgsub(i,j)=(1.-dlt1(i,j))*pgsub(i,j) |
---|
2516 | |
---|
2517 | pt(i,j)=pt(i,j)+ascp*(psdep(i,j)+pssub(i,j)-pgsub(i,j)) |
---|
2518 | qv(i,j)=qv(i,j)+pgsub(i,j)-pssub(i,j)-psdep(i,j) |
---|
2519 | qs(i,j)=qs(i,j)+psdep(i,j)+pssub(i,j) |
---|
2520 | qg(i,j)=qg(i,j)-pgsub(i,j) |
---|
2521 | endif |
---|
2522 | |
---|
2523 | !* 23 * ERN : EVAPORATION OF QR (SUBSATURATION) **23** |
---|
2524 | |
---|
2525 | ern(i,j)=0.0 |
---|
2526 | |
---|
2527 | if(qr(i,j).gt.0.0) then |
---|
2528 | tair(i,j)=(pt(i,j)+tb0)*pi0 |
---|
2529 | rtair(i,j)=1./(tair(i,j)-c358) |
---|
2530 | qsw(i,j)=rp0*exp(c172-c409*rtair(i,j)) |
---|
2531 | ssw(i,j)=(qv(i,j)+qb0)/qsw(i,j)-1.0 |
---|
2532 | dm(i,j)=qv(i,j)+qb0-qsw(i,j) |
---|
2533 | rsub1(i,j)=cv409*qsw(i,j)*rtair(i,j)*rtair(i,j) |
---|
2534 | dd1(i,j)=max(-dm(i,j)/(1.+rsub1(i,j)), 0.0) |
---|
2535 | y1(i,j)=.78/zr(i,j)**2+r23af*scv(i,j)/zr(i,j)**bwh5 |
---|
2536 | y2(i,j)=r23br/(tca(i,j)*tair(i,j)**2)+1./(dwv(i,j) & |
---|
2537 | *qsw(i,j)) |
---|
2538 | !cccc |
---|
2539 | ern(i,j)=r23t*ssw(i,j)*y1(i,j)/y2(i,j) |
---|
2540 | ern(i,j)=min(dd1(i,j),qr(i,j),max(ern(i,j),0.)) |
---|
2541 | pt(i,j)=pt(i,j)-avcp*ern(i,j) |
---|
2542 | qv(i,j)=qv(i,j)+ern(i,j) |
---|
2543 | qr(i,j)=qr(i,j)-ern(i,j) |
---|
2544 | endif |
---|
2545 | |
---|
2546 | ! IF (QV(I,J)+QB0 .LE. 0.) QV(I,J)=-QB0 |
---|
2547 | if (qc(i,j) .le. cmin1) qc(i,j)=0. |
---|
2548 | if (qr(i,j) .le. cmin1) qr(i,j)=0. |
---|
2549 | if (qi(i,j) .le. cmin1) qi(i,j)=0. |
---|
2550 | if (qs(i,j) .le. cmin1) qs(i,j)=0. |
---|
2551 | if (qg(i,j) .le. cmin1) qg(i,j)=0. |
---|
2552 | dpt(i,j,k)=pt(i,j) |
---|
2553 | dqv(i,j,k)=qv(i,j) |
---|
2554 | qcl(i,j,k)=qc(i,j) |
---|
2555 | qrn(i,j,k)=qr(i,j) |
---|
2556 | qci(i,j,k)=qi(i,j) |
---|
2557 | qcs(i,j,k)=qs(i,j) |
---|
2558 | qcg(i,j,k)=qg(i,j) |
---|
2559 | |
---|
2560 | !JJS 275 CONTINUE |
---|
2561 | |
---|
2562 | scc=0. |
---|
2563 | see=0. |
---|
2564 | |
---|
2565 | ! DO 110 J=3,JLES |
---|
2566 | ! DO 110 I=3,ILES |
---|
2567 | ! DD(I,J)=MAX(-CND(I,J), 0.) |
---|
2568 | ! CND(I,J)=MAX(CND(I,J), 0.) |
---|
2569 | ! DD1(I,J)=MAX(-DEP(I,J), 0.) |
---|
2570 | |
---|
2571 | !ccshie 2/21/02 shie follow tao |
---|
2572 | !CC for reference QI(I,J)=QI(I,J)-Y2(I,J)+PIDEP(I,J)*D2T |
---|
2573 | !CC for reference QV(I,J)=QV(I,J)-(PIDEP(I,J))*D2T |
---|
2574 | |
---|
2575 | !c DEP(I,J)=MAX(DEP(I,J), 0.) |
---|
2576 | ! DEP(I,J)=MAX(DEP(I,J), 0.)+PIDEP(I,J)*D2T |
---|
2577 | ! SCC=SCC+CND(I,J) |
---|
2578 | ! SEE=SEE+DD(I,J)+ERN(I,J) |
---|
2579 | |
---|
2580 | ! 110 CONTINUE |
---|
2581 | |
---|
2582 | ! SC(K)=SCC+SC(K) |
---|
2583 | ! SE(K)=SEE+SE(K) |
---|
2584 | |
---|
2585 | !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2586 | !c henry: please take a look (start) |
---|
2587 | !JJS modified by JJS on 5/1/2007 vvvvv |
---|
2588 | |
---|
2589 | !JJS do 305 j=3,jles |
---|
2590 | !JJS do 305 i=3,iles |
---|
2591 | dd(i,j)=max(-cnd(i,j), 0.) |
---|
2592 | cnd(i,j)=max(cnd(i,j), 0.) |
---|
2593 | dd1(i,j)=max(-dep(i,j), 0.)+pidep(i,j)*d2t |
---|
2594 | dep(i,j)=max(dep(i,j), 0.) |
---|
2595 | !JJS 305 continue |
---|
2596 | |
---|
2597 | !JJS do 306 j=3,jles |
---|
2598 | !JJS do 306 i=3,iles |
---|
2599 | !JJS scc=scc+cnd(i,j) |
---|
2600 | !JJS see=see+(dd(i,j)+ern(i,j)) |
---|
2601 | ! |
---|
2602 | !JJS sddd=sddd+(dep(i,j)+pint(i,j)+psdep(i,j)+pgdep(i,j)) |
---|
2603 | !JJS ssss=ssss+dd1(i,j) |
---|
2604 | !JJS |
---|
2605 | ! shhh=shhh+rsw(i,j,k)*d2t |
---|
2606 | ! sccc=sccc+rlw(i,j,k)*d2t |
---|
2607 | !jjs |
---|
2608 | !JJS smmm=smmm+(psmlt(i,j)+pgmlt(i,j)+pimlt(i,j)) |
---|
2609 | !JJS sfff=sfff+d2t*(psacw(i,j)+piacr(i,j)+psfw(i,j) |
---|
2610 | !JJS 1 +pgfr(i,j)+dgacw(i,j)+dgacr(i,j)+psacr(i,j)) |
---|
2611 | !JJS 2 -qracs(i,j)+pihom(i,j)+pidw(i,j) |
---|
2612 | |
---|
2613 | |
---|
2614 | sccc=cnd(i,j) |
---|
2615 | seee=dd(i,j)+ern(i,j) |
---|
2616 | sddd=dep(i,j)+pint(i,j)+psdep(i,j)+pgdep(i,j) |
---|
2617 | ssss=dd1(i,j) + pgsub(i,j) |
---|
2618 | smmm=psmlt(i,j)+pgmlt(i,j)+pimlt(i,j) |
---|
2619 | sfff=d2t*(psacw(i,j)+piacr(i,j)+psfw(i,j) & |
---|
2620 | +pgfr(i,j)+dgacw(i,j)+dgacr(i,j)+psacr(i,j) & |
---|
2621 | +wgacr(i,j))+pihom(i,j)+pidw(i,j) |
---|
2622 | |
---|
2623 | physc(i,k,j) = avcp * sccc / d2t |
---|
2624 | physe(i,k,j) = avcp * seee / d2t |
---|
2625 | physd(i,k,j) = ascp * sddd / d2t |
---|
2626 | physs(i,k,j) = ascp * ssss / d2t |
---|
2627 | physm(i,k,j) = afcp * smmm / d2t |
---|
2628 | physf(i,k,j) = afcp * sfff / d2t |
---|
2629 | |
---|
2630 | !JJS modified by JJS on 5/1/2007 ^^^^^ |
---|
2631 | |
---|
2632 | 2000 continue |
---|
2633 | |
---|
2634 | 1000 continue |
---|
2635 | |
---|
2636 | !JJS **************************************************************** |
---|
2637 | !JJS convert from GCE grid back to WRF grid |
---|
2638 | do k=kts,kte |
---|
2639 | do j=jts,jte |
---|
2640 | do i=its,ite |
---|
2641 | ptwrf(i,k,j) = dpt(i,j,k) |
---|
2642 | qvwrf(i,k,j) = dqv(i,j,k) |
---|
2643 | qlwrf(i,k,j) = qcl(i,j,k) |
---|
2644 | qrwrf(i,k,j) = qrn(i,j,k) |
---|
2645 | qiwrf(i,k,j) = qci(i,j,k) |
---|
2646 | qswrf(i,k,j) = qcs(i,j,k) |
---|
2647 | qgwrf(i,k,j) = qcg(i,j,k) |
---|
2648 | enddo !i |
---|
2649 | enddo !j |
---|
2650 | enddo !k |
---|
2651 | |
---|
2652 | ! **************************************************************** |
---|
2653 | |
---|
2654 | return |
---|
2655 | END SUBROUTINE saticel_s |
---|
2656 | |
---|
2657 | !JJS |
---|
2658 | !JJS REAL FUNCTION GAMMA(X) |
---|
2659 | !JJS Y=GAMMLN(X) |
---|
2660 | !JJS GAMMA=EXP(Y) |
---|
2661 | !JJS RETURN |
---|
2662 | !JJS END |
---|
2663 | !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
2664 | !JJS real function GAMMLN (xx) |
---|
2665 | real function gammagce (xx) |
---|
2666 | !********************************************************************** |
---|
2667 | real*8 cof(6),stp,half,one,fpf,x,tmp,ser |
---|
2668 | data cof,stp / 76.18009173,-86.50532033,24.01409822, & |
---|
2669 | -1.231739516,.120858003e-2,-.536382e-5, 2.50662827465 / |
---|
2670 | data half,one,fpf / .5, 1., 5.5 / |
---|
2671 | ! |
---|
2672 | x=xx-one |
---|
2673 | tmp=x+fpf |
---|
2674 | tmp=(x+half)*log(tmp)-tmp |
---|
2675 | ser=one |
---|
2676 | do j=1,6 |
---|
2677 | x=x+one |
---|
2678 | ser=ser+cof(j)/x |
---|
2679 | enddo !j |
---|
2680 | gammln=tmp+log(stp*ser) |
---|
2681 | !JJS |
---|
2682 | gammagce=exp(gammln) |
---|
2683 | !JJS |
---|
2684 | return |
---|
2685 | END FUNCTION gammagce |
---|
2686 | |
---|
2687 | END MODULE module_mp_gsfcgce |
---|