CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
module_bfmicrophysics.f
1
3
6!
7 USE machine , ONLY : kind_phys
8 USE funcphys
9 USE physcons, cp => con_cp, rd => con_rd, rv => con_rv &
10 &, t0c => con_t0c, hvap => con_hvap, hfus => con_hfus &
11 &, eps => con_eps, epsm1 => con_epsm1 &
12 &, eps1 => con_fvirt, pi => con_pi, grav => con_g
13 implicit none
14!
15!--- Common block of constants used in column microphysics
16!
17 real,private :: abfr, cbfr, ciacw, ciacr, c_n0r0, &
18 &CN0r0, CN0r_DMRmin, CN0r_DMRmax, CRACW, CRAUT, ESW0, &
19 &QAUTx, RFmax, RQR_DR1, RQR_DR2, RQR_DR3, RQR_DRmin, &
20 &RQR_DRmax, RR_DRmin, RR_DR1, RR_DR2, RR_DR3, RR_DRmax
21!
22 integer, private :: mic_step
23!
24!--- Common block for lookup table used in calculating growth rates of
25! nucleated ice crystals growing in water saturated conditions
26!--- Discretized growth rates of small ice crystals after their nucleation
27! at 1 C intervals from -1 C to -35 C, based on calculations by Miller
28! and Young (1979, JAS) after 600 s of growth. Resultant growth rates
29! are multiplied by physics time step in GSMCONST.
30!
31 INTEGER, PRIVATE,PARAMETER :: my_t1=1, my_t2=35
32 REAL,PRIVATE,DIMENSION(MY_T1:MY_T2) :: my_growth
33!
34!--- Parameters for ice lookup tables, which establish the range of mean ice
35! particle diameters; from a minimum mean diameter of 0.05 mm (DMImin) to a
36! maximum mean diameter of 1.00 mm (DMImax). The tables store solutions
37! at 1 micron intervals (DelDMI) of mean ice particle diameter.
38!
39 REAL, PRIVATE,PARAMETER :: dmimin=.05e-3, dmimax=1.e-3, &
40 & xmimin=1.e6*dmimin, xmimax=1.e6*dmimax,&
41 & deldmi=1.e-6
42 INTEGER, PRIVATE,PARAMETER :: mdimin=xmimin, mdimax=xmimax
43!
44!--- Various ice lookup tables
45!
46 REAL, PRIVATE,DIMENSION(MDImin:MDImax) :: &
47 & ACCRI,MASSI,SDENS,VSNOWI,VENTI1,VENTI2
48!
49!--- Mean rain drop diameters varying from 50 microns (0.05 mm) to 450 microns
50! (0.45 mm), assuming an exponential size distribution.
51!
52 REAL, PRIVATE,PARAMETER :: dmrmin=.05e-3, dmrmax=.45e-3, &
53 & xmrmin=1.e6*dmrmin, xmrmax=1.e6*dmrmax,&
54 & deldmr=1.e-6, nlimin=100.
55! &, NLImin=100., NLImax=20.E3
56 INTEGER, PRIVATE,PARAMETER :: mdrmin=xmrmin, mdrmax=xmrmax
57!
58!--- Factor of 1.5 for RECImin, RESNOWmin, & RERAINmin accounts for
59! integrating exponential distributions for effective radius
60! (i.e., the r**3/r**2 moments).
61!
62! INTEGER, PRIVATE, PARAMETER :: INDEXSmin=300
63!! INTEGER, PRIVATE, PARAMETER :: INDEXSmin=200
64 INTEGER, PRIVATE, PARAMETER :: indexsmin=100
65 REAL, PRIVATE, PARAMETER :: rerainmin=1.5*xmrmin &
66! &, RECImin=1.5*XMImin, RESNOWmin=1.5*INDEXSmin, RECWmin=8.0
67! &, RECImin=1.5*XMImin, RESNOWmin=1.5*INDEXSmin, RECWmin=7.5
68 &, recimin=1.5*xmimin, resnowmin=1.5*indexsmin, recwmin=10.
69! &, RECImin=1.5*XMImin, RESNOWmin=1.5*INDEXSmin, RECWmin=15.
70! &, RECImin=1.5*XMImin, RESNOWmin=1.5*INDEXSmin, RECWmin=5.
71
72!
73!--- Various rain lookup tables
74!--- Rain lookup tables for mean rain drop diameters from DMRmin to DMRmax,
75! assuming exponential size distributions for the rain drops
76!
77 REAL, PRIVATE,DIMENSION(MDRmin:MDRmax):: &
78 & ACCRR,MASSR,RRATE,VRAIN,VENTR1,VENTR2
79!
80!--- Common block for riming tables
81!--- VEL_RF - velocity increase of rimed particles as functions of crude
82! particle size categories (at 0.1 mm intervals of mean ice particle
83! sizes) and rime factor (different values of Rime Factor of 1.1**N,
84! where N=0 to Nrime).
85!
86 INTEGER, PRIVATE,PARAMETER :: nrime=40
87 REAL, DIMENSION(2:9,0:Nrime),PRIVATE :: vel_rf
88!
89!--- The following variables are for microphysical statistics
90!
91 INTEGER, PARAMETER :: itlo=-60, ithi=40
92 INTEGER nstats(itlo:ithi,4)
93 REAL qmax(itlo:ithi,5), qtot(itlo:ithi,22)
94!
95 REAL, PRIVATE, PARAMETER :: &
96! & T_ICE=-10., T_ICE_init=-5. !- Ver1
97!!! &, T_ICE=-20. !- Ver2
98 & t_ice=-40., t_ice_init=-15. !- Ver2
99! & T_ICE=-30., T_ICE_init=-5. !- Ver2
100!
101! Some other miscellaneous parameters
102!
103 REAL, PRIVATE, PARAMETER :: thom=t_ice, tnw=50., toler=1.0e-20 &
104! REAL, PRIVATE, PARAMETER :: Thom=T_ICE, TNW=50., TOLER=5.E-7
105! REAL, PRIVATE, PARAMETER :: Thom=-35., TNW=50., TOLER=5.E-7
106
107! &, emisCU=.75/1.66 ! Used for convective cloud l/w emissivity
108
109! Assume fixed cloud ice effective radius
110 &, recice=recimin &
111 &, epsq=1.0e-20 &
112! &, EPSQ=1.E-12 &
113 &, flg0p1=0.1, flg0p2=0.2, flg1p0=1.0
114!
115!
116 CONTAINS
117!
119 SUBROUTINE gsmconst (DTPG,mype,first)
120!
121 implicit none
122!-------------------------------------------------------------------------------
123!--- SUBPROGRAM DOCUMENTATION BLOCK
124! PRGRMMR: Ferrier ORG: W/NP22 DATE: February 2001
125!-------------------------------------------------------------------------------
126! ABSTRACT:
127! * Reads various microphysical lookup tables used in COLUMN_MICRO
128! * Lookup tables were created "offline" and are read in during execution
129! * Creates lookup tables for saturation vapor pressure w/r/t water & ice
130!-------------------------------------------------------------------------------
131!
132! USAGE: CALL GSMCONST FROM SUBROUTINE GSMDRIVE AT MODEL START TIME
133!
134! INPUT ARGUMENT LIST:
135! DTPH - physics time step (s)
136!
137! OUTPUT ARGUMENT LIST:
138! NONE
139!
140! OUTPUT FILES:
141! NONE
142!
143!
144! SUBROUTINES:
145! MY_GROWTH_RATES - lookup table for growth of nucleated ice
146!
147! UNIQUE: NONE
148!
149! LIBRARY: NONE
150!
151!
152! ATTRIBUTES:
153! LANGUAGE: FORTRAN 90
154! MACHINE : IBM SP
155!
156 integer mype
157 real dtpg
158 logical first
159!
160!--- Parameters & data statement for local calculations
161!
162 REAL, PARAMETER :: C1=1./3., dmr1=.1e-3, dmr2=.2e-3, dmr3=.32e-3, &
163 & n0r0=8.e6, n0s0=4.e6, rhol=1000., rhos=100., &
164 & xmr1=1.e6*dmr1, xmr2=1.e6*dmr2, xmr3=1.e6*dmr3
165 INTEGER, PARAMETER :: MDR1=xmr1, mdr2=xmr2, mdr3=xmr3
166!
167 real dtph, bbfr
168 integer i
169!
170!--- Added on 5/16/01 for Moorthi
171!
172 logical, parameter :: read_lookup=.false., write_lookup=.false.
173!
174!------------------------------------------------------------------------
175! ************* Parameters used in ETA model -- Not used in Global Model *****
176!
177!--- DPHD, DLMD are delta latitude and longitude at the model (NOT geodetic) equator
178! => "DX" is the hypotenuse of the model zonal & meridional grid increments.
179!
180! DX=111.*(DPHD**2+DLMD**2)**.5 ! Resolution at MODEL equator (km)
181! DX=MIN(100., MAX(5., DX) )
182!
183!--- Assume the following functional relationship for key constants that
184! depend on grid resolution from DXmin (5 km) to DXmax (100 km) resolution:
185!
186! DXmin=5.
187! DXmax=100.
188! DX=MIN(DXmax, MAX(DXmin, DX) )
189!
190!--- EXtune determines the degree to which the coefficients change with resolution.
191! The larger EXtune is, the more sensitive the parameter.
192!
193! EXtune=1.
194
195!
196!--- FXtune ==> F(DX) is the grid-resolution tuning parameter (from 0 to 1)
197!
198! FXtune=((DXmax-DX)/(DXmax-DXmin))**EXtune
199! FXtune=MAX(0., MIN(1., FXtune))
200!
201!--- Calculate grid-averaged RH for the onset of condensation (RHgrd) based on
202! simple ***ASSUMED*** (user-specified) values at DXmax and at DXmin.
203!
204! RH_DXmax=.90 !-- 90% RH at DXmax=100 km
205! RH_DXmin=.98 !-- 98% RH at DXmin=5 km
206!
207!--- Note that RHgrd is right now fixed throughout the domain!!
208!
209! RHgrd=RH_DXmax+(RH_DXmin-RH_DXmax)*FXtune
210! ********************************************************************************
211!
212!
213 if (first) then
214!
215!--- Read in various lookup tables
216!
217 if ( read_lookup ) then
218 OPEN (unit=1,file="eta_micro_lookup.dat",form="UNFORMATTED")
219 READ(1) ventr1
220 READ(1) ventr2
221 READ(1) accrr
222 READ(1) massr
223 READ(1) vrain
224 READ(1) rrate
225 READ(1) venti1
226 READ(1) venti2
227 READ(1) accri
228 READ(1) massi
229 READ(1) vsnowi
230 READ(1) vel_rf
231! read(1) my_growth ! Applicable only for DTPH=180 s for offline testing
232 CLOSE (1)
233 else
234 CALL ice_lookup ! Lookup tables for ice
235 CALL rain_lookup ! Lookup tables for rain
236 if (write_lookup) then
237 open(unit=1,file='micro_lookup.dat',form='unformatted')
238 write(1) ventr1
239 write(1) ventr2
240 write(1) accrr
241 write(1) massr
242 write(1) vrain
243 write(1) rrate
244 write(1) venti1
245 write(1) venti2
246 write(1) accri
247 write(1) massi
248 write(1) vsnowi
249 write(1) vel_rf
250! write(1) my_growth ! Applicable only for DTPH=180 s ????
251 CLOSE (1)
252 endif
253 endif
254!!
255!--- Constants associated with Biggs (1953) freezing of rain, as parameterized
256! following Lin et al. (JCAM, 1983) & Reisner et al. (1998, QJRMS).
257!
258 abfr=-0.66
259 bbfr=100.
260 cbfr=20.*pi*pi*bbfr*rhol*1.e-21
261!
262!--- QAUT0 is the threshold cloud content for autoconversion to rain
263! needed for droplets to reach a diameter of 20 microns (following
264! Manton and Cotton, 1977; Banta and Hanson, 1987, JCAM). It is
265! **STRONGLY** affected by the assumed droplet number concentrations
266! XNCW! For example, QAUT0=1.2567, 0.8378, or 0.4189 g/m**3 for
267! droplet number concentrations of 300, 200, and 100 cm**-3, respectively.
268!
269!--- Calculate grid-averaged XNCW based on simple ***ASSUMED*** (user-specified)
270! values at DXmax and at DXmin.
271!
272! XNCW_DXmax=50.E6 !-- 50 /cm**3 at DXmax=100 km
273! XNCW_DXmin=200.E6 !-- 200 /cm**3 at DXmin=5 km
274!
275!--- Note that XNCW is right now fixed throughout the domain!!
276!
277! XNCW=XNCW_DXmax+(XNCW_DXmin-XNCW_DXmax)*FXtune
278!
279! QAUT0=PI*RHOL*XNCW*(20.E-6)**3/6.
280 qautx=pi*rhol*1.0e6*(20.e-6)**3/6.
281!
282!--- Based on rain lookup tables for mean diameters from 0.05 to 0.45 mm
283! * Four different functional relationships of mean drop diameter as
284! a function of rain rate (RR), derived based on simple fits to
285! mass-weighted fall speeds of rain as functions of mean diameter
286! from the lookup tables.
287!
288 rr_drmin=n0r0*rrate(mdrmin)
289 rr_dr1=n0r0*rrate(mdr1)
290 rr_dr2=n0r0*rrate(mdr2)
291 rr_dr3=n0r0*rrate(mdr3)
292 rr_drmax=n0r0*rrate(mdrmax)
293!
294 rqr_drmin=n0r0*massr(mdrmin)
295 rqr_dr1=n0r0*massr(mdr1)
296 rqr_dr2=n0r0*massr(mdr2)
297 rqr_dr3=n0r0*massr(mdr3)
298 rqr_drmax=n0r0*massr(mdrmax)
299 c_n0r0=pi*rhol*n0r0
300 cn0r0=1.e6/c_n0r0**.25
301 cn0r_dmrmin=1./(pi*rhol*dmrmin**4)
302 cn0r_dmrmax=1./(pi*rhol*dmrmax**4)
303!
304 endif ! If (first) then loop ends here
305!
306! Find out what microphysics time step should be
307!
308 mic_step = max(1, int(dtpg/600.0+0.5))
309! mic_step = max(1, int(dtpg/300.0+0.5))
310 dtph = dtpg / mic_step
311 if (mype == 0) print *,' DTPG=',dtpg,' mic_step=',mic_step &
312 &, ' dtph=',dtph
313!
314!--- Calculates coefficients for growth rates of ice nucleated in water
315! saturated conditions, scaled by physics time step (lookup table)
316!
317 CALL my_growth_rates (dtph)
318!
319!--- CIACW is used in calculating riming rates
320! The assumed effective collection efficiency of cloud water rimed onto
321! ice is =0.5 below:
322!
323!Moor CIACW=DTPH*0.25*PI*0.5*(1.E5)**C1 ! commented on 20050422
324! ice is =0.1 below:
325 ciacw=dtph*0.25*pi*0.1*(1.e5)**c1
326! CIACW = 0.0 ! Brad's suggestion 20040614
327!
328!--- CIACR is used in calculating freezing of rain colliding with large ice
329! The assumed collection efficiency is 1.0
330!
331 ciacr=pi*dtph
332!
333!--- CRACW is used in calculating collection of cloud water by rain (an
334! assumed collection efficiency of 1.0)
335!
336!Moor CRACW=DTPH*0.25*PI*1.0 ! commented on 20050422
337!
338! assumed collection efficiency of 0.1)
339 cracw=dtph*0.25*pi*0.1
340! CRACW = 0.0 ! Brad's suggestion 20040614
341!
342 esw0=fpvsl(t0c)
343 rfmax=1.1**nrime
344!
345!------------------------------------------------------------------------
346!--------------- Constants passed through argument list -----------------
347!------------------------------------------------------------------------
348!
349!--- Important parameters for self collection (autoconversion) of
350! cloud water to rain.
351!
352!--- CRAUT is proportional to the rate that cloud water is converted by
353! self collection to rain (autoconversion rate)
354!
355 craut=1.-exp(-1.e-3*dtph)
356!
357! IF (MYPE == 0)
358! & WRITE(6,"(A, A,F6.2,A, A,F5.4, A,F7.3,A, A,F6.2,A, A,F6.3,A)")
359! & 'KEY MICROPHYSICAL PARAMETERS FOR '
360! & ,'DX=',DX,' KM:'
361! & ,' FXtune=',FXtune
362! & ,' RHgrd=',100.*RHgrd,' %'
363! & ,' NCW=',1.E-6*XNCW,' /cm**3'
364! & ,' QAUT0=',1.E3*QAUT0,' g/kg'
365!
366!--- For calculating snow optical depths by considering bulk density of
367! snow based on emails from Q. Fu (6/27-28/01), where optical
368! depth (T) = 1.5*SWP/(Reff*DENS), SWP is snow water path, Reff
369! is effective radius, and DENS is the bulk density of snow.
370!
371! SWP (kg/m**2)=(1.E-3 kg/g)*SWPrad, SWPrad in g/m**2 used in radiation
372! T = 1.5*1.E3*SWPrad/(Reff*DENS)
373!
374! See derivation for MASSI(INDEXS), note equal to RHO*QSNOW/NSNOW
375!
376! SDENS=1.5e3/DENS, DENS=MASSI(INDEXS)/[PI*(1.E-6*INDEXS)**3]
377!
378 DO i=mdimin,mdimax
379!MoorthiSDENS(I)=PI*1.5E-15*FLOAT(I*I*I)/MASSI(I)
380 sdens(i)=pi*1.0e-15*float(i*i*i)/massi(i)
381 ENDDO
382!
383!-----------------------------------------------------------------------
384!
385 END subroutine gsmconst
386
387!
389 SUBROUTINE my_growth_rates (DTPH)
390!
391 implicit none
392!
393!--- Below are tabulated values for the predicted mass of ice crystals
394! after 600 s of growth in water saturated conditions, based on
395! calculations from Miller and Young (JAS, 1979). These values are
396! crudely estimated from tabulated curves at 600 s from Fig. 6.9 of
397! Young (1993). Values at temperatures colder than -27C were
398! assumed to be invariant with temperature.
399!
400!--- Used to normalize Miller & Young (1979) calculations of ice growth
401! over large time steps using their tabulated values at 600 s.
402! Assumes 3D growth with time**1.5 following eq. (6.3) in Young (1993).
403!
404 real dtph, dt_ice
405 REAL MY_600(MY_T1:MY_T2)
406!
407!-- 20090714: These values are in g and need to be converted to kg below
408 DATA my_600 / &
409 & 5.5e-8, 1.4e-7, 2.8e-7, 6.e-7, 3.3e-6, & ! -1 to -5 deg C
410 & 2.e-6, 9.e-7, 8.8e-7, 8.2e-7, 9.4e-7, & ! -6 to -10 deg C
411 & 1.2e-6, 1.85e-6, 5.5e-6, 1.5e-5, 1.7e-5, & ! -11 to -15 deg C
412 & 1.5e-5, 1.e-5, 3.4e-6, 1.85e-6, 1.35e-6, & ! -16 to -20 deg C
413 & 1.05e-6, 1.e-6, 9.5e-7, 9.0e-7 , 9.5e-7, & ! -21 to -25 deg C
414 & 9.5e-7, 9.e-7, 9.e-7, 9.e-7, 9.e-7, & ! -26 to -30 deg C
415 & 9.e-7, 9.e-7, 9.e-7, 9.e-7, 9.e-7 / ! -31 to -35 deg C
416!
417!-----------------------------------------------------------------------
418!
419 dt_ice=(dtph/600.)**1.5
420! MY_GROWTH=DT_ICE*MY_600 ! original version
421 my_growth=dt_ice*my_600*1.e-3 !-- 20090714: Convert from g to kg
422!
423!-----------------------------------------------------------------------
424!
425 END subroutine my_growth_rates
426!
428 subroutine ice_lookup
429!
430 implicit none
431!-----------------------------------------------------------------------------------
432!
433!---- Key diameter values in mm
434!
435!-----------------------------------------------------------------------------------
436!
437!---- Key concepts:
438! - Actual physical diameter of particles (D)
439! - Ratio of actual particle diameters to mean diameter (x=D/MD)
440! - Mean diameter of exponentially distributed particles, which is the
441! same as 1./LAMDA of the distribution (MD)
442! - All quantitative relationships relating ice particle characteristics as
443! functions of their diameter (e.g., ventilation coefficients, normalized
444! accretion rates, ice content, and mass-weighted fall speeds) are a result
445! of using composite relationships for ice crystals smaller than 1.5 mm
446! diameter merged with analogous relationships for larger sized aggregates.
447! Relationships are derived as functions of mean ice particle sizes assuming
448! exponential size spectra and assuming the properties of ice crystals at
449! sizes smaller than 1.5 mm and aggregates at larger sizes.
450!
451!-----------------------------------------------------------------------------------
452!
453!---- Actual ice particle diameters for which integrated distributions are derived
454! - DminI - minimum diameter for integration (.02 mm, 20 microns)
455! - DmaxI - maximum diameter for integration (2 cm)
456! - DdelI - interval for integration (1 micron)
457!
458 real, parameter :: DminI=.02e-3, dmaxi=20.e-3, ddeli=1.e-6, &
459 & ximin=1.e6*dmini, ximax=1.e6*dmaxi
460 integer, parameter :: IDImin=ximin, idimax=ximax
461!
462!---- Meaning of the following arrays:
463! - diam - ice particle diameter (m)
464! - mass - ice particle mass (kg)
465! - vel - ice particle fall speeds (m/s)
466! - vent1 - 1st term in ice particle ventilation factor
467! - vent2 - 2nd term in ice particle ventilation factor
468!
469 real diam(IDImin:IDImax),mass(IDImin:IDImax),vel(IDImin:IDImax), &
470 & vent1(IDImin:IDImax),vent2(IDImin:IDImax)
471!
472!-----------------------------------------------------------------------------------
473!
474!---- Found from trial & error that the m(D) & V(D) mass & velocity relationships
475! between the ice crystals and aggregates overlapped & merged near a particle
476! diameter sizes of 1.5 mm. Thus, ice crystal relationships are used for
477! sizes smaller than 1.5 mm and aggregate relationships for larger sizes.
478!
479 real, parameter :: d_crystal_max=1.5
480!
481!---- The quantity xmax represents the maximum value of "x" in which the
482! integrated values are calculated. For xmax=20., this means that
483! integrated ventilation, accretion, mass, and precipitation rates are
484! calculated for ice particle sizes less than 20.*mdiam, the mean particle diameter.
485!
486 real, parameter :: xmax=20.
487!
488!-----------------------------------------------------------------------------------
489!
490!---- Meaning of the following arrays:
491! - mdiam - mean diameter (m)
492! - VENTI1 - integrated quantity associated w/ ventilation effects
493! (capacitance only) for calculating vapor deposition onto ice
494! - VENTI2 - integrated quantity associated w/ ventilation effects
495! (with fall speed) for calculating vapor deposition onto ice
496! - ACCRI - integrated quantity associated w/ cloud water collection by ice
497! - MASSI - integrated quantity associated w/ ice mass
498! - VSNOWI - mass-weighted fall speed of snow, used to calculate precip rates
499!
500!--- Mean ice-particle diameters varying from 50 microns to 1000 microns (1 mm),
501! assuming an exponential size distribution.
502!
503 real mdiam
504!
505!-----------------------------------------------------------------------------------
506!------------- Constants & parameters for ventilation factors of ice ---------------
507!-----------------------------------------------------------------------------------
508!
509!---- These parameters are used for calculating the ventilation factors for ice
510! crystals between 0.2 and 1.5 mm diameter (Hall and Pruppacher, JAS, 1976).
511! From trial & error calculations, it was determined that the ventilation
512! factors of smaller ice crystals could be approximated by a simple linear
513! increase in the ventilation coefficient from 1.0 at 50 microns (.05 mm) to
514! 1.1 at 200 microns (0.2 mm), rather than using the more complex function of
515! 1.0 + .14*(Sc**.33*Re**.5)**2 recommended by Hall & Pruppacher.
516!
517 real, parameter :: cvent1i=.86, cvent2i=.28
518!
519!---- These parameters are used for calculating the ventilation factors for larger
520! aggregates, where D>=1.5 mm (see Rutledge and Hobbs, JAS, 1983;
521! Thorpe and Mason, 1966).
522!
523 real, parameter :: cvent1a=.65, cvent2a=.44
524!
525 real m_agg,m_bullet,m_column,m_ice,m_plate
526!
527!---- Various constants
528!
529 real, parameter :: c1=2./3., cexp=1./3.
530!
531 logical :: iprint
532 logical, parameter :: print_diag=.false.
533!
534!-----------------------------------------------------------------------------------
535!- Constants & parameters for calculating the increase in fall speed of rimed ice --
536!-----------------------------------------------------------------------------------
537!
538!---- Constants & arrays for estimating increasing fall speeds of rimed ice.
539! Based largely on theory and results from Bohm (JAS, 1989, 2419-2427).
540!
541!-------------------- Standard atmosphere conditions at 1000 mb --------------------
542!
543 real, parameter :: t_std=288., dens_std=1000.e2/(287.04*288.)
544!
545!---- These "bulk densities" are the actual ice densities in the ice portion of the
546! lattice. They are based on text associated w/ (12) on p. 2425 of Bohm (JAS,
547! 1989). Columns, plates, & bullets are assumed to have an average bulk density
548! of 850 kg/m**3. Aggregates were assumed to have a slightly larger bulk density
549! of 600 kg/m**3 compared with dendrites (i.e., the least dense, most "lacy" &
550! tenous ice crystal, which was assumed to be ~500 kg/m**3 in Bohm).
551!
552 real, parameter :: dens_crystal=850., dens_agg=600.
553!
554!--- A value of Nrime=40 for a logarithmic ratio of 1.1 yields a maximum rime factor
555! of 1.1**40 = 45.26 that is resolved in these tables. This allows the largest
556! ice particles with a mean diameter of MDImax=1000 microns to achieve bulk
557! densities of 900 kg/m**3 for rimed ice.
558!
559! integer, parameter :: Nrime=40
560 real m_rime, &
561 & rime_factor(0:Nrime), rime_vel(0:Nrime), &
562 & vel_rime(IDImin:IDImax,Nrime), ivel_rime(MDImin:MDImax,Nrime)
563!
564 integer i, j, jj, k, icount
565 real c2, cbulk, cbulk_ice, px, dynvis_std, crime1 &
566 &, crime2, crime3, crime4, crime5, d, c_avg, c_agg &
567 &, c_bullet, c_column, c_plate, cl_agg, cl_bullet &
568 &, cl_column, cl_plate, v_agg, v_bullet, v_column &
569 &, v_plate, wd, ecc_column &
570 &, cvent1, cvent2, crime_best, rime_m1, rime_m2 &
571 &, x_rime, re_rime, smom3, pratei, expf &
572 &, bulk_dens, xmass, xmdiam, ecc_plate, dx
573!
574!-----------------------------------------------------------------------------------
575!----------------------------- BEGIN EXECUTION -------------------------------------
576!-----------------------------------------------------------------------------------
577!
578!
579 c2=1./sqrt(3.)
580! pi=acos(-1.)
581 cbulk=6./pi
582 cbulk_ice=900.*pi/6. ! Maximum bulk ice density allowed of 900 kg/m**3
583 px=.4**cexp ! Convert fall speeds from 400 mb (Starr & Cox) to 1000 mb
584!
585!--------------------- Dynamic viscosity (1000 mb, 288 K) --------------------------
586!
587 dynvis_std=1.496e-6*t_std**1.5/(t_std+120.)
588 crime1=pi/24.
589 crime2=8.*9.81*dens_std/(pi*dynvis_std**2)
590 crime3=crime1*dens_crystal
591 crime4=crime1*dens_agg
592 crime5=dynvis_std/dens_std
593 do i=0,nrime
594 rime_factor(i)=1.1**i
595 enddo
596!
597!#######################################################################
598! Characteristics as functions of actual ice particle diameter
599!#######################################################################
600!
601!---- M(D) & V(D) for 3 categories of ice crystals described by Starr
602!---- & Cox (1985).
603!
604!---- Capacitance & characteristic lengths for Reynolds Number calculations
605!---- are based on Young (1993; p. 144 & p. 150). c-axis & a-axis
606!---- relationships are from Heymsfield (JAS, 1972; Table 1, p. 1351).
607!
608 icount=60
609!
610 if (print_diag) &
611 & write(7,"(2a)") '---- Increase in fall speeds of rimed ice', &
612 & ' particles as function of ice particle diameter ----'
613 do i=idimin,idimax
614 if (icount == 60 .and. print_diag) then
615 write(6,"(/2a/3a)") 'Particle masses (mg), fall speeds ', &
616 & '(m/s), and ventilation factors', &
617 & ' D(mm) CR_mass Mass_bull Mass_col Mass_plat ', &
618 & ' Mass_agg CR_vel V_bul CR_col CR_pla Aggreg', &
619 & ' Vent1 Vent2 '
620 write(7,"(3a)") ' <----------------------------------',&
621 & '--------------- Rime Factor --------------------------', &
622 & '--------------------------->'
623 write(7,"(a,23f5.2)") ' D(mm)',(rime_factor(k), k=1,5), &
624 & (rime_factor(k), k=6,40,2)
625 icount=0
626 endif
627 d=(float(i)+.5)*1.e-3 ! in mm
628 c_avg=0.
629 c_agg=0.
630 c_bullet=0.
631 c_column=0.
632 c_plate=0.
633 cl_agg=0.
634 cl_bullet=0.
635 cl_column=0.
636 cl_plate=0.
637 m_agg=0.
638 m_bullet=0.
639 m_column=0.
640 m_plate=0.
641 v_agg=0.
642 v_bullet=0.
643 v_column=0.
644 v_plate=0.
645 if (d < d_crystal_max) then
646!
647!---- This block of code calculates bulk characteristics based on average
648! characteristics of bullets, plates, & column ice crystals <1.5 mm size
649!
650!---- Mass-diameter relationships from Heymsfield (1972) & used
651! in Starr & Cox (1985), units in mg
652!---- "d" is maximum dimension size of crystal in mm,
653!
654! Mass of pure ice for spherical particles, used as an upper limit for the
655! mass of small columns (<~ 80 microns) & plates (<~ 35 microns)
656!
657 m_ice=.48*d**3 ! Mass of pure ice for spherical particle
658!
659 m_bullet=min(.044*d**3, m_ice)
660 m_column=min(.017*d**1.7, m_ice)
661 m_plate=min(.026*d**2.5, m_ice)
662!
663 mass(i)=m_bullet+m_column+m_plate
664!
665!---- These relationships are from Starr & Cox (1985), applicable at 400 mb
666!---- "d" is maximum dimension size of crystal in mm, dx in microns
667!
668 dx=1000.*d ! Convert from mm to microns
669 if (dx <= 200.) then
670 v_column=8.114e-5*dx**1.585
671 v_bullet=5.666e-5*dx**1.663
672 v_plate=1.e-3*dx
673 else if (dx <= 400.) then
674 v_column=4.995e-3*dx**.807
675 v_bullet=3.197e-3*dx**.902
676 v_plate=1.48e-3*dx**.926
677 else if (dx <= 600.) then
678 v_column=2.223e-2*dx**.558
679 v_bullet=2.977e-2*dx**.529
680 v_plate=9.5e-4*dx
681 else if (dx <= 800.) then
682 v_column=4.352e-2*dx**.453
683 v_bullet=2.144e-2*dx**.581
684 v_plate=3.161e-3*dx**.812
685 else
686 v_column=3.833e-2*dx**.472
687 v_bullet=3.948e-2*dx**.489
688 v_plate=7.109e-3*dx**.691
689 endif
690!
691!---- Reduce fall speeds from 400 mb to 1000 mb
692!
693 v_column=px*v_column
694 v_bullet=px*v_bullet
695 v_plate=px*v_plate
696!
697!---- DIFFERENT VERSION! CALCULATES MASS-WEIGHTED CRYSTAL FALL SPEEDS
698!
699 vel(i)=(m_bullet*v_bullet+m_column*v_column+m_plate*v_plate)/ &
700 & mass(i)
701 mass(i)=mass(i)/3.
702!
703!---- Shape factor and characteristic length of various ice habits,
704! capacitance is equal to 4*PI*(Shape factor)
705! See Young (1993, pp. 143-152 for guidance)
706!
707!---- Bullets:
708!
709!---- Shape factor for bullets (Heymsfield, 1975)
710 c_bullet=.5*d
711!---- Length-width functions for bullets from Heymsfield (JAS, 1972)
712 if (d > 0.3) then
713 wd=.25*d**.7856 ! Width (mm); a-axis
714 else
715 wd=.185*d**.552
716 endif
717!---- Characteristic length for bullets (see first multiplicative term on right
718! side of eq. 7 multiplied by crystal width on p. 821 of Heymsfield, 1975)
719 cl_bullet=.5*pi*wd*(.25*wd+d)/(d+wd)
720!
721!---- Plates:
722!
723!---- Length-width function for plates from Heymsfield (JAS, 1972)
724 wd=.0449*d**.449 ! Width or thickness (mm); c-axis
725!---- Eccentricity & shape factor for thick plates following Young (1993, p. 144)
726 ecc_plate=sqrt(1.-wd*wd/(d*d)) ! Eccentricity
727 c_plate=d*ecc_plate/asin(ecc_plate) ! Shape factor
728!---- Characteristic length for plates following Young (1993, p. 150, eq. 6.6)
729 cl_plate=d+2.*wd ! Characteristic lengths for plates
730!
731!---- Columns:
732!
733!---- Length-width function for columns from Heymsfield (JAS, 1972)
734 if (d > 0.2) then
735 wd=.1973*d**.414 ! Width (mm); a-axis
736 else
737 wd=.5*d ! Width (mm); a-axis
738 endif
739!---- Eccentricity & shape factor for columns following Young (1993, p. 144)
740 ecc_column=sqrt(1.-wd*wd/(d*d)) ! Eccentricity
741 c_column=ecc_column*d/log((1.+ecc_column)*d/wd) ! Shape factor
742!---- Characteristic length for columns following Young (1993, p. 150, eq. 6.7)
743 cl_column=(wd+2.*d)/(c1+c2*d/wd) ! Characteristic lengths for columns
744!
745!---- Convert shape factor & characteristic lengths from mm to m for
746! ventilation calculations
747!
748 c_bullet=.001*c_bullet
749 c_plate=.001*c_plate
750 c_column=.001*c_column
751 cl_bullet=.001*cl_bullet
752 cl_plate=.001*cl_plate
753 cl_column=.001*cl_column
754!
755!---- Make a smooth transition between a ventilation coefficient of 1.0 at 50 microns
756! to 1.1 at 200 microns
757!
758 if (d > 0.2) then
759 cvent1=cvent1i
760 cvent2=cvent2i/3.
761 else
762 cvent1=1.0+.1*max(0., d-.05)/.15
763 cvent2=0.
764 endif
765!
766!---- Ventilation factors for ice crystals:
767!
768 vent1(i)=cvent1*(c_bullet+c_plate+c_column)/3.
769 vent2(i)=cvent2*(c_bullet*sqrt(v_bullet*cl_bullet) &
770 & +c_plate*sqrt(v_plate*cl_plate) &
771 & +c_column*sqrt(v_column*cl_column) )
772 crime_best=crime3 ! For calculating Best No. of rimed ice crystals
773 else
774!
775!---- This block of code calculates bulk characteristics based on average
776! characteristics of unrimed aggregates >= 1.5 mm using Locatelli &
777! Hobbs (JGR, 1974, 2185-2197) data.
778!
779!----- This category is a composite of aggregates of unrimed radiating
780!----- assemblages of dendrites or dendrites; aggregates of unrimed
781!----- radiating assemblages of plates, side planes, bullets, & columns;
782!----- aggregates of unrimed side planes (mass in mg, velocity in m/s)
783!
784 m_agg=(.073*d**1.4+.037*d**1.9+.04*d**1.4)/3.
785 v_agg=(.8*d**.16+.69*d**.41+.82*d**.12)/3.
786 mass(i)=m_agg
787 vel(i)=v_agg
788!
789!---- Assume spherical aggregates
790!
791!---- Shape factor is the same as for bullets, = D/2
792 c_agg=.001*.5*d ! Units of m
793!---- Characteristic length is surface area divided by perimeter
794! (.25*PI*D**2)/(PI*D**2) = D/4
795 cl_agg=.5*c_agg ! Units of m
796!
797!---- Ventilation factors for aggregates:
798!
799 vent1(i)=cvent1a*c_agg
800 vent2(i)=cvent2a*c_agg*sqrt(v_agg*cl_agg)
801 crime_best=crime4 ! For calculating Best No. of rimed aggregates
802 endif
803!
804!---- Convert from shape factor to capacitance for ventilation factors
805!
806 vent1(i)=4.*pi*vent1(i)
807 vent2(i)=4.*pi*vent2(i)
808 diam(i)=1.e-3*d ! Convert from mm to m
809 mass(i)=1.e-6*mass(i) ! Convert from mg to kg
810!
811!---- Calculate increase in fall speeds of individual rimed ice particles
812!
813 do k=0,nrime
814!---- Mass of rimed ice particle associated with rime_factor(k)
815 rime_m1=rime_factor(k)*mass(i)
816 rime_m2=cbulk_ice*diam(i)**3
817 m_rime=min(rime_m1, rime_m2)
818!---- Best Number (X) of rimed ice particle combining eqs. (8) & (12) in Bohm
819 x_rime=crime2*m_rime*(crime_best/m_rime)**.25
820!---- Reynolds Number for rimed ice particle using eq. (11) in Bohm
821 re_rime=8.5*(sqrt(1.+.1519*sqrt(x_rime))-1.)**2
822 rime_vel(k)=crime5*re_rime/diam(i)
823 enddo
824 do k=1,nrime
825 vel_rime(i,k)=rime_vel(k)/rime_vel(0)
826 enddo
827 if (print_diag) then
828 !
829 !---- Determine if statistics should be printed out.
830 !
831 iprint=.false.
832 if (d <= 1.) then
833 if (mod(i,10) == 0) iprint=.true.
834 else
835 if (mod(i,100) == 0) iprint=.true.
836 endif
837 if (iprint) then
838 write(6,"(f7.4,5e11.4,1x,5f7.4,1x,2e11.4)") &
839 & d,1.e6*mass(i),m_bullet,m_column,m_plate,m_agg, &
840 & vel(i),v_bullet,v_column,v_plate,v_agg, &
841 & vent1(i),vent2(i)
842 write(7,"(f7.4,23f5.2)") d,(vel_rime(i,k), k=1,5), &
843 & (vel_rime(i,k), k=6,40,2)
844 icount=icount+1
845 endif
846 endif
847 enddo
848!
849!#######################################################################
850! Characteristics as functions of mean particle diameter
851!#######################################################################
852!
853 venti1=0.
854 venti2=0.
855 accri=0.
856 massi=0.
857 vsnowi=0.
858 vel_rf=0.
859 ivel_rime=0.
860 icount=0
861 if (print_diag) then
862 icount=60
863 write(6,"(/2a)") '------------- Statistics as functions of ', &
864 & 'mean particle diameter -------------'
865 write(7,"(/2a)") '------ Increase in fall speeds of rimed ice', &
866 & ' particles as functions of mean particle diameter -----'
867 endif
868 do j=mdimin,mdimax
869 if (icount == 60 .AND. print_diag) then
870 write(6,"(/2a)") 'D(mm) Vent1 Vent2 ', &
871 & 'Accrete Mass Vel Dens '
872 write(7,"(3a)") ' <----------------------------------', &
873 & '--------------- Rime Factor --------------------------', &
874 & '--------------------------->'
875 write(7,"(a,23f5.2)") 'D(mm)',(rime_factor(k), k=1,5), &
876 & (rime_factor(k), k=6,40,2)
877 icount=0
878 endif
879 mdiam=deldmi*float(j) ! in m
880 smom3=0.
881 pratei=0.
882 rime_vel=0. ! Note that this array is being reused!
883 do i=idimin,idimax
884 dx=diam(i)/mdiam
885 if (dx <= xmax) then ! To prevent arithmetic underflows
886 expf=exp(-dx)*ddeli
887 venti1(j)=venti1(j)+vent1(i)*expf
888 venti2(j)=venti2(j)+vent2(i)*expf
889 accri(j)=accri(j)+diam(i)*diam(i)*vel(i)*expf
890 xmass=mass(i)*expf
891 do k=1,nrime
892 rime_vel(k)=rime_vel(k)+xmass*vel_rime(i,k)
893 enddo
894 massi(j)=massi(j)+xmass
895 pratei=pratei+xmass*vel(i)
896 smom3=smom3+diam(i)**3*expf
897 else
898 exit
899 endif
900 enddo
901 !
902 !--- Increased fall velocities functions of mean diameter (j),
903 ! normalized by ice content, and rime factor (k)
904 !
905 do k=1,nrime
906 ivel_rime(j,k)=rime_vel(k)/massi(j)
907 enddo
908 !
909 !--- Increased fall velocities functions of ice content at 0.1 mm
910 ! intervals (j_100) and rime factor (k); accumulations here
911 !
912 jj=j/100
913 if (jj >= 2 .AND. jj <= 9) then
914 do k=1,nrime
915 vel_rf(jj,k)=vel_rf(jj,k)+ivel_rime(j,k)
916 enddo
917 endif
918 bulk_dens=cbulk*massi(j)/smom3
919 venti1(j)=venti1(j)/mdiam
920 venti2(j)=venti2(j)/mdiam
921 accri(j)=accri(j)/mdiam
922 vsnowi(j)=pratei/massi(j)
923 massi(j)=massi(j)/mdiam
924 if (mod(j,10) == 0 .AND. print_diag) then
925 xmdiam=1.e3*mdiam
926 write(6,"(f6.3,4e11.4,f6.3,f8.3)") xmdiam,venti1(j),venti2(j),&
927 & accri(j),massi(j),vsnowi(j),bulk_dens
928 write(7,"(f6.3,23f5.2)") xmdiam,(ivel_rime(j,k), k=1,5), &
929 & (ivel_rime(j,k), k=6,40,2)
930 icount=icount+1
931 endif
932 enddo
933!
934!--- Average increase in fall velocities rimed ice as functions of mean
935! particle diameter (j, only need 0.1 mm intervals) and rime factor (k)
936!
937 if (print_diag) then
938 write(7,"(/2a)") ' ------- Increase in fall speeds of rimed ', &
939 & 'ice particles at reduced, 0.1-mm intervals --------'
940 write(7,"(3a)") ' <----------------------------------', &
941 & '--------------- Rime Factor --------------------------', &
942 & '--------------------------->'
943 write(7,"(a,23f5.2)") 'D(mm)',(rime_factor(k), k=1,5), &
944 & (rime_factor(k), k=6,40,2)
945 endif
946 do j=2,9
947 vel_rf(j,0)=1.
948 do k=1,nrime
949 vel_rf(j,k)=.01*vel_rf(j,k)
950 enddo
951 if (print_diag) write(7,"(f4.1,2x,23f5.2)") 0.1*j, &
952 & (vel_rf(j,k), k=1,5),(vel_rf(j,k), k=6,40,2)
953 enddo
954!
955!-----------------------------------------------------------------------------------
956!
957 end subroutine ice_lookup
958!
960 subroutine rain_lookup
961 implicit none
962!
963!--- Parameters & arrays for fall speeds of rain as a function of rain drop
964! diameter. These quantities are integrated over exponential size
965! distributions of rain drops at 1 micron intervals (DdelR) from minimum
966! drop sizes of .05 mm (50 microns, DminR) to maximum drop sizes of 10 mm
967! (DmaxR).
968!
969 real, parameter :: DminR=.05e-3, dmaxr=10.e-3, ddelr=1.e-6, &
970 & xrmin=1.e6*dminr, xrmax=1.e6*dmaxr
971 integer, parameter :: IDRmin=xrmin, idrmax=xrmax
972 real diam(IDRmin:IDRmax), vel(IDRmin:IDRmax)
973!
974!--- Parameters rain lookup tables, which establish the range of mean drop
975! diameters; from a minimum mean diameter of 0.05 mm (DMRmin) to a
976! maximum mean diameter of 0.45 mm (DMRmax). The tables store solutions
977! at 1 micron intervals (DelDMR) of mean drop diameter.
978!
979 real mdiam, mass
980!
981 logical, parameter :: print_diag=.false.
982!
983 real d, cmass, pi2, expf
984 integer i, j, i1, i2
985!
986!-----------------------------------------------------------------------
987!------- Fall speeds of rain as function of rain drop diameter ---------
988!-----------------------------------------------------------------------
989!
990 do i=idrmin,idrmax
991 diam(i)=float(i)*ddelr
992 d=100.*diam(i) ! Diameter in cm
993 if (d <= .42) then
994 !
995 !--- Rutledge & Hobbs (1983); vel (m/s), d (cm)
996 !
997 vel(i)=max(0., -.267+51.5*d-102.25*d*d+75.7*d**3)
998 else if (d > 0.42 .and. d <= .58) then
999 !
1000 !--- Linear interpolation of Gunn & Kinzer (1949) data
1001 !
1002 vel(i)=8.92+.25/(.58-.42)*(d-.42)
1003 else
1004 vel(i)=9.17
1005 endif
1006 enddo
1007 do i=1,100
1008 i1=(i-1)*100+idrmin
1009 i2=i1+90
1010 !
1011 !--- Print out rain fall speeds only for D<=5.8 mm (.58 cm)
1012 !
1013 if (diam(i1) > .58e-2) exit
1014 if (print_diag) then
1015 write(6,"(1x)")
1016 write(6,"('D(mm)-> ',10f7.3)") (1000.*diam(j), j=i1,i2,10)
1017 write(6,"('V(m/s)-> ',10f7.3)") (vel(j), j=i1,i2,10)
1018 endif
1019 enddo
1020!
1021!-----------------------------------------------------------------------
1022!------------------- Lookup tables for rain processes ------------------
1023!-----------------------------------------------------------------------
1024!
1025! pi=acos(-1.)
1026 pi2=2.*pi
1027 cmass=1000.*pi/6.
1028 if (print_diag) then
1029 write(6,"(/'Diam - Mean diameter (mm)' &
1030 & /'VENTR1 - 1st ventilation coefficient (m**2)' &
1031 & /'VENTR2 - 2nd ventilation coefficient (m**3/s**.5)' &
1032 & /'ACCRR - accretion moment (m**4/s)' &
1033 & /'RHO*QR - mass content (kg/m**3) for N0r=8e6' &
1034 & /'RRATE - rain rate moment (m**5/s)' &
1035 & /'VR - mass-weighted rain fall speed (m/s)' &
1036 & /' Diam VENTR1 VENTR2 ACCRR ', &
1037 & 'RHO*QR RRATE VR')")
1038 endif
1039 do j=mdrmin,mdrmax
1040 mdiam=float(j)*deldmr
1041 ventr2(j)=0.
1042 accrr(j)=0.
1043 massr(j)=0.
1044 rrate(j)=0.
1045 do i=idrmin,idrmax
1046 expf=exp(-diam(i)/mdiam)*ddelr
1047 ventr2(j)=ventr2(j)+diam(i)**1.5*vel(i)**.5*expf
1048 accrr(j)=accrr(j)+diam(i)*diam(i)*vel(i)*expf
1049 massr(j)=massr(j)+diam(i)**3*expf
1050 rrate(j)=rrate(j)+diam(i)**3*vel(i)*expf
1051 enddo
1052 !
1053 !--- Derived based on ventilation, F(D)=0.78+.31*Schmidt**(1/3)*Reynold**.5,
1054 ! where Reynold=(V*D*rho/dyn_vis), V is velocity, D is particle diameter,
1055 ! rho is air density, & dyn_vis is dynamic viscosity. Only terms
1056 ! containing velocity & diameter are retained in these tables.
1057 !
1058 ventr1(j)=.78*pi2*mdiam**2
1059 ventr2(j)=.31*pi2*ventr2(j)
1060 !
1061 massr(j)=cmass*massr(j)
1062 rrate(j)=cmass*rrate(j)
1063 vrain(j)=rrate(j)/massr(j)
1064 if (print_diag) write(6,"(f6.3,5g12.5,f6.3)") 1000.*mdiam, &
1065 & ventr1(j),ventr2(j),accrr(j),8.e6*massr(j),rrate(j),vrain(j)
1066 enddo
1067!
1068!-----------------------------------------------------------------------
1069!
1070 end subroutine rain_lookup
1071!
1072!###############################################################################
1073! ***** VERSION OF MICROPHYSICS DESIGNED FOR HIGHER RESOLUTION MESO ETA MODEL
1074! (1) Represents sedimentation by preserving a portion of the precipitation
1075! through top-down integration from cloud-top. Modified procedure to
1076! Zhao and Carr (1997).
1077! (2) Microphysical equations are modified to be less sensitive to time
1078! steps by use of Clausius-Clapeyron equation to account for changes in
1079! saturation mixing ratios in response to latent heating/cooling.
1080! (3) Prevent spurious temperature oscillations across 0C due to
1081! microphysics.
1082! (4) Uses lookup tables for: calculating two different ventilation
1083! coefficients in condensation and deposition processes; accretion of
1084! cloud water by precipitation; precipitation mass; precipitation rate
1085! (and mass-weighted precipitation fall speeds).
1086! (5) Assumes temperature-dependent variation in mean diameter of large ice
1087! (Houze et al., 1979; Ryan et al., 1996).
1088! -> 8/22/01: This relationship has been extended to colder temperatures
1089! to parameterize smaller large-ice particles down to mean sizes of MDImin,
1090! which is 50 microns reached at -55.9C.
1091! (6) Attempts to differentiate growth of large and small ice, mainly for
1092! improved transition from thin cirrus to thick, precipitating ice
1093! anvils.
1094! -> 8/22/01: This feature has been diminished by effectively adjusting to
1095! ice saturation during depositional growth at temperatures colder than
1096! -10C. Ice sublimation is calculated more explicitly. The logic is
1097! that sources of are either poorly understood (e.g., nucleation for NWP)
1098! or are not represented in the Eta model (e.g., detrainment of ice from
1099! convection). Otherwise the model is too wet compared to the radiosonde
1100! observations based on 1 Feb - 18 March 2001 retrospective runs.
1101! (7) Top-down integration also attempts to treat mixed-phase processes,
1102! allowing a mixture of ice and water. Based on numerous observational
1103! studies, ice growth is based on nucleation at cloud top &
1104! subsequent growth by vapor deposition and riming as the ice particles
1105! fall through the cloud. Effective nucleation rates are a function
1106! of ice supersaturation following Meyers et al. (JAM, 1992).
1107! -> 8/22/01: The simulated relative humidities were far too moist compared
1108! to the rawinsonde observations. This feature has been substantially
1109! diminished, limited to a much narrower temperature range of 0 to -10C.
1110! (8) Depositional growth of newly nucleated ice is calculated for large time
1111! steps using Fig. 8 of Miller and Young (JAS, 1979), at 1 deg intervals
1112! using their ice crystal masses calculated after 600 s of growth in water
1113! saturated conditions. The growth rates are normalized by time step
1114! assuming 3D growth with time**1.5 following eq. (6.3) in Young (1993).
1115! -> 8/22/01: This feature has been effectively limited to 0 to -10C.
1116! (9) Ice precipitation rates can increase due to increase in response to
1117! cloud water riming due to (a) increased density & mass of the rimed
1118! ice, and (b) increased fall speeds of rimed ice.
1119! -> 8/22/01: This feature has been effectively limited to 0 to -10C.
1120!###############################################################################
1121!###############################################################################
1122!
1123 SUBROUTINE gsmcolumn ( ARAING, ASNOWG, DTPG, I_index, J_index, &
1124 & LSFC, P_col, QI_col, QR_col, QV_col, QW_col, RimeF_col, T_col, &
1125 & THICK_col, WC_col, LM, RHC_col, XNCW, FLGmin, PRINT_diag, psfc)
1126!
1127 implicit none
1128!
1129!###############################################################################
1130!###############################################################################
1131!
1132!-------------------------------------------------------------------------------
1133!----- NOTE: In this version of the Code threading should be done outside!
1134!-------------------------------------------------------------------------------
1135!$$$ SUBPROGRAM DOCUMENTATION BLOCK
1136! . . .
1137! SUBPROGRAM: Grid-scale microphysical processes - condensation & precipitation
1138! PRGRMMR: Ferrier ORG: W/NP22 DATE: 08-2001
1139! Updated: Moorthi for GFS application
1140!-------------------------------------------------------------------------------
1141! ABSTRACT:
1142! * Merges original GSCOND & PRECPD subroutines.
1143! * Code has been substantially streamlined and restructured.
1144! * Exchange between water vapor & small cloud condensate is calculated using
1145! the original Asai (1965, J. Japan) algorithm. See also references to
1146! Yau and Austin (1979, JAS), Rutledge and Hobbs (1983, JAS), and Tao et al.
1147! (1989, MWR). This algorithm replaces the Sundqvist et al. (1989, MWR)
1148! parameterization.
1149!-------------------------------------------------------------------------------
1150!
1151! USAGE:
1152! * CALL GSMCOLUMN FROM SUBROUTINE GSMDRIVE
1153! * SUBROUTINE GSMDRIVE CALLED FROM MAIN PROGRAM EBU
1154!
1155! INPUT ARGUMENT LIST:
1156! DTPH - physics time step (s)
1157! I_index - I index
1158! J_index - J index
1159! LSFC - Eta level of level above surface, ground
1160! P_col - vertical column of model pressure (Pa)
1161! QI_col - vertical column of model ice mixing ratio (kg/kg)
1162! QR_col - vertical column of model rain ratio (kg/kg)
1163! QV_col - vertical column of model water vapor specific humidity (kg/kg)
1164! QW_col - vertical column of model cloud water mixing ratio (kg/kg)
1165! RimeF_col - vertical column of rime factor for ice in model (ratio, defined below)
1166! T_col - vertical column of model temperature (deg K)
1167! THICK_col - vertical column of model mass thickness (density*height increment)
1168! WC_col - vertical column of model mixing ratio of total condensate (kg/kg)
1169!
1170!
1171! OUTPUT ARGUMENT LIST:
1172! ARAIN - accumulated rainfall at the surface (kg)
1173! ASNOW - accumulated snowfall at the surface (kg)
1174! QV_col - vertical column of model water vapor specific humidity (kg/kg)
1175! WC_col - vertical column of model mixing ratio of total condensate (kg/kg)
1176! QW_col - vertical column of model cloud water mixing ratio (kg/kg)
1177! QI_col - vertical column of model ice mixing ratio (kg/kg)
1178! QR_col - vertical column of model rain ratio (kg/kg)
1179! RimeF_col - vertical column of rime factor for ice in model (ratio, defined below)
1180! T_col - vertical column of model temperature (deg K)
1181!
1182! OUTPUT FILES:
1183! NONE
1184!
1185! Subprograms & Functions called:
1186! * Real Function CONDENSE - cloud water condensation
1187! * Real Function DEPOSIT - ice deposition (not sublimation)
1188!
1189! UNIQUE: NONE
1190!
1191! LIBRARY: NONE
1192!
1193! ATTRIBUTES:
1194! LANGUAGE: FORTRAN 90
1195! MACHINE : IBM SP
1196!
1197!-------------------------------------------------------------------------
1198!--------------- Arrays & constants in argument list ---------------------
1199!-------------------------------------------------------------------------
1200!
1201 integer lm
1202 REAL ARAING, ASNOWG, P_col(LM), QI_col(LM), QR_col(LM), QV_col(LM)&
1203 &, QW_col(LM), RimeF_col(LM), T_col(LM), THICK_col(LM), &
1204 & WC_col(LM), RHC_col(LM), XNCW(LM), ARAIN, ASNOW, dtpg, psfc
1205 real flgmin
1206!
1207 INTEGER I_index, J_index, LSFC
1208!
1209!
1210!-------------------------------------------------------------------------
1211!
1212!--- Mean ice-particle diameters varying from 50 microns to 1000 microns
1213! (1 mm), assuming an exponential size distribution.
1214!
1215!---- Meaning of the following arrays:
1216! - mdiam - mean diameter (m)
1217! - VENTI1 - integrated quantity associated w/ ventilation effects
1218! (capacitance only) for calculating vapor deposition onto ice
1219! - VENTI2 - integrated quantity associated w/ ventilation effects
1220! (with fall speed) for calculating vapor deposition onto ice
1221! - ACCRI - integrated quantity associated w/ cloud water collection by ice
1222! - MASSI - integrated quantity associated w/ ice mass
1223! - VSNOWI - mass-weighted fall speed of snow (large ice), used to calculate
1224! precipitation rates
1225!
1226 REAL, PARAMETER :: DMImin=.05e-3, dmimax=1.e-3, deldmi=1.e-6, &
1227 & xmimin=1.e6*dmimin, xmimax=1.e6*dmimax
1228 INTEGER, PARAMETER :: MDImin=xmimin, mdimax=xmimax
1229!
1230!-------------------------------------------------------------------------
1231!------- Key parameters, local variables, & important comments ---------
1232!-----------------------------------------------------------------------
1233!
1234!--- KEY Parameters:
1235!
1236!---- Comments on 14 March 2002
1237! * Set EPSQ to the universal value of 1.e-12 throughout the code
1238! condensate. The value of EPSQ will need to be changed in the other
1239! subroutines in order to make it consistent throughout the Eta code.
1240! * Set CLIMIT=10.*EPSQ as the lower limit for the total mass of
1241! condensate in the current layer and the input flux of condensate
1242! from above (TOT_ICE, TOT_ICEnew, TOT_RAIN, and TOT_RAINnew).
1243!
1244!-- NLImax - maximum number concentration of large ice crystals (20,000 /m**3, 20 per liter)
1245!-- NLImin - minimum number concentration of large ice crystals (100 /m**3, 0.1 per liter)
1246!
1247 REAL, PARAMETER :: RHOL=1000., xls=hvap+hfus &
1248
1249! &, T_ICE=-10. !- Ver1
1250! &, T_ICE_init=-5. !- Ver1
1251!!! &, T_ICE=-20. !- Ver2
1252! &, T_ICE=-40. !- Ver2
1253! &, T_ICE_init=-15., !- Ver2
1254!
1255! & CLIMIT=10.*EPSQ, EPS1=RV/RD-1., RCP=1./CP,
1256
1257 &,climit=10.*epsq, rcp=1./cp, &
1258 & rcprv=rcp/rv, rrhol=1./rhol, xls1=xls*rcp, xls2=xls*xls*rcprv, &
1259 & xls3=xls*xls/rv, &
1260 & c1=1./3., c2=1./6., c3=3.31/6., &
1261 & dmr1=.1e-3, dmr2=.2e-3, dmr3=.32e-3, n0r0=8.e6, n0rmin=1.e4, &
1262 & n0s0=4.e6, rho0=1.194, xmr1=1.e6*dmr1, xmr2=1.e6*dmr2, &
1263 & xmr3=1.e6*dmr3, xratio=.025
1264 INTEGER, PARAMETER :: MDR1=xmr1, mdr2=xmr2, mdr3=xmr3
1265!
1266!--- If BLEND=1:
1267! precipitation (large) ice amounts are estimated at each level as a
1268! blend of ice falling from the grid point above and the precip ice
1269! present at the start of the time step (see TOT_ICE below).
1270!--- If BLEND=0:
1271! precipitation (large) ice amounts are estimated to be the precip
1272! ice present at the start of the time step.
1273!
1274!--- Extended to include sedimentation of rain on 2/5/01
1275!
1276 REAL, PARAMETER :: BLEND=1.
1277!
1278!--- This variable is for debugging purposes (if .true.)
1279!
1280 LOGICAL PRINT_diag
1281!
1282!--- Local variables
1283!
1284 REAL EMAIRI, N0r, NLICE, NSmICE, NLImax, pfac
1285 LOGICAL CLEAR, ICE_logical, DBG_logical, RAIN_logical
1286
1287 integer lbef, ipass, ixrf, ixs, itdx, idr &
1288 &, index_my, indexr, indexr1, indexs &
1289 &, i, j, k, l, ntimes, item
1290! &, i, j, k, my_600, i1, i2, l, ntimes
1291
1292 real flimass, xlimass, vsnow, qi_min, dum, piloss &
1293 &, tot_ice, xsimass, vel_inc, vrimef, rimef1, dum1 &
1294 &, dum2, fws, denomi, dwv &
1295 &, xrf, qw0, dli, xli, fsmall &
1296 &, prevp, tk2, dtph &
1297 &, pievp, picnd, piacr, pracw &
1298 &, praut, pimlt, qtice, qlice &
1299 &, gammar, flarge, wvqw, dynvis &
1300 &, tfactor, denom, gammas, diffus, therm_cond &
1301 &, wvnew, delv, tnew, tot_icenew, rimef &
1302 &, deli, fwr, crevp, ventr, delt &
1303 &, delw, fir, delr, qsinew, qswnew &
1304 &, budget, wsnew, vrain2, tot_rainnew &
1305 &, qtnew, qt, wcnew, abw &
1306 &, aievp, tcc, denomf, abi &
1307 &, sfactor, pidep_max, didep, ventis, ventil &
1308 &, dievp, rqr, rfactor, dwvr, rr, tot_rain &
1309 &, dwv0, qsw0, prloss, qtrain, vrain1 &
1310 &, qsw, ws, esi, esw, wv, wc, rhgrd, rho &
1311 &, rrho, dtrho, wsgrd, qsi, qswgrd, qsigrd &
1312 &, tk, tc, pp, bldtrh &
1313 &, xlv, xlv1, xlf, xlf1, xlv2, denomw, denomwi &
1314 &, qwnew, pcond, pidep, qrnew, qi, qr, qw &
1315 &, piacw, piacwi, piacwr, qv, dwvi &
1316 &, arainnew, thick, asnownew &
1317 &, qinew, qi_min_0c, QSW_l, QSI_l, QSW0_l, SCHMIT_FAC
1318
1319!
1320!
1321!#######################################################################
1322!########################## Begin Execution ############################
1323!#######################################################################
1324!
1325 dtph = dtpg / mic_step
1326 araing = 0. ! Total Accumulated rainfall at surface (kg/m**2)
1327 asnowg = 0. ! Total Accumulated snowfall at surface (kg/m**2)
1328!
1329 do ntimes =1,mic_step
1330!
1331 qi_min_0c = 10.e3*massi(mdimin) !- Ver5
1332 arain = 0. ! Accumulated rainfall at surface for this step (kg/m**2)
1333 asnow = 0. ! Accumulated snowfall at surface for this step (kg/m**2)
1334
1335 indexr = mdrmin
1336!
1337!-----------------------------------------------------------------------
1338!
1339 DO l=1,lsfc ! Loop from top (L=1) to surface (L=LSFC)
1340
1341!--- Skip this level and go to the next lower level if no condensate
1342! and very low specific humidities
1343!
1344 IF (qv_col(l) > epsq .OR. wc_col(l) > epsq) THEN
1345!
1346!-----------------------------------------------------------------------
1347!------------ Proceed with cloud microphysics calculations -------------
1348!-----------------------------------------------------------------------
1349!
1350 tk = t_col(l) ! Temperature (deg K)
1351 tc = tk-t0c ! Temperature (deg C)
1352 pp = p_col(l) ! Pressure (Pa)
1353 qv = qv_col(l) ! Specific humidity of water vapor (kg/kg)
1354! WV = QV/(1.-QV) ! Water vapor mixing ratio (kg/kg)
1355 wv = qv ! Water vapor specific humidity (kg/kg)
1356 wc = wc_col(l) ! Grid-scale mixing ratio of total condensate
1357 ! (water or ice; kg/kg)
1358! WC = WC/(1.-WC)
1359 rhgrd = rhc_col(l)
1360
1361!
1362! Pressure dependen scaling factor for flgmin (tunable)
1363!
1364!!! pfac = max(0.5, (min(1.0, pp*0.00002))**2) ! commented on 02182011
1365!go pfac = max(0.5, (sqrt(min(1.0, pp*0.00004))))
1366 pfac = 1.0
1367!
1368 clear = .true.
1369!
1370!--- Check grid-scale saturation when no condensate is present
1371!
1372 esw = min(pp, fpvsl(tk)) ! Saturation vapor pressure w/r/t water
1373! QSW = EPS*ESW/(PP-ESW) ! Saturation mixing ratio w/r/t water
1374 qsw = eps*esw/(pp+epsm1*esw) ! Saturation specific humidity w/r/t water
1375 ws = qsw ! General saturation mixing ratio (water/ice)
1376 qsi = qsw
1377 IF (tc < 0.) THEN
1378 esi = min(pp,fpvsi(tk)) ! Saturation vapor pressure w/r/t ice
1379! QSI = EPS*ESI/(PP-ESI) ! Saturation mixing ratio w/r/t water
1380 qsi = eps*esi/(pp+epsm1*esi) ! Saturation specific humidity w/r/t water
1381 ws = qsi ! General saturation mixing ratio (water/ice)
1382 if (pp <= esi) ws = wv / rhgrd
1383 ENDIF
1384!
1385 dum = min(pp, esw0)
1386 qsw0 = eps*dum/(pp+epsm1*dum) ! Saturation specific Humidity at 0C
1387!
1388!--- Effective grid-scale Saturation mixing ratios
1389!
1390 qswgrd = rhgrd*qsw
1391 qsigrd = rhgrd*qsi
1392 wsgrd = rhgrd*ws
1393 qsw_l = qswgrd
1394 qsi_l = qsigrd
1395 qsw0_l = qsw0*rhgrd
1396!
1397!--- Check if air is subsaturated and w/o condensate
1398!
1399 IF (wv > wsgrd .OR. wc > epsq) clear = .false. ! Cloudy case
1400 IF (arain > climit) THEN ! If any rain is falling into layer from above
1401 clear = .false.
1402 ELSE
1403 arain = 0.
1404 ENDIF
1405!
1406!--- Check if any ice is falling into layer from above
1407!
1408!--- NOTE that "SNOW" in variable names is synonomous with
1409! large, precipitation ice particles
1410!
1411 IF (asnow > climit) THEN
1412 clear = .false.
1413 ELSE
1414 asnow = 0.
1415 ENDIF
1416!
1417!-----------------------------------------------------------------------
1418!-- Loop to the end if in clear, subsaturated air free of condensate ---
1419!-----------------------------------------------------------------------
1420!
1421 IF (.not. clear) THEN
1422!
1423!-----------------------------------------------------------------------
1424!--------- Initialize RHO, THICK & microphysical processes -------------
1425!-----------------------------------------------------------------------
1426!
1427!
1428!--- Virtual temperature, TV=T*(1./EPS-1)*Q, Q is specific humidity;
1429! (see pp. 63-65 in Fleagle & Businger, 1963)
1430!
1431 rho = pp/(rd*tk*(1.+eps1*qv)) ! Air density (kg/m**3)
1432 rrho = 1./rho ! Reciprocal of air density
1433 dtrho = dtph*rho ! Time step * air density
1434 bldtrh = blend*dtrho ! Blend parameter * time step * air density
1435 thick = thick_col(l) ! Layer thickness = RHO*DZ = -DP/G
1436!
1437 arainnew = 0. ! Updated accumulated rainfall at surface
1438 asnownew = 0. ! Updated accumulated snowfall at surface
1439 qi = qi_col(l) ! Ice mixing ratio
1440 qinew = 0. ! Updated ice mixing ratio
1441 qr = qr_col(l) ! Rain mixing ratio
1442 qrnew = 0. ! Updated rain ratio
1443 qw = qw_col(l) ! Cloud water mixing ratio
1444 qwnew = 0. ! Updated cloud water ratio
1445!
1446 pcond = 0. ! Condensation (>0) or evaporation (<0)
1447 ! of cloud water (kg/kg)
1448 pidep = 0. ! Deposition (>0) or sublimation (<0)
1449 ! of ice crystals (kg/kg)
1450 piacw = 0. ! Cloud water collection (riming)
1451 ! by precipitation ice (kg/kg; >0)
1452 piacwi = 0. ! Growth of precip ice by riming (kg/kg; >0)
1453 piacwr = 0. ! Shedding of accreted cloud water
1454 ! to form rain (kg/kg; >0)
1455 piacr = 0. ! Freezing of rain onto large ice
1456 ! at supercooled temps (kg/kg; >0)
1457 picnd = 0. ! Condensation (>0) onto wet, melting
1458 ! ice (kg/kg)
1459 pievp = 0. ! Evaporation (<0) from wet, melting
1460 ! ice (kg/kg)
1461 pimlt = 0. ! Melting ice (kg/kg; >0)
1462 praut = 0. ! Cloud water autoconversion to rain (kg/kg; >0)
1463 pracw = 0. ! Cloud water collection (accretion) by rain (kg/kg; >0)
1464 prevp = 0. ! Rain evaporation (kg/kg; <0)
1465!
1466!---------------------------------------------------------------------------
1467!--- Double check input hydrometeor mixing ratios
1468!
1469! DUM = WC - (QI+QW+QR)
1470! DUM1 = ABS(DUM)
1471! DUM2 = TOLER * MIN(WC, QI+QW+QR)
1472! IF (DUM1 > DUM2) THEN
1473! WRITE(6,"(/2(a,i4),a,i2)") '{@ i=',I_index,' j=',J_index,
1474! & ' L=',L
1475! WRITE(6,"(4(a12,g11.4,1x))")
1476! & '{@ TCold=',TC,'P=',.01*PP,'DIFF=',DUM,'WCold=',WC,
1477! & '{@ QIold=',QI,'QWold=',QW,'QRold=',QR
1478! ENDIF
1479!
1480!***********************************************************************
1481!*********** MAIN MICROPHYSICS CALCULATIONS NOW FOLLOW! ****************
1482!***********************************************************************
1483!
1484!--- Calculate a few variables, which are used more than once below
1485!
1486!--- Latent heat of vaporization as a function of temperature from
1487! Bolton (1980, JAS)
1488!
1489 xlv = 3.148e6 - 2370*tk ! Latent heat of vaporization (Lv)
1490 xlf = xls-xlv ! Latent heat of fusion (Lf)
1491 xlv1 = xlv*rcp ! Lv/Cp
1492 xlf1 = xlf*rcp ! Lf/Cp
1493 tk2 = 1./(tk*tk) ! 1./TK**2
1494 xlv2 = xlv*xlv*qsw_l*tk2/rv ! Lv**2*Qsw_l/(Rv*TK**2)
1495 denomw = 1. + xlv2*rcp ! Denominator term, Clausius-Clapeyron correction
1496!
1497!--- Basic thermodynamic quantities
1498! * DYNVIS - dynamic viscosity [ kg/(m*s) ]
1499! * THERM_COND - thermal conductivity [ J/(m*s*K) ]
1500! * DIFFUS - diffusivity of water vapor [ m**2/s ]
1501!
1502! TFACTOR = TK**1.5/(TK+120.)
1503 tfactor = tk*sqrt(tk)/(tk+120.)
1504 dynvis = 1.496e-6*tfactor
1505 therm_cond = 2.116e-3*tfactor
1506 diffus = 8.794e-5*tk**1.81/pp
1507 schmit_fac = (rho/(diffus*diffus*dynvis))**c2
1508!
1509!--- Air resistance term for the fall speed of ice following the
1510! basic research by Heymsfield, Kajikawa, others
1511!
1512 gammas = (1.e5/pp)**c1
1513!
1514!--- Air resistance for rain fall speed (Beard, 1985, JAOT, p.470)
1515!
1516 gammar = (rho0/rho)**0.4
1517!
1518!----------------------------------------------------------------------
1519!------------- IMPORTANT MICROPHYSICS DECISION TREE -----------------
1520!----------------------------------------------------------------------
1521!
1522!--- Determine if conditions supporting ice are present
1523!
1524 IF (tc < 0. .OR. qi > epsq .OR. asnow > climit) THEN
1525 ice_logical = .true.
1526 ELSE
1527 ice_logical = .false.
1528 qlice = 0.
1529 qtice = 0.
1530 ENDIF
1531!
1532!--- Determine if rain is present
1533!
1534 rain_logical = .false.
1535 IF (arain > climit .OR. qr > epsq) rain_logical = .true.
1536!
1537 IF (ice_logical) THEN
1538!
1539!--- IMPORTANT: Estimate time-averaged properties.
1540!
1541!---
1542! * FLARGE - ratio of number of large ice to total (large & small) ice
1543! * FSMALL - ratio of number of small ice crystals to large ice particles
1544! -> Small ice particles are assumed to have a mean diameter of 50 microns.
1545! * XSIMASS - used for calculating small ice mixing ratio
1546!---
1547! * TOT_ICE - total mass (small & large) ice before microphysics,
1548! which is the sum of the total mass of large ice in the
1549! current layer and the input flux of ice from above
1550! * PILOSS - greatest loss (<0) of total (small & large) ice by
1551! sublimation, removing all of the ice falling from above
1552! and the ice within the layer
1553! * RimeF1 - Rime Factor, which is the mass ratio of total (unrimed & rimed)
1554! ice mass to the unrimed ice mass (>=1)
1555! * VrimeF - the velocity increase due to rime factor or melting (ratio, >=1)
1556! * VSNOW - Fall speed of rimed snow w/ air resistance correction
1557! * EMAIRI - equivalent mass of air associated layer and with fall of snow into layer
1558! * XLIMASS - used for calculating large ice mixing ratio
1559! * FLIMASS - mass fraction of large ice
1560! * QTICE - time-averaged mixing ratio of total ice
1561! * QLICE - time-averaged mixing ratio of large ice
1562! * NLICE - time-averaged number concentration of large ice
1563! * NSmICE - number concentration of small ice crystals at current level
1564!---
1565!--- Assumed number fraction of large ice particles to total (large & small)
1566! ice particles, which is based on a general impression of the literature.
1567!
1568 wvqw = wv + qw ! Water vapor + cloud water
1569!
1570!--- 6/19/03 - Deleted some code here ....
1571!
1572! *********************************************************
1573
1574! IF (TC >= 0. .OR. WVQW < QSIgrd) THEN
1575! !
1576! !--- Eliminate small ice particle contributions for melting & sublimation
1577! !
1578! FLARGE = FLARGE1
1579! ELSE
1580! !
1581! !--- Enhanced number of small ice particles during depositional growth
1582! ! (effective only when 0C > T >= T_ice [-10C] )
1583! !
1584! FLARGE = FLARGE2
1585! !
1586! !--- Larger number of small ice particles due to rime splintering
1587! !
1588! IF (TC >= -8. .AND. TC <= -3.) FLARGE=.5*FLARGE
1589!
1590! ENDIF ! End IF (TC >= 0. .OR. WVQW < QSIgrd)
1591! FSMALL=(1.-FLARGE)/FLARGE
1592! XSIMASS=RRHO*MASSI(MDImin)*FSMALL
1593! *********************************************************
1594!
1595 IF (qi <= epsq .AND. asnow <= climit) THEN
1596 indexs = mdimin
1597 flarge = 0. !--- Begin 6/19/03 changes
1598 fsmall = 1.
1599 xsimass = rrho*massi(mdimin) !--- End 6/19/03 changes
1600 tot_ice = 0.
1601 piloss = 0.
1602 rimef1 = 1.
1603 vrimef = 1.
1604 vel_inc = gammas
1605 vsnow = 0.
1606 emairi = thick
1607 xlimass = rrho*rimef1*massi(indexs)
1608 flimass = xlimass/(xlimass+xsimass)
1609 qlice = 0.
1610 qtice = 0.
1611 nlice = 0.
1612 nsmice = 0.
1613 ELSE
1614 !
1615 !--- For T<0C mean particle size follows Houze et al. (JAS, 1979, p. 160),
1616 ! converted from Fig. 5 plot of LAMDAs. Similar set of relationships
1617 ! also shown in Fig. 8 of Ryan (BAMS, 1996, p. 66).
1618 !
1619 !--- Begin 6/19/03 changes => allow NLImax to increase & FLARGE to
1620 ! decrease at COLDER temperatures; set FLARGE to zero (i.e., only small
1621 ! ice) if the ice mixing ratio is below QI_min
1622
1623! DUM = MAX(0.05, MIN(1., EXP(.0536*TC)) )
1624 dum = max(0.05, min(1., exp(.0564*tc)) )
1625 indexs = min(mdimax, max(mdimin, int(xmimax*dum) ) )
1626!
1627 dum = max(flgmin*pfac, dum)
1628
1629 qi_min = qi_min_0c * dum !- Ver5 ----Not used ----
1630!! QI_min = QI_min_0C !- Ver5
1631!!! QI_min = QI_min_0C/DUM !- Ver5
1632
1633 nlimax = 10.e3/sqrt(dum) !- Ver3
1634 IF (tc < 0.) THEN
1635 flarge = dum !- Ver4
1636 ELSE
1637 flarge = 1.
1638 ENDIF
1639 fsmall = (1.-flarge)/flarge
1640 xsimass = rrho*massi(mdimin)*fsmall
1641 tot_ice = thick*qi + blend*asnow
1642 piloss = -tot_ice/thick
1643 lbef = max(1,l-1)
1644 rimef1 = (rimef_col(l)*thick*qi &
1645 & + rimef_col(lbef)*blend*asnow)/tot_ice
1646 rimef1 = min(rimef1, rfmax)
1647 vsnow = 0.0
1648 DO ipass=0,1
1649 IF (rimef1 .LE. 1.) THEN
1650 rimef1 = 1.
1651 vrimef = 1.
1652 ELSE
1653 ixs = max(2, min(indexs/100, 9))
1654 xrf = 10.492*log(rimef1)
1655 ixrf = max(0, min(int(xrf), nrime))
1656 IF (ixrf .GE. nrime) THEN
1657 vrimef = vel_rf(ixs,nrime)
1658 ELSE
1659 vrimef = vel_rf(ixs,ixrf)+(xrf-float(ixrf))* &
1660 & (vel_rf(ixs,ixrf+1)-vel_rf(ixs,ixrf))
1661 ENDIF
1662 ENDIF ! End IF (RimeF1 <= 1.)
1663 vel_inc = gammas*vrimef
1664 vsnow = vel_inc*vsnowi(indexs)
1665 emairi = thick + bldtrh*vsnow
1666 xlimass = rrho*rimef1*massi(indexs)
1667 flimass = xlimass/(xlimass+xsimass)
1668 qtice = tot_ice/emairi
1669 qlice = flimass*qtice
1670 nlice = qlice/xlimass
1671 nsmice = fsmall*nlice
1672 !
1673 IF ( (nlice >= nlimin .AND. nlice <= nlimax) &
1674 & .OR. ipass == 1) THEN
1675 EXIT
1676 ELSE
1677 IF(tc < 0) THEN
1678 xli = rho*(qtice/dum-xsimass)/rimef1
1679 IF (xli <= massi(mdimin) ) THEN
1680 indexs = mdimin
1681 ELSE IF (xli <= massi(450) ) THEN
1682 dli = 9.5885e5*xli**.42066 ! DLI in microns
1683 indexs = min(mdimax, max(mdimin, int(dli) ) )
1684 ELSE IF (xli <= massi(mdimax) ) THEN
1685 dli = 3.9751e6*xli**.49870 ! DLI in microns
1686 indexs = min(mdimax, max(mdimin, int(dli) ) )
1687 ELSE
1688 indexs = mdimax
1689 ENDIF ! End IF (XLI <= MASSI(MDImin) )
1690 ENDIF ! End IF (TC < 0)
1691!
1692!--- Reduce excessive accumulation of ice at upper levels
1693! associated with strong grid-resolved ascent
1694!
1695!--- Force NLICE to be between NLImin and NLImax
1696!
1697!--- 8/22/01: Increase density of large ice if maximum limits
1698! are reached for number concentration (NLImax) and mean size
1699! (MDImax). Done to increase fall out of ice.
1700!
1701!
1702
1703 dum = max(nlimin, min(nlimax, nlice) )
1704 IF (dum >= nlimax .AND. indexs >= mdimax) &
1705 & rimef1 = rho*(qtice/nlimax-xsimass)/massi(indexs)
1706!
1707! WRITE(6,"(4(a12,g11.4,1x))")
1708! & '{$ TC=',TC,'P=',.01*PP,'NLICE=',NLICE,'DUM=',DUM,
1709! & '{$ XLI=',XLI,'INDEXS=',FLOAT(INDEXS),'RHO=',RHO,'QTICE=',QTICE,
1710! & '{$ XSIMASS=',XSIMASS,'RimeF1=',RimeF1
1711
1712 ENDIF ! End IF ( (NLICE >=NLImin .AND. NLICE >= NLImax)
1713 ENDDO ! End DO IPASS=0,1
1714 ENDIF ! End IF (QI <= EPSQ .AND. ASNOW <= CLIMIT)
1715 ENDIF ! End IF (ICE_logical)
1716!
1717!----------------------------------------------------------------------
1718!--------------- Calculate individual processes -----------------------
1719!----------------------------------------------------------------------
1720!
1721!--- Cloud water autoconversion to rain and collection by rain
1722!
1723 IF (qw > epsq .AND. tc >= t_ice) THEN
1724 !
1725 !--- QW0 could be modified based on land/sea properties,
1726 ! presence of convection, etc. This is why QAUT0 and CRAUT
1727 ! are passed into the subroutine as externally determined
1728 ! parameters. Can be changed in the future if desired.
1729 !
1730! QW0 = QAUT0*RRHO
1731 qw0 = qautx*rrho*xncw(l)
1732 praut = max(0., qw-qw0)*craut
1733 IF (qlice > epsq) THEN
1734 !
1735 !--- Collection of cloud water by large ice particles ("snow")
1736 ! PIACWI=PIACW for riming, PIACWI=0 for shedding
1737 !
1738!Moor FWS = MIN(1., CIACW*VEL_INC*NLICE*ACCRI(INDEXS)/PP**C1) ! 20050422
1739 fws = min(0.1, ciacw*vel_inc*nlice*accri(indexs) &
1740 & /pp**c1)
1741 piacw = fws*qw
1742 IF (tc < 0.) piacwi = piacw ! Large ice riming
1743
1744 ENDIF ! End IF (QLICE > EPSQ)
1745 ENDIF ! End IF (QW > EPSQ .AND. TC >= T_ICE)
1746!
1747!----------------------------------------------------------------------
1748!--- Loop around some of the ice-phase processes if no ice should be present
1749!----------------------------------------------------------------------
1750!
1751 IF (ice_logical) THEN
1752!
1753!--- Now the pretzel logic of calculating ice deposition
1754!
1755 IF (tc < t_ice .AND. (wv > qsigrd .OR. qw > epsq)) THEN
1756!
1757!--- Adjust to ice saturation at T<T_ICE (-10C) if supersaturated.
1758! Sources of ice due to nucleation and convective detrainment are
1759! either poorly understood, poorly resolved at typical NWP
1760! resolutions, or are not represented (e.g., no detrained
1761! condensate in BMJ Cu scheme).
1762!
1763 pcond = -qw
1764 dum1 = tk + xlv1*pcond ! Updated (dummy) temperature (deg K)
1765 dum2 = wv+qw ! Updated (dummy) water vapor mixing ratio
1766 dum = min(pp,fpvsi(dum1)) ! Updated (dummy) saturation vapor pressure w/r/t ice
1767 dum = rhgrd*eps*dum/(pp+epsm1*dum) ! Updated (dummy) saturation specific humidity w/r/t ice
1768! DUM = RHgrd*EPS*DUM/(PP-DUM) ! Updated (dummy) saturation mixing ratio w/r/t ice
1769
1770 IF (dum2 > dum) pidep = deposit(pp, rhgrd, dum1, dum2)
1771
1772 dwvi = 0. ! Used only for debugging
1773!
1774 ELSE IF (tc < 0.) THEN
1775!
1776!--- These quantities are handy for ice deposition/sublimation
1777! PIDEP_max - max deposition or minimum sublimation to ice saturation
1778!
1779 denomi = 1. + xls2*qsi_l*tk2
1780 dwvi = min(wvqw,qsw_l)-qsi_l
1781 pidep_max = max(piloss, dwvi/denomi)
1782 IF (qtice > 0.) THEN
1783!
1784!--- Calculate ice deposition/sublimation
1785! * SFACTOR - [VEL_INC**.5]*[Schmidt**(1./3.)]*[(RHO/DYNVIS)**.5],
1786! where Schmidt (Schmidt Number) =DYNVIS/(RHO*DIFFUS)
1787! * Units: SFACTOR - s**.5/m ; ABI - m**2/s ; NLICE - m**-3 ;
1788! VENTIL, VENTIS - m**-2 ; VENTI1 - m ;
1789! VENTI2 - m**2/s**.5 ; DIDEP - unitless
1790!
1791! SFACTOR = VEL_INC**.5*(RHO/(DIFFUS*DIFFUS*DYNVIS))**C2
1792 sfactor = sqrt(vel_inc)*schmit_fac
1793 abi = 1./(rho*xls3*qsi*tk2/therm_cond+1./diffus)
1794!
1795!--- VENTIL - Number concentration * ventilation factors for large ice
1796!--- VENTIS - Number concentration * ventilation factors for small ice
1797!
1798!--- Variation in the number concentration of ice with time is not
1799! accounted for in these calculations (could be in the future).
1800!
1801 ventil = (venti1(indexs) + sfactor*venti2(indexs)) &
1802 & * nlice
1803 ventis = (venti1(mdimin) + sfactor*venti2(mdimin)) &
1804 & * nsmice
1805 didep = abi*(ventil+ventis)*dtph
1806!
1807!--- Account for change in water vapor supply w/ time
1808!
1809 IF (didep >= xratio) &
1810 & didep = (1.-exp(-didep*denomi))/denomi
1811 IF (dwvi > 0.) THEN
1812 pidep = min(dwvi*didep, pidep_max)
1813 ELSE IF (dwvi < 0.) THEN
1814 pidep = max(dwvi*didep, pidep_max)
1815 ENDIF
1816!
1817 ELSE IF (wvqw > qsi_l .AND. tc <= t_ice_init) THEN
1818!
1819!--- Ice nucleation in near water-saturated conditions. Ice crystal
1820! growth during time step calculated using Miller & Young (1979, JAS).
1821!--- These deposition rates could drive conditions below water saturation,
1822! which is the basis of these calculations. Intended to approximate
1823! more complex & computationally intensive calculations.
1824!
1825 index_my = max(my_t1, min( int(.5-tc), my_t2 ) )
1826!
1827!--- DUM1 is the supersaturation w/r/t ice at water-saturated conditions
1828!
1829!--- DUM2 is the number of ice crystals nucleated at water-saturated
1830! conditions based on Meyers et al. (JAM, 1992).
1831!
1832!--- Prevent unrealistically large ice initiation (limited by PIDEP_max)
1833! if DUM2 values are increased in future experiments
1834!
1835 dum1 = qsw/qsi - 1.
1836 dum2 = 1.e3*exp(12.96*dum1-0.639)
1837 pidep = min(pidep_max,dum2*my_growth(index_my)*rrho)
1838!
1839 ENDIF ! End IF (QTICE > 0.)
1840!
1841 ENDIF ! End IF (TC < T_ICE .AND. (WV > QSIgrd .OR. QW > EPSQ))
1842!
1843!------------------------------------------------------------------------
1844!
1845 ENDIF ! End of IF (ICE_logical)then loop
1846!
1847!------------------------------------------------------------------------
1848!
1849!--- Cloud water condensation
1850!
1851 IF (tc >= t_ice .AND. (qw > epsq .OR. wv > qswgrd)) THEN
1852 IF (piacwi == 0. .AND. pidep == 0.) THEN
1853 pcond = condense(pp, qw, rhgrd, tk, wv)
1854 ELSE !-- Modify cloud condensation in response to ice processes
1855 dum = xlv*qswgrd*rcprv*tk2
1856 denomwi = 1. + xls*dum
1857 denomf = xlf*dum
1858 dum = max(0., pidep)
1859 pcond = (wv-qswgrd-denomwi*dum-denomf*piacwi)/denomw
1860 dum1 = -qw
1861 dum2 = pcond - piacw
1862 IF (dum2 < dum1) THEN !--- Limit cloud water sinks
1863 dum = dum1/dum2
1864 pcond = dum*pcond
1865 piacw = dum*piacw
1866 piacwi = dum*piacwi
1867 ENDIF ! EndIF (DUM2 < DUM1)
1868 ENDIF ! EndIF (PIACWI == 0. .AND. PIDEP == 0.)
1869 ENDIF ! EndIF (TC >= T_ICE .AND. (QW > EPSQ .OR. WV > QSWgrd))
1870!
1871!--- Limit freezing of accreted rime to prevent temperature oscillations,
1872! a crude Schumann-Ludlam limit (p. 209 of Young, 1993).
1873!
1874 tcc = tc + xlv1*pcond + xls1*pidep + xlf1*piacwi
1875 IF (tcc > 0.) THEN
1876 piacwi = 0.
1877 tcc = tc + xlv1*pcond + xls1*pidep
1878 ENDIF
1879!
1880 IF (tc > 0. .AND. tcc > 0. .AND. ice_logical) THEN
1881!
1882!--- Calculate melting and evaporation/condensation
1883! * Units: SFACTOR - s**.5/m ; ABI - m**2/s ; NLICE - m**-3 ;
1884! VENTIL - m**-2 ; VENTI1 - m ;
1885! VENTI2 - m**2/s**.5 ; CIEVP - /s
1886!
1887! SFACTOR = VEL_INC**.5*(RHO/(DIFFUS*DIFFUS*DYNVIS))**C2
1888 sfactor = sqrt(vel_inc)*schmit_fac
1889 ventil = nlice*(venti1(indexs)+sfactor*venti2(indexs))
1890 aievp = ventil*diffus*dtph
1891 IF (aievp < xratio) THEN
1892 dievp = aievp
1893 ELSE
1894 dievp = 1. - exp(-aievp)
1895 ENDIF
1896! QSW0 = EPS*ESW0/(PP-ESW0)
1897! QSW0 = EPS*ESW0/(PP+epsm1*ESW0)
1898!! dum = min(PP, ESW0)
1899!! QSW0 = EPS*dum/(PP+epsm1*dum)
1900! DWV0 = MIN(WV,QSW)-QSW0
1901 dwv0 = min(wv,qsw_l)-qsw0_l
1902 dum = qw + pcond
1903 IF (wv < qsw_l .AND. dum <= epsq) THEN
1904 !
1905 !--- Evaporation from melting snow (sink of snow) or shedding
1906 ! of water condensed onto melting snow (source of rain)
1907 !
1908 dum = dwv0*dievp
1909 pievp = max( min(0., dum), piloss)
1910 picnd = max(0., dum)
1911 ENDIF ! End IF (WV < QSW_l .AND. DUM <= EPSQ)
1912 pimlt = therm_cond*tcc*ventil*rrho*dtph/xlf
1913 !
1914 !--- Limit melting to prevent temperature oscillations across 0C
1915 !
1916 dum1 = max( 0., (tcc+xlv1*pievp)/xlf1 )
1917 pimlt = min(pimlt, dum1)
1918 !
1919 !--- Limit loss of snow by melting (>0) and evaporation
1920 !
1921 dum = pievp - pimlt
1922 IF (dum < piloss) THEN
1923 dum1 = piloss/dum
1924 pimlt = pimlt*dum1
1925 pievp = pievp*dum1
1926 ENDIF ! End IF (DUM > QTICE)
1927 ENDIF ! End IF (TC > 0. .AND. TCC > 0. .AND. ICE_logical)
1928!
1929!--- IMPORTANT: Estimate time-averaged properties.
1930!
1931! * TOT_RAIN - total mass of rain before microphysics, which is the sum of
1932! the total mass of rain in the current layer and the input
1933! flux of rain from above
1934! * VRAIN1 - fall speed of rain into grid from above (with air resistance correction)
1935! * QTRAIN - time-averaged mixing ratio of rain (kg/kg)
1936! * PRLOSS - greatest loss (<0) of rain, removing all rain falling from
1937! above and the rain within the layer
1938! * RQR - rain content (kg/m**3)
1939! * INDEXR - mean size of rain drops to the nearest 1 micron in size
1940! * N0r - intercept of rain size distribution (typically 10**6 m**-4)
1941!
1942 tot_rain = 0.
1943 vrain1 = 0.
1944 qtrain = 0.
1945 prloss = 0.
1946 rqr = 0.
1947 n0r = 0.
1948 indexr = mdrmin
1949 indexr1 = indexr ! For debugging only
1950 IF (rain_logical) THEN
1951 IF (arain <= 0.) THEN
1952 indexr = mdrmin
1953 vrain1 = 0.
1954 ELSE
1955 !
1956 !--- INDEXR (related to mean diameter) & N0r could be modified
1957 ! by land/sea properties, presence of convection, etc.
1958 !
1959 !--- Rain rate normalized to a density of 1.194 kg/m**3
1960 !
1961 rr = arain / (dtph*gammar)
1962 !
1963 IF (rr <= rr_drmin) THEN
1964 !
1965 !--- Assume fixed mean diameter of rain (0.2 mm) for low rain rates,
1966 ! instead vary N0r with rain rate
1967 !
1968 indexr = mdrmin
1969 ELSE IF (rr <= rr_dr1) THEN
1970 !
1971 !--- Best fit to mass-weighted fall speeds (V) from rain lookup tables
1972 ! for mean diameters (Dr) between 0.05 and 0.10 mm:
1973 ! V(Dr)=5.6023e4*Dr**1.136, V in m/s and Dr in m
1974 ! RR = PI*1000.*N0r0*5.6023e4*Dr**(4+1.136) = 1.408e15*Dr**5.136,
1975 ! RR in kg/(m**2*s)
1976 ! Dr (m) = 1.123e-3*RR**.1947 -> Dr (microns) = 1.123e3*RR**.1947
1977 !
1978 indexr = int( 1.123e3*rr**.1947 + .5 )
1979 indexr = max( mdrmin, min(indexr, mdr1) )
1980
1981 ELSE IF (rr <= rr_dr2) THEN
1982 !
1983 !--- Best fit to mass-weighted fall speeds (V) from rain lookup tables
1984 ! for mean diameters (Dr) between 0.10 and 0.20 mm:
1985 ! V(Dr)=1.0867e4*Dr**.958, V in m/s and Dr in m
1986 ! RR = PI*1000.*N0r0*1.0867e4*Dr**(4+.958) = 2.731e14*Dr**4.958,
1987 ! RR in kg/(m**2*s)
1988 ! Dr (m) = 1.225e-3*RR**.2017 -> Dr (microns) = 1.225e3*RR**.2017
1989 !
1990 indexr = int( 1.225e3*rr**.2017 + .5 )
1991 indexr = max( mdr1, min(indexr, mdr2) )
1992
1993 ELSE IF (rr <= rr_dr3) THEN
1994 !
1995 !--- Best fit to mass-weighted fall speeds (V) from rain lookup tables
1996 ! for mean diameters (Dr) between 0.20 and 0.32 mm:
1997 ! V(Dr)=2831.*Dr**.80, V in m/s and Dr in m
1998 ! RR = PI*1000.*N0r0*2831.*Dr**(4+.80) = 7.115e13*Dr**4.80,
1999 ! RR in kg/(m**2*s)
2000 ! Dr (m) = 1.3006e-3*RR**.2083 -> Dr (microns) = 1.3006e3*RR**.2083
2001 !
2002 indexr = int( 1.3006e3*rr**.2083 + .5 )
2003 indexr = max( mdr2, min(indexr, mdr3) )
2004
2005 ELSE IF (rr <= rr_drmax) THEN
2006 !
2007 !--- Best fit to mass-weighted fall speeds (V) from rain lookup tables
2008 ! for mean diameters (Dr) between 0.32 and 0.45 mm:
2009 ! V(Dr)=944.8*Dr**.6636, V in m/s and Dr in m
2010 ! RR = PI*1000.*N0r0*944.8*Dr**(4+.6636) = 2.3745e13*Dr**4.6636,
2011 ! RR in kg/(m**2*s)
2012 ! Dr (m) = 1.355e-3*RR**.2144 -> Dr (microns) = 1.355e3*RR**.2144
2013 !
2014 indexr = int( 1.355e3*rr**.2144 + .5 )
2015 indexr = max( mdr3, min(indexr, mdrmax) )
2016 ELSE
2017 !
2018 !--- Assume fixed mean diameter of rain (0.45 mm) for high rain rates,
2019 ! instead vary N0r with rain rate
2020 !
2021 indexr = mdrmax
2022 ENDIF ! End IF (RR <= RR_DRmin) etc.
2023!
2024 vrain1 = gammar*vrain(indexr)
2025 ENDIF ! End IF (ARAIN <= 0.)
2026!
2027 indexr1 = indexr ! For debugging only
2028 tot_rain = thick*qr+blend*arain
2029 qtrain = tot_rain/(thick+bldtrh*vrain1)
2030 prloss = -tot_rain/thick
2031 rqr = rho*qtrain
2032 !
2033 !--- RQR - time-averaged rain content (kg/m**3)
2034 !
2035 IF (rqr <= rqr_drmin) THEN
2036 n0r = max(n0rmin, cn0r_dmrmin*rqr)
2037 indexr = mdrmin
2038 ELSE IF (rqr >= rqr_drmax) THEN
2039 n0r = cn0r_dmrmax*rqr
2040 indexr = mdrmax
2041 ELSE
2042 n0r = n0r0
2043! INDEXR = MAX( XMRmin, MIN(CN0r0*RQR**.25, XMRmax) )
2044 item = cn0r0*sqrt(sqrt(rqr)) ! Moorthi 07/31/08
2045 indexr = max( mdrmin, min(item, mdrmax) ) ! Moorthi 07/31/08
2046 ENDIF
2047 !
2048 IF (tc < t_ice) THEN
2049 piacr = -prloss
2050 ELSE
2051 dwvr = wv - pcond - qsw_l
2052 dum = qw + pcond
2053 IF (dwvr < 0. .AND. dum <= epsq) THEN
2054!
2055!--- Rain evaporation
2056!
2057! * RFACTOR - [GAMMAR**.5]*[Schmidt**(1./3.)]*[(RHO/DYNVIS)**.5],
2058! where Schmidt (Schmidt Number) =DYNVIS/(RHO*DIFFUS)
2059!
2060! * Units: RFACTOR - s**.5/m ; ABW - m**2/s ; VENTR - m**-2 ;
2061! N0r - m**-4 ; VENTR1 - m**2 ; VENTR2 - m**3/s**.5 ;
2062! CREVP - unitless
2063!
2064! RFACTOR = GAMMAR**.5*(RHO/(DIFFUS*DIFFUS*DYNVIS))**C2
2065 rfactor = sqrt(gammar)*schmit_fac
2066 abw = 1./(rho*xlv2/therm_cond+1./diffus)
2067!
2068!--- Note that VENTR1, VENTR2 lookup tables do not include the
2069! 1/Davg multiplier as in the ice tables
2070!
2071 ventr = n0r*(ventr1(indexr)+rfactor*ventr2(indexr))
2072 crevp = abw*ventr*dtph
2073 IF (crevp < xratio) THEN
2074 dum = dwvr*crevp
2075 ELSE
2076 dum = dwvr*(1.-exp(-crevp*denomw))/denomw
2077 ENDIF
2078 prevp = max(dum, prloss)
2079 ELSE IF (qw > epsq) THEN
2080 fwr = cracw*gammar*n0r*accrr(indexr)
2081!Moor PRACW = MIN(1.,FWR)*QW ! 20050422
2082 pracw = min(0.1,fwr)*qw
2083 ENDIF ! End IF (DWVr < 0. .AND. DUM <= EPSQ)
2084!
2085 IF (tc < 0. .AND. tcc < 0.) THEN
2086!
2087!--- Biggs (1953) heteorogeneous freezing (e.g., Lin et al., 1983)
2088! - Rescaled mean drop diameter from microns (INDEXR) to mm (DUM) to prevent underflow
2089!
2090 dum = .001*float(indexr)
2091 dum1 = dum * dum
2092 dum = (exp(abfr*tc)-1.)*dum1*dum1*dum1*dum
2093 piacr = min(cbfr*n0r*rrho*dum, qtrain)
2094 IF (qlice > epsq) THEN
2095 !
2096 !--- Freezing of rain by collisions w/ large ice
2097 !
2098 dum = gammar*vrain(indexr)
2099 dum1 = dum-vsnow
2100 !
2101 !--- DUM2 - Difference in spectral fall speeds of rain and
2102 ! large ice, parameterized following eq. (48) on p. 112 of
2103 ! Murakami (J. Meteor. Soc. Japan, 1990)
2104 !
2105 dum2 = (dum1*dum1+.04*dum*vsnow)**.5
2106 dum1 = 5.e-12*indexr*indexr+2.e-12*indexr*indexs &
2107 & +.5e-12*indexs*indexs
2108 fir = min(1., ciacr*nlice*dum1*dum2)
2109 !
2110 !--- Future? Should COLLECTION BY SMALL ICE SHOULD BE INCLUDED???
2111 !
2112 piacr = min(piacr+fir*qtrain, qtrain)
2113 ENDIF ! End IF (QLICE > EPSQ)
2114 dum = prevp - piacr
2115 If (dum < prloss) THEN
2116 dum1 = prloss/dum
2117 prevp = dum1*prevp
2118 piacr = dum1*piacr
2119 ENDIF ! End If (DUM < PRLOSS)
2120 ENDIF ! End IF (TC < 0. .AND. TCC < 0.)
2121 ENDIF ! End IF (TC < T_ICE)
2122 ENDIF ! End IF (RAIN_logical)
2123!
2124!----------------------------------------------------------------------
2125!---------------------- Main Budget Equations -------------------------
2126!----------------------------------------------------------------------
2127!
2128!
2129!-----------------------------------------------------------------------
2130!--- Update fields, determine characteristics for next lower layer ----
2131!-----------------------------------------------------------------------
2132!
2133!--- Carefully limit sinks of cloud water
2134!
2135 dum1 = piacw + praut + pracw - min(0.,pcond)
2136 IF (dum1 > qw) THEN
2137 dum = qw/dum1
2138 piacw = dum*piacw
2139 piacwi = dum*piacwi
2140 praut = dum*praut
2141 pracw = dum*pracw
2142 IF (pcond < 0.) pcond=dum*pcond
2143 ENDIF
2144 piacwr = piacw - piacwi ! TC >= 0C
2145!
2146!--- QWnew - updated cloud water mixing ratio
2147!
2148 delw = pcond - piacw - praut - pracw
2149 qwnew = qw+delw
2150 IF (qwnew <= epsq) qwnew = 0.
2151 IF (qw > 0. .AND. qwnew /= 0.) THEN
2152 dum = qwnew/qw
2153 IF (dum < toler) qwnew = 0.
2154 ENDIF
2155!
2156!--- Update temperature and water vapor mixing ratios
2157!
2158 delt = xlv1 * (pcond+pievp+picnd+prevp) &
2159 & + xls1 * pidep + xlf1*(piacwi+piacr-pimlt)
2160 tnew = tk + delt
2161!
2162 delv = -pcond - pidep - pievp - picnd - prevp
2163 wvnew = wv + delv
2164!
2165!--- Update ice mixing ratios
2166!
2167!---
2168! * TOT_ICEnew - total mass (small & large) ice after microphysics,
2169! which is the sum of the total mass of large ice in the
2170! current layer and the flux of ice out of the grid box below
2171! * RimeF - Rime Factor, which is the mass ratio of total (unrimed &
2172! rimed) ice mass to the unrimed ice mass (>=1)
2173! * QInew - updated mixing ratio of total (large & small) ice in layer
2174! -> TOT_ICEnew=QInew*THICK+BLDTRH*QLICEnew*VSNOW
2175! -> But QLICEnew=QInew*FLIMASS, so
2176! -> TOT_ICEnew=QInew*(THICK+BLDTRH*FLIMASS*VSNOW)
2177! * ASNOWnew - updated accumulation of snow at bottom of grid cell
2178!---
2179!
2180 deli = 0.
2181 rimef = 1.
2182 IF (ice_logical) THEN
2183 deli = pidep + pievp + piacwi + piacr - pimlt
2184 tot_icenew = tot_ice + thick*deli
2185 IF (tot_ice > 0. .AND. tot_icenew /= 0.) THEN
2186 dum = tot_icenew/tot_ice
2187 IF (dum < toler) tot_icenew = 0.
2188 ENDIF
2189 IF (tot_icenew <= climit) THEN
2190 tot_icenew = 0.
2191 rimef = 1.
2192 qinew = 0.
2193 asnownew = 0.
2194 ELSE
2195 !
2196 !--- Update rime factor if appropriate
2197 !
2198 dum = piacwi + piacr
2199 IF (dum <= epsq .AND. pidep <= epsq) THEN
2200 rimef = rimef1
2201 ELSE
2202 !
2203 !--- Rime Factor, RimeF = (Total ice mass)/(Total unrimed ice mass)
2204 ! DUM1 - Total ice mass, rimed & unrimed
2205 ! DUM2 - Estimated mass of *unrimed* ice
2206 !
2207 dum1 = tot_ice + thick*(pidep+dum)
2208 dum2 = tot_ice/rimef1 + thick*pidep
2209 IF (dum2 <= 0.) THEN
2210 rimef = rfmax
2211 ELSE
2212 rimef = min(rfmax, max(1., dum1/dum2) )
2213 ENDIF
2214 ENDIF ! End IF (DUM <= EPSQ .AND. PIDEP <= EPSQ)
2215 qinew = tot_icenew/(thick+bldtrh*flimass*vsnow)
2216 IF (qinew <= epsq) qinew = 0.
2217 IF (qi > 0. .AND. qinew /= 0.) THEN
2218 dum = qinew/qi
2219 IF (dum < toler) qinew = 0.
2220 ENDIF
2221 asnownew = bldtrh*flimass*vsnow*qinew
2222 IF (asnow > 0. .AND. asnownew /= 0.) THEN
2223 dum = asnownew/asnow
2224 IF (dum < toler) asnownew = 0.
2225 ENDIF
2226 ENDIF ! End IF (TOT_ICEnew <= CLIMIT)
2227 ENDIF ! End IF (ICE_logical)
2228!
2229!--- Update rain mixing ratios
2230!
2231!---
2232! * TOT_RAINnew - total mass of rain after microphysics
2233! current layer and the input flux of ice from above
2234! * VRAIN2 - time-averaged fall speed of rain in grid and below
2235! (with air resistance correction)
2236! * QRnew - updated rain mixing ratio in layer
2237! -> TOT_RAINnew=QRnew*(THICK+BLDTRH*VRAIN2)
2238! * ARAINnew - updated accumulation of rain at bottom of grid cell
2239!---
2240!
2241 delr = praut + pracw + piacwr - piacr + pimlt &
2242 & + prevp + picnd
2243 tot_rainnew = tot_rain+thick*delr
2244 IF (tot_rain > 0. .AND. tot_rainnew /= 0.) THEN
2245 dum = tot_rainnew/tot_rain
2246 IF (dum < toler) tot_rainnew = 0.
2247 ENDIF
2248 IF (tot_rainnew <= climit) THEN
2249 tot_rainnew = 0.
2250 vrain2 = 0.
2251 qrnew = 0.
2252 arainnew = 0.
2253 ELSE
2254 !
2255 !--- 1st guess time-averaged rain rate at bottom of grid box
2256 !
2257 rr = tot_rainnew/(dtph*gammar)
2258 !
2259 !--- Use same algorithm as above for calculating mean drop diameter
2260 ! (IDR, in microns), which is used to estimate the time-averaged
2261 ! fall speed of rain drops at the bottom of the grid layer. This
2262 ! isn't perfect, but the alternative is solving a transcendental
2263 ! equation that is numerically inefficient and nasty to program
2264 ! (coded in earlier versions of GSMCOLUMN prior to 8-22-01).
2265 !
2266 IF (rr <= rr_drmin) THEN
2267 idr = mdrmin
2268 ELSE IF (rr <= rr_dr1) THEN
2269 idr = int( 1.123e3*rr**.1947 + .5 )
2270 idr = max( mdrmin, min(idr, mdr1) )
2271 ELSE IF (rr <= rr_dr2) THEN
2272 idr = int( 1.225e3*rr**.2017 + .5 )
2273 idr = max( mdr1, min(idr, mdr2) )
2274 ELSE IF (rr <= rr_dr3) THEN
2275 idr = int( 1.3006e3*rr**.2083 + .5 )
2276 idr = max( mdr2, min(idr, mdr3) )
2277 ELSE IF (rr <= rr_drmax) THEN
2278 idr = int( 1.355e3*rr**.2144 + .5 )
2279 idr = max( mdr3, min(idr, mdrmax) )
2280 ELSE
2281 idr = mdrmax
2282 ENDIF ! End IF (RR <= RR_DRmin)
2283 vrain2 = gammar*vrain(idr)
2284 qrnew = tot_rainnew / (thick+bldtrh*vrain2)
2285 IF (qrnew <= epsq) qrnew = 0.
2286 IF (qr > 0. .AND. qrnew /= 0.) THEN
2287 dum = qrnew / qr
2288 IF (dum < toler) qrnew = 0.
2289 ENDIF
2290 arainnew = bldtrh*vrain2*qrnew
2291 IF (arain > 0. .AND. arainnew /= 0.) THEN
2292 dum = arainnew/arain
2293 IF (dum < toler) arainnew = 0.
2294 ENDIF
2295 ENDIF ! End IF (TOT_RAINnew < CLIMIT)
2296!
2297 wcnew = qwnew + qrnew + qinew
2298!
2299!----------------------------------------------------------------------
2300!-------------- Begin debugging & verification ------------------------
2301!----------------------------------------------------------------------
2302!
2303!--- QT, QTnew - total water (vapor & condensate) before & after microphysics, resp.
2304!
2305! QT=THICK*(QV+WC_col(l))+ARAIN+ASNOW
2306! QTnew = THICK*(WVnew/(1.+WVnew)+WCnew/(1.+wcnew))
2307! & + ARAINnew + ASNOWnew
2308
2309 qt = thick*(wv+wc) + arain + asnow
2310 qtnew = thick*(wvnew+wcnew) + arainnew + asnownew
2311 budget = qt-qtnew
2312!
2313!--- Additional check on budget preservation, accounting for truncation effects
2314!
2315 dbg_logical=.false.
2316! DUM=ABS(BUDGET)
2317! IF (DUM > TOLER) THEN
2318! DUM=DUM/MIN(QT, QTnew)
2319! IF (DUM > TOLER) DBG_logical=.TRUE.
2320! ENDIF
2321!
2322! DUM=(RHgrd+.001)*QSInew
2323! IF ( (QWnew > EPSQ .OR. QRnew > EPSQ .OR. WVnew > DUM)
2324! & .AND. TC < T_ICE ) DBG_logical=.TRUE.
2325!
2326! IF (TC > 5. .AND. QInewr > EPSQ) DBG_logical=.TRUE.
2327!
2328 IF ((wvnew < epsq .OR. dbg_logical) .AND. print_diag) THEN
2329!
2330 WRITE(6,"(/2(a,i4),2(a,i2))") '{} i=',i_index,' j=', &
2331 & j_index, ' L=',l,' LSFC=',lsfc
2332!
2333 esw = min(pp, fpvsl(tnew))
2334! QSWnew = EPS*ESW/(PP-ESW)
2335 qswnew = eps*esw/(pp+epsm1*esw)
2336 IF (tc < 0. .OR. tnew < 0.) THEN
2337 esi = min(pp, fpvsi(tnew))
2338! QSInew = EPS*ESI/(PP-ESI)
2339 qsinew = eps*esi/(pp+epsm1*esi)
2340 ELSE
2341 qsi = qsw
2342 qsinew = qswnew
2343 ENDIF
2344 wsnew = qsinew
2345 WRITE(6,"(4(a12,g11.4,1x))") &
2346 & '{} TCold=',tc,'TCnew=',tnew-t0c,'P=',.01*pp,'RHO=',rho, &
2347 & '{} THICK=',thick,'RHold=',wv/ws,'RHnew=',wvnew/wsnew, &
2348 & 'RHgrd=',rhgrd, &
2349 & '{} RHWold=',wv/qsw,'RHWnew=',wvnew/qswnew,'RHIold=',wv/qsi, &
2350 & 'RHInew=',wvnew/qsinew, &
2351 & '{} QSWold=',qsw,'QSWnew=',qswnew,'QSIold=',qsi,'QSInew=',qsinew,&
2352 & '{} WSold=',ws,'WSnew=',wsnew,'WVold=',wv,'WVnew=',wvnew, &
2353 & '{} WCold=',wc,'WCnew=',wcnew,'QWold=',qw,'QWnew=',qwnew, &
2354 & '{} QIold=',qi,'QInew=',qinew,'QRold=',qr,'QRnew=',qrnew, &
2355 & '{} ARAINold=',arain,'ARAINnew=',arainnew,'ASNOWold=',asnow, &
2356 & 'ASNOWnew=',asnownew, &
2357 & '{} TOT_RAIN=',tot_rain,'TOT_RAINnew=',tot_rainnew, &
2358 & 'TOT_ICE=',tot_ice,'TOT_ICEnew=',tot_icenew, &
2359 & '{} BUDGET=',budget,'QTold=',qt,'QTnew=',qtnew
2360!
2361 WRITE(6,"(4(a12,g11.4,1x))") &
2362 & '{} DELT=',delt,'DELV=',delv,'DELW=',delw,'DELI=',deli, &
2363 & '{} DELR=',delr,'PCOND=',pcond,'PIDEP=',pidep,'PIEVP=',pievp, &
2364 & '{} PICND=',picnd,'PREVP=',prevp,'PRAUT=',praut,'PRACW=',pracw, &
2365 & '{} PIACW=',piacw,'PIACWI=',piacwi,'PIACWR=',piacwr,'PIMLT=', &
2366 & pimlt, &
2367 & '{} PIACR=',piacr
2368!
2369 IF (ice_logical) WRITE(6,"(4(a12,g11.4,1x))") &
2370 & '{} RimeF1=',rimef1,'GAMMAS=',gammas,'VrimeF=',vrimef, &
2371 & 'VSNOW=',vsnow, &
2372 & '{} INDEXS=',float(indexs),'FLARGE=',flarge,'FSMALL=',fsmall, &
2373 & 'FLIMASS=',flimass, &
2374 & '{} XSIMASS=',xsimass,'XLIMASS=',xlimass,'QLICE=',qlice, &
2375 & 'QTICE=',qtice, &
2376 & '{} NLICE=',nlice,'NSmICE=',nsmice,'PILOSS=',piloss, &
2377 & 'EMAIRI=',emairi, &
2378 & '{} RimeF=',rimef
2379!
2380 IF (tot_rain > 0. .OR. tot_rainnew > 0.) &
2381 & WRITE(6,"(4(a12,g11.4,1x))") &
2382 & '{} INDEXR1=',float(indexr1),'INDEXR=',float(indexr), &
2383 & 'GAMMAR=',gammar,'N0r=',n0r, &
2384 & '{} VRAIN1=',vrain1,'VRAIN2=',vrain2,'QTRAIN=',qtrain,'RQR=',rqr,&
2385 & '{} PRLOSS=',prloss,'VOLR1=',thick+bldtrh*vrain1, &
2386 & 'VOLR2=',thick+bldtrh*vrain2
2387!
2388 IF (praut > 0.) WRITE(6,"(a12,g11.4,1x)") '{} QW0=',qw0
2389!
2390 IF (pracw > 0.) WRITE(6,"(a12,g11.4,1x)") '{} FWR=',fwr
2391!
2392 IF (piacr > 0.) WRITE(6,"(a12,g11.4,1x)") '{} FIR=',fir
2393!
2394 dum = pimlt + picnd - prevp - pievp
2395 IF (dum > 0. .or. dwvi /= 0.) &
2396 & WRITE(6,"(4(a12,g11.4,1x))") &
2397 & '{} TFACTOR=',tfactor,'DYNVIS=',dynvis, &
2398 & 'THERM_CON=',therm_cond,'DIFFUS=',diffus
2399!
2400 IF (prevp < 0.) WRITE(6,"(4(a12,g11.4,1x))") &
2401 & '{} RFACTOR=',rfactor,'ABW=',abw,'VENTR=',ventr,'CREVP=',crevp, &
2402 & '{} DWVr=',dwvr,'DENOMW=',denomw
2403!
2404 IF (pidep /= 0. .AND. dwvi /= 0.) &
2405 & WRITE(6,"(4(a12,g11.4,1x))") &
2406 & '{} DWVi=',dwvi,'DENOMI=',denomi,'PIDEP_max=',pidep_max, &
2407 & 'SFACTOR=',sfactor, &
2408 & '{} ABI=',abi,'VENTIL=',ventil,'VENTIL1=',venti1(indexs), &
2409 & 'VENTIL2=',sfactor*venti2(indexs), &
2410 & '{} VENTIS=',ventis,'DIDEP=',didep
2411!
2412 IF (pidep > 0. .AND. pcond /= 0.) &
2413 & WRITE(6,"(4(a12,g11.4,1x))") &
2414 & '{} DENOMW=',denomw,'DENOMWI=',denomwi,'DENOMF=',denomf, &
2415 & 'DUM2=',pcond-piacw
2416!
2417 IF (fws > 0.) WRITE(6,"(4(a12,g11.4,1x))") '{} FWS=',fws
2418!
2419 dum = pimlt + picnd - pievp
2420 IF (dum > 0.) WRITE(6,"(4(a12,g11.4,1x))") &
2421 & '{} SFACTOR=',sfactor,'VENTIL=',ventil,'VENTIL1=',venti1(indexs),&
2422 & 'VENTIL2=',sfactor*venti2(indexs), &
2423 & '{} AIEVP=',aievp,'DIEVP=',dievp,'QSW0=',qsw0,'DWV0=',dwv0
2424 !
2425 ENDIF
2426!
2427!----------------------------------------------------------------------
2428!-------------- Water budget statistics & maximum values --------------
2429!----------------------------------------------------------------------
2430!
2431 IF (print_diag) THEN
2432 itdx = max( itlo, min( int(tnew-t0c), ithi ) )
2433 IF (qinew > epsq) nstats(itdx,1) = nstats(itdx,1)+1
2434 IF (qinew > epsq .AND. qrnew+qwnew > epsq) &
2435 & nstats(itdx,2) = nstats(itdx,2)+1
2436 IF (qwnew > epsq) nstats(itdx,3) = nstats(itdx,3)+1
2437 IF (qrnew > epsq) nstats(itdx,4) = nstats(itdx,4)+1
2438 !
2439 qmax(itdx,1) = max(qmax(itdx,1), qinew)
2440 qmax(itdx,2) = max(qmax(itdx,2), qwnew)
2441 qmax(itdx,3) = max(qmax(itdx,3), qrnew)
2442 qmax(itdx,4) = max(qmax(itdx,4), asnownew)
2443 qmax(itdx,5) = max(qmax(itdx,5), arainnew)
2444 qtot(itdx,1) = qtot(itdx,1)+qinew*thick
2445 qtot(itdx,2) = qtot(itdx,2)+qwnew*thick
2446 qtot(itdx,3) = qtot(itdx,3)+qrnew*thick
2447 !
2448 qtot(itdx,4) = qtot(itdx,4)+pcond*thick
2449 qtot(itdx,5) = qtot(itdx,5)+picnd*thick
2450 qtot(itdx,6) = qtot(itdx,6)+pievp*thick
2451 qtot(itdx,7) = qtot(itdx,7)+pidep*thick
2452 qtot(itdx,8) = qtot(itdx,8)+prevp*thick
2453 qtot(itdx,9) = qtot(itdx,9)+praut*thick
2454 qtot(itdx,10) = qtot(itdx,10)+pracw*thick
2455 qtot(itdx,11) = qtot(itdx,11)+pimlt*thick
2456 qtot(itdx,12) = qtot(itdx,12)+piacw*thick
2457 qtot(itdx,13) = qtot(itdx,13)+piacwi*thick
2458 qtot(itdx,14) = qtot(itdx,14)+piacwr*thick
2459 qtot(itdx,15) = qtot(itdx,15)+piacr*thick
2460 !
2461 qtot(itdx,16) = qtot(itdx,16)+(wvnew-wv)*thick
2462 qtot(itdx,17) = qtot(itdx,17)+(qwnew-qw)*thick
2463 qtot(itdx,18) = qtot(itdx,18)+(qinew-qi)*thick
2464 qtot(itdx,19) = qtot(itdx,19)+(qrnew-qr)*thick
2465 qtot(itdx,20) = qtot(itdx,20)+(arainnew-arain)
2466 qtot(itdx,21) = qtot(itdx,21)+(asnownew-asnow)
2467 IF (qinew > 0.) &
2468 & qtot(itdx,22) = qtot(itdx,22)+qinew*thick/rimef
2469 !
2470 ENDIF
2471!
2472!----------------------------------------------------------------------
2473!------------------------- Update arrays ------------------------------
2474!----------------------------------------------------------------------
2475!
2476 t_col(l) = tnew ! temperature
2477!
2478! QV_col(L) = max(EPSQ, WVnew/(1.+WVnew)) ! specific humidity
2479 qv_col(l) = max(0.0, wvnew ) ! specific humidity
2480 wc_col(l) = max(0.0, wcnew) ! total condensate mixing ratio
2481 qi_col(l) = max(0.0, qinew) ! ice mixing ratio
2482 qr_col(l) = max(0.0, qrnew) ! rain mixing ratio
2483 qw_col(l) = max(0.0, qwnew) ! cloud water mixing ratio
2484 rimef_col(l) = rimef ! rime factor
2485 asnow = asnownew ! accumulated snow
2486 arain = arainnew ! accumulated rain
2487!
2488!#######################################################################
2489!
2490 ENDIF ! End of IF (.NOT. CLEAR) THEN
2491 ENDIF ! End of IF (QV_col(L) <= EPSQ .AND. WC_col(L) <= EPSQ) THEN
2492!
2493 ENDDO ! ##### End "L" loop through model levels #####
2494!
2495 araing = araing + arain
2496 asnowg = asnowg + asnow
2497 enddo ! do for ntimes=1,mic_step
2498!
2499!#######################################################################
2500!
2501!-----------------------------------------------------------------------
2502!--------------------------- Return to GSMDRIVE -----------------------
2503!-----------------------------------------------------------------------
2504!
2505 CONTAINS
2506! END SUBROUTINE GSMCOLUMN
2507!
2508!#######################################################################
2509!--------- Produces accurate calculation of cloud condensation ---------
2510!#######################################################################
2511!
2512 REAL FUNCTION CONDENSE (PP, QW, RHgrd, TK, WV)
2513!
2514 implicit none
2515!
2516!---------------------------------------------------------------------------------
2517!------ The Asai (1965) algorithm takes into consideration the release of ------
2518!------ latent heat in increasing the temperature & in increasing the ------
2519!------ saturation mixing ratio (following the Clausius-Clapeyron eqn.). ------
2520!---------------------------------------------------------------------------------
2521!
2522 real pp, qw, rhgrd, tk, wv
2523 INTEGER, PARAMETER :: HIGH_PRES=kind_phys
2524! INTEGER, PARAMETER :: HIGH_PRES=Selected_Real_Kind(15)
2525 REAL (KIND=high_pres), PARAMETER :: &
2526 & rhlimit=.001, rhlimit1=-rhlimit
2527 REAL, PARAMETER :: RCP=1./cp, rcprv=rcp/rv
2528 REAL (KIND=high_pres) :: cond, ssat, wcdum, tsq
2529 real wvdum, tdum, xlv, xlv1, xlv2, ws, dwv, esw, rfac
2530!
2531!-----------------------------------------------------------------------
2532!
2533!--- LV (T) is from Bolton (JAS, 1980)
2534!
2535! XLV=3.148E6-2370.*TK
2536! XLV1=XLV*RCP
2537! XLV2=XLV*XLV*RCPRV
2538!
2539 tdum = tk
2540 wvdum = wv
2541 wcdum = qw
2542 esw = min(pp, fpvsl(tdum)) ! Saturation vapor press w/r/t water
2543! WS = RHgrd*EPS*ESW/(PP-ESW) ! Saturation mixing ratio w/r/t water
2544 ws = rhgrd*eps*esw/(pp+epsm1*esw) ! Saturation specific hum w/r/t water
2545 dwv = wvdum - ws ! Deficit grid-scale specific humidity
2546 ssat = dwv / ws ! Supersaturation ratio
2547 condense = 0.
2548 rfac = 0.5 ! converges faster with 0.5
2549 DO WHILE ((ssat < rhlimit1 .AND. wcdum > epsq) &
2550 & .OR. ssat > rhlimit)
2551!
2552 xlv = 3.148e6-2370.*tdum
2553 xlv1 = xlv*rcp
2554 xlv2 = xlv*xlv*rcprv
2555!
2556! COND = DWV/(1.+XLV2*WS/(Tdum*Tdum)) ! Asai (1965, J. Japan)
2557 tsq = tdum*tdum
2558 cond = rfac*dwv*tsq/(tsq+xlv2*ws) ! Asai (1965, J. Japan)
2559! COND = DWV*tsq/(tsq+XLV2*WS) ! Asai (1965, J. Japan)
2560 cond = max(cond, -wcdum) ! Limit cloud water evaporation
2561 tdum = tdum+xlv1*cond ! Updated temperature
2562 wvdum = wvdum-cond ! Updated water vapor mixing ratio
2563 wcdum = wcdum+cond ! Updated cloud water mixing ratio
2564 condense = condense + cond ! Total cloud water condensation
2565 esw = min(pp, fpvsl(tdum)) ! Updated saturation vapor press w/r/t water
2566! WS = RHgrd*EPS*ESW/(PP-ESW) ! Updated saturation mixing ratio w/r/t water
2567 ws = rhgrd*eps*esw/(pp+epsm1*esw) ! Updated saturation mixing ratio w/r/t water
2568 dwv = wvdum-ws ! Deficit grid-scale water vapor mixing ratio
2569 ssat = dwv / ws ! Grid-scale supersaturation ratio
2570 rfac = 1.0
2571 ENDDO
2572
2573 END FUNCTION condense
2574!
2575!#######################################################################
2576!---------------- Calculate ice deposition at T<T_ICE ------------------
2577!#######################################################################
2578!
2579 REAL FUNCTION DEPOSIT (PP, RHgrd, Tdum, WVdum)
2580!
2581 implicit none
2582!
2583!--- Also uses the Asai (1965) algorithm, but uses a different target
2584! vapor pressure for the adjustment
2585!
2586 REAL PP, RHgrd, Tdum, WVdum
2587 INTEGER, PARAMETER :: HIGH_PRES=kind_phys
2588! INTEGER, PARAMETER :: HIGH_PRES=Selected_Real_Kind(15)
2589 REAL (KIND=high_pres), PARAMETER :: rhlimit=.001, &
2590 & rhlimit1=-rhlimit
2591 REAL, PARAMETER :: RCP=1./cp, rcprv=rcp/rv, xls=hvap+hfus &
2592 &, xls1=xls*rcp, xls2=xls*xls*rcprv
2593 REAL (KIND=high_pres) :: dep, ssat
2594 real esi, ws, dwv
2595!
2596!-----------------------------------------------------------------------
2597!
2598 esi=min(pp, fpvsi(tdum)) ! Saturation vapor press w/r/t ice
2599! WS=RHgrd*EPS*ESI/(PP-ESI) ! Saturation mixing ratio
2600 ws=rhgrd*eps*esi/(pp+epsm1*esi) ! Saturation mixing ratio
2601 dwv=wvdum-ws ! Deficit grid-scale water vapor mixing ratio
2602 ssat=dwv/ws ! Supersaturation ratio
2603 deposit=0.
2604 DO WHILE (ssat > rhlimit .OR. ssat < rhlimit1)
2605 !
2606 !--- Note that XLVS2=LS*LV/(CP*RV)=LV*WS/(RV*T*T)*(LS/CP*DEP1),
2607 ! where WS is the saturation mixing ratio following Clausius-
2608 ! Clapeyron (see Asai,1965; Young,1993,p.405)
2609 !
2610 dep=dwv/(1.+xls2*ws/(tdum*tdum)) ! Asai (1965, J. Japan)
2611 tdum=tdum+xls1*dep ! Updated temperature
2612 wvdum=wvdum-dep ! Updated ice mixing ratio
2613 deposit=deposit+dep ! Total ice deposition
2614 esi=min(pp, fpvsi(tdum)) ! Updated saturation vapor press w/r/t ice
2615! WS=RHgrd*EPS*ESI/(PP-ESI) ! Updated saturation mixing ratio w/r/t ice
2616 ws=rhgrd*eps*esi/(pp+epsm1*esi) ! Updated saturation mixing ratio w/r/t ice
2617 dwv=wvdum-ws ! Deficit grid-scale water vapor mixing ratio
2618 ssat=dwv/ws ! Grid-scale supersaturation ratio
2619 ENDDO
2620 END FUNCTION deposit
2621!
2622 END SUBROUTINE gsmcolumn
2623
2624
2625 SUBROUTINE rsipath(im, ix, ix2, levs, prsl, prsi, t, q, clw &
2626 &, f_ice, f_rain, f_rime, flgmin &
2627 &, cwatp, cicep, rainp, snowp &
2628 &, recwat, rerain, resnow, lprnt, ipr)
2629!
2630 implicit none
2631!
2632!--------------------CLOUD----------------------------------------------
2633 integer im, ix, ix2, levs, ipr
2634 real prsl(ix,levs), prsi(ix,levs+1), t(ix,levs), q(ix,levs) &
2635 &, clw(ix2,levs), f_ice(ix2,levs), f_rain(ix2,levs) &
2636 &, f_rime(ix2,levs) &
2637 &, cwatp(ix,levs), rainp(ix,levs), cicep(ix,levs) &
2638 &, snowp(ix,levs), recwat(ix,levs), resnow(ix,levs) &
2639 &, rerain(ix,levs)
2640 real flgmin
2641 real frice, frrain, qcice, qcwat, qrain, qsnow, qtot, sden &
2642 &, cpath, rho, dsnow, flarge, rimef, xsimass, nlice &
2643 &, tc, recw1, drain, xli, dum, NLImax, pfac, pp &
2644 &, snofac, tem
2645!
2646 real, parameter :: cexp=1./3.
2647 integer i, l, indexs
2648 logical lprnt
2649!
2650
2651 recw1 = 620.3505 / tnw**cexp ! cloud droplet effective radius
2652
2653 do l=1,levs
2654 do i=1,im
2655 !--- HYDROMETEOR'S OPTICAL PATH
2656 cwatp(i,l) = 0.
2657 cicep(i,l) = 0.
2658 rainp(i,l) = 0.
2659 snowp(i,l) = 0.
2660 !--- HYDROMETEOR'S EFFECTIVE RADIUS
2661 recwat(i,l) = recwmin
2662 rerain(i,l) = rerainmin
2663 resnow(i,l) = resnowmin
2664 ENDDO
2665 ENDDO
2666
2667 do l=1,levs
2668 DO i=1,im
2669
2670 ! Assume parameterized condensate is
2671 ! all water for T>=-10C,
2672 ! all ice for T<=-30C,
2673 ! and a linear mixture at -10C > T > -30C
2674 !
2675 ! * Determine hydrometeor composition of total condensate (QTOT)
2676 !
2677! pp = prsl(i,l) * 1000.0
2678 pp = prsl(i,l) / prsi(i,levs+1)
2679! pfac = max(0.25, sqrt(sqrt(min(1.0, pp*0.000025))))
2680! pfac = max(0.5, sqrt(sqrt(min(1.0, pp*0.000025))))
2681! pfac = max(0.5, sqrt(sqrt(min(1.0, pp*0.00002))))
2682! pfac = max(0.25, sqrt(sqrt(min(1.0, pp*0.00001))))
2683! pfac = max(0.25, sqrt(sqrt(min(1.0, pp))))
2684! pfac = max(0.1, sqrt(min(1.0, pp*0.00001)))
2685! pfac = max(0.5, sqrt(sqrt(min(1.0, pp*0.000033))))
2686! pfac = max(0.5, sqrt(sqrt(min(1.0, pp*0.00004))))
2687!go pfac = max(0.5, (sqrt(min(1.0, pp*0.000025))))
2688 pfac = 1.0
2689 tc = t(i,l) - t0c
2690 qtot = clw(i,l)
2691 IF (qtot > epsq) THEN
2692 qcwat=0.
2693 qcice=0.
2694 qrain=0.
2695 qsnow=0.
2696 frice = max(0.0, min(1.0, f_ice(i,l)))
2697 frrain = max(0.0, min(1.0, f_rain(i,l)))
2698 IF(tc <= thom) then
2699 qcice = qtot
2700 ELSE
2701 qcice = frice * qtot
2702 qcwat = qtot - qcice
2703 qrain = frrain * qcwat
2704 qcwat = qcwat - qrain
2705 ENDIF
2706 !
2707 !--- Air density (RHO), model mass thickness (CPATH)
2708 !
2709 rho = prsl(i,l)/(rd*t(i,l)*(1.+eps1*q(i,l)))
2710 cpath = (prsi(i,l+1)-prsi(i,l))*(1000000.0/grav)
2711
2712 !! CLOUD WATER
2713 !
2714 !--- Effective radius (RECWAT) & total water path (CWATP)
2715 ! Assume monodisperse distribution of droplets (no factor of 1.5)
2716 !
2717 IF(qcwat > 0.) THEN
2718 recwat(i,l) = max(recwmin, recw1*(rho*qcwat)**cexp)
2719 cwatp(i,l) = cpath*qcwat ! cloud water path
2720! tem = 5.0*(1+max(0.0,min(1.0,-0.05*tc)))
2721! RECWAT(I,L) = max(RECWAT(I,L), tem)
2722 ENDIF
2723
2724 !! RAIN
2725 !
2726 !--- Effective radius (RERAIN) & total water path (RAINP)
2727 !--- Factor of 1.5 accounts for r**3/r**2 moments for exponentially
2728 ! distributed drops in effective radius calculations
2729 ! (from M.D. Chou's code provided to Y.-T. Hou)
2730 !
2731 IF(qrain > 0.) THEN
2732 drain = cn0r0*sqrt(sqrt((rho*qrain)))
2733 rerain(i,l) = 1.5*max(xmrmin, min(drain, xmrmax))
2734 rainp(i,l) = cpath*qrain ! rain water path
2735 ENDIF
2736
2737 !! SNOW (large ice) & CLOUD ICE
2738 !
2739 !--- Effective radius (RESNOW) & total ice path (SNOWP)
2740 !--- Total ice path (CICEP) for cloud ice
2741 !--- Factor of 1.5 accounts for r**3/r**2 moments for exponentially
2742 ! distributed ice particles in effective radius calculations
2743 !
2744 !--- Separation of cloud ice & "snow" uses algorithm from
2745 ! subroutine GSMCOLUMN
2746 !
2747 IF(qcice > 0.) THEN
2748 !
2749 !--- Mean particle size following Houze et al. (JAS, 1979, p. 160),
2750 ! converted from Fig. 5 plot of LAMDAs. An analogous set of
2751 ! relationships also shown by Fig. 8 of Ryan (BAMS, 1996, p. 66),
2752 ! but with a variety of different relationships that parallel the
2753 ! Houze curves.
2754 !
2755! DUM=MAX(0.05, MIN(1., EXP(.0536*TC)) )
2756 dum=max(0.05, min(1., exp(.0564*tc)) )
2757 indexs=min(mdimax, max(mdimin, int(xmimax*dum) ) )
2758! indexs=max(INDEXSmin, indexs)
2759! NLImax=5.E3/sqrt(DUM) !- Ver3
2760 dum=max(flgmin*pfac, dum)
2761! DUM=MAX(FLGmin, DUM)
2762! NLImax=20.E3 !- Ver3
2763! NLImax=50.E3 !- Ver3 => comment this line out
2764 nlimax=10.e3/sqrt(dum) !- Ver3
2765! NLImax=5.E3/sqrt(DUM) !- Ver3
2766! NLImax=6.E3/sqrt(DUM) !- Ver3
2767! NLImax=7.5E3/sqrt(DUM) !- Ver3
2768! NLImax=20.E3/DUM !- Ver3
2769! NLImax=20.E3/max(0.2,DUM) !- Ver3
2770! NLImax=2.0E3/max(0.1,DUM) !- Ver3
2771! NLImax=2.5E3/max(0.1,DUM) !- Ver3
2772! NLImax=10.E3/max(0.2,DUM) !- Ver3
2773! NLImax=4.E3/max(0.2,DUM) !- Ver3
2774!Moorthi DSNOW = XMImax*EXP(.0536*TC)
2775!Moorthi INDEXS = MAX(INDEXSmin, MIN(MDImax, INT(DSNOW)))
2776 !
2777 !--- Assumed number fraction of large ice to total (large & small)
2778 ! ice particles, which is based on a general impression of the
2779 ! literature.
2780 !
2781 ! Small ice are assumed to have a mean diameter of 50 microns.
2782 !
2783 IF(tc >= 0.) THEN
2784 flarge=flg1p0
2785 ELSE
2786 flarge = dum
2787 ENDIF
2788!------------------------Commented by Moorthi -----------------------------
2789! ELSEIF (TC >= -25.) THEN
2790!
2791!--- Note that absence of cloud water (QCWAT) is used as a quick
2792! substitute for calculating water subsaturation as in GSMCOLUMN
2793!
2794! IF(QCWAT <= 0. .OR. TC < -8.
2795! & .OR. TC > -3.)THEN
2796! FLARGE=FLG0P2
2797! ELSE
2798
2799!--- Parameterize effects of rime splintering by increasing
2800! number of small ice particles
2801!
2802! FLARGE=FLG0P1
2803! ENDIF
2804! ELSEIF (TC <= -50.) THEN
2805! FLARGE=.01
2806! ELSE
2807! FLARGE=.2*EXP(.1198*(TC+25))
2808! ENDIF
2809!____________________________________________________________________________
2810
2811 rimef=max(1., f_rime(i,l))
2812 xsimass=massi(mdimin)*(1.-flarge)/flarge
2813! if (lprnt) print *,' rimef=',rimef,' xsimass=',xsimass
2814! &,' indexs=',indexs,' massi=',massi(indexs),' flarge=',flarge
2815 nlice=rho*qcice/(xsimass+rimef*massi(indexs))
2816 !
2817 !--- From subroutine GSMCOLUMN:
2818 !--- Minimum number concentration for large ice of NLImin=10/m**3
2819 ! at T>=0C. Done in order to prevent unrealistically small
2820 ! melting rates and tiny amounts of snow from falling to
2821 ! unrealistically warm temperatures.
2822 !
2823 IF(tc >= 0.) THEN
2824 nlice=max(nlimin, nlice)
2825 ELSEIF (nlice > nlimax) THEN
2826 !
2827 !--- Ferrier 6/13/01: Prevent excess accumulation of ice
2828 !
2829 xli=(rho*qcice/nlimax-xsimass)/rimef
2830
2831 IF(xli <= massi(450) ) THEN
2832 dsnow=9.5885e5*xli**.42066
2833 ELSE
2834 dsnow=3.9751e6*xli**.49870
2835 ENDIF
2836
2837 indexs=min(mdimax, max(indexs, int(dsnow)))
2838 nlice=rho*qcice/(xsimass+rimef*massi(indexs))
2839 ENDIF
2840
2841! if (tc > -20.0 .and. indexs >= indexsmin) then
2842! snofac = max(0.0, min(1.0, exp(1.0*(tc+20.0))))
2843! if (indexs >= indexsmin) then
2844! if (tc > -20.0 .or. indexs >= indexsmin) then
2845! if (tc > -40.0) then
2846! if (tc >= -40.0 .or. prsl(i,l) > 50.0) then
2847!! if (tc >= -20.0) then
2848! if (tc >= -20.0 .or. prsl(i,l) > 50.0) then
2849! if ((tc >= -20.0 .or.
2850! & prsi(i,levs+1)-prsi(i,l) < 30.0)
2851 if (prsi(i,levs+1)-prsi(i,l) < 40.0 &
2852! if (prsi(i,levs+1)-prsi(i,l) < 70.0
2853 & .and. indexs >= indexsmin) then
2854! & prsi(i,levs)-prsl(i,l) < 20.0) then
2855! & prsi(i,levs)-prsl(i,l) < 30.0) then
2856! & prsi(i,levs)-prsl(i,l) < 40.0) then
2857! snofac = max(0.0, min(1.0, 0.05*(tc+40.0)))
2858! snofac = max(0.0, min(1.0, 0.1*(tc+25.0)))
2859! snofac = max(0.0, min(1.0, 0.0667*(tc+25.0)))
2860! if (indexs > indexsmin) then
2861 qsnow = min(qcice, nlice*rimef*massi(indexs)/rho)
2862! & * snofac
2863 endif
2864! qsnow = qcice
2865 qcice = max(0., qcice-qsnow)
2866! qsnow = 0.0
2867 cicep(i,l) = cpath*qcice ! cloud ice path
2868 resnow(i,l) = 1.5*float(indexs)
2869 sden = sdens(indexs)/rimef ! 1/snow density
2870 snowp(i,l) = cpath*qsnow*sden ! snow path / snow density
2871! SNOWP (I,L) = CPATH*QSNOW ! snow path / snow density
2872! if (lprnt .and. i == ipr) then
2873! print *,' L=',L,' snowp=',snowp(i,l),' cpath=',cpath
2874! &,' qsnow=',qsnow,' sden=',sden,' rimef=',rimef,' indexs=',indexs
2875! &,' sdens=',sdens(indexs),' resnow=',resnow(i,l)
2876! &,' qcice=',qcice,' cicep=',cicep(i,l)
2877! endif
2878
2879
2880 ENDIF ! END QCICE BLOCK
2881 ENDIF ! QTOT IF BLOCK
2882
2883 ENDDO
2884 ENDDO
2885!
2886 END SUBROUTINE rsipath
2887
2888
2889
2890!-----------------------------------
2896!\section gen_rsipath rsipath2 General Algorithm
2897 subroutine rsipath2 &
2898 & ( plyr, plvl, tlyr, qlyr, qcwat, qcice, qrain, rrime, & ! inputs
2899 & im, levs, iflip, flgmin, &
2900 & cwatp, cicep, rainp, snowp, recwat, rerain, resnow, snden & ! outputs
2901 & )
2902
2903! ================= subprogram documentation block ================ !
2904! !
2905! abstract: this program is a modified version of ferrier's original !
2906! "rsipath" subprogram. it computes layer's cloud liquid, ice, rain, !
2907! and snow water condensate path and the partical effective radius !
2908! for liquid droplet, rain drop, and snow flake. !
2909! !
2910! ==================== defination of variables ==================== !
2911! !
2912! input variables: !
2913! plyr (IM,LEVS) : model layer mean pressure in mb (100Pa) !
2914! plvl (IM,LEVS+1):model level pressure in mb (100Pa) !
2915! tlyr (IM,LEVS) : model layer mean temperature in k !
2916! qlyr (IM,LEVS) : layer specific humidity in gm/gm !
2917! qcwat (IM,LEVS) : layer cloud liquid water condensate amount !
2918! qcice (IM,LEVS) : layer cloud ice water condensate amount !
2919! qrain (IM,LEVS) : layer rain drop water amount !
2920! rrime (IM,LEVS) : mass ratio of total to unrimed ice ( >= 1 ) !
2921! IM : horizontal dimention !
2922! LEVS : vertical layer dimensions !
2923! iflip : control flag for in/out vertical indexing !
2924! =0: index from toa to surface !
2925! =1: index from surface to toa !
2926! flgmin : Minimum large ice fraction !
2927! lprnt : logical check print control flag !
2928! !
2929! output variables: !
2930! cwatp (IM,LEVS) : layer cloud liquid water path !
2931! cicep (IM,LEVS) : layer cloud ice water path !
2932! rainp (IM,LEVS) : layer rain water path !
2933! snowp (IM,LEVS) : layer snow water path !
2934! recwat(IM,LEVS) : layer cloud eff radius for liqid water (micron) !
2935! rerain(IM,LEVS) : layer rain water effective radius (micron) !
2936! resnow(IM,LEVS) : layer snow flake effective radius (micron) !
2937! snden (IM,LEVS) : 1/snow density !
2938! !
2939! !
2940! usage: call rsipath2 !
2941! !
2942! subroutines called: none !
2943! !
2944! program history log: !
2945! xx-xx-2001 b. ferrier - original program !
2946! xx-xx-2004 s. moorthi - modified for use in gfs model !
2947! 05-20-2004 y. hou - modified, added vertical index flag!
2948! to reduce data flipping, and rearrange code to !
2949! be comformable with radiation part programs. !
2950! !
2951! ==================== end of description ===================== !
2952!
2953
2954 implicit none
2955
2956! --- constant parameter:
2957 real, parameter :: CEXP= 1.0/3.0
2958
2959! --- inputs:
2960 real, dimension(:,:), intent(in) :: &
2961 & plyr, plvl, tlyr, qlyr, qcwat, qcice, qrain, rrime
2962
2963 integer, intent(in) :: IM, LEVS, iflip
2964 real, dimension(:), intent(in) :: flgmin
2965! logical, intent(in) :: lprnt
2966
2967! --- output:
2968 real, dimension(:,:), intent(out) :: &
2969 & cwatp, cicep, rainp, snowp, recwat, rerain, resnow, snden
2970
2971! --- locals:
2972! real, dimension(IM,LEVS) :: delp, pp1, pp2
2973
2974 real :: recw1, dsnow, qsnow, qqcice, flarge, xsimass, pfac, &
2975 & nlice, xli, nlimax, dum, tem, &
2976 & rho, cpath, rc, totcnd, tc
2977
2978 integer :: i, k, indexs, ksfc, k1
2979!
2980!===> ... begin here
2981!
2982 recw1 = 620.3505 / tnw**cexp ! cloud droplet effective radius
2983
2984 do k = 1, levs
2985 do i = 1, im
2986 !--- hydrometeor's optical path
2987 cwatp(i,k) = 0.0
2988 cicep(i,k) = 0.0
2989 rainp(i,k) = 0.0
2990 snowp(i,k) = 0.0
2991 snden(i,k) = 0.0
2992 !--- hydrometeor's effective radius
2993 recwat(i,k) = recwmin
2994 rerain(i,k) = rerainmin
2995 resnow(i,k) = resnowmin
2996 enddo
2997 enddo
2998
2999! --- set up pressure related arrays, convert unit from mb to cb (10Pa)
3000! cause the rest part uses cb in computation
3001
3002 if (iflip == 0) then ! data from toa to sfc
3003 ksfc = levs + 1
3004 k1 = 0
3005 else ! data from sfc to top
3006 ksfc = 1
3007 k1 = 1
3008 endif ! end_if_iflip
3009!
3010 do k = 1, levs
3011 do i = 1, im
3012 totcnd = qcwat(i,k) + qcice(i,k) + qrain(i,k)
3013 qsnow = 0.0
3014 if(totcnd > epsq) then
3015
3016! --- air density (rho), model mass thickness (cpath), temperature in c (tc)
3017
3018 rho = 0.1 * plyr(i,k) &
3019 & / (rd* tlyr(i,k) * (1.0 + eps1*qlyr(i,k)))
3020 cpath = abs(plvl(i,k+1) - plvl(i,k)) * (100000.0 / grav)
3021 tc = tlyr(i,k) - t0c
3022
3023!! cloud water
3024!
3025! --- effective radius (recwat) & total water path (cwatp):
3026! assume monodisperse distribution of droplets (no factor of 1.5)
3027
3028 if (qcwat(i,k) > 0.0) then
3029 recwat(i,k) = max(recwmin,recw1*(rho*qcwat(i,k))**cexp)
3030 cwatp(i,k) = cpath * qcwat(i,k) ! cloud water path
3031! tem = 5.0*(1.0 + max(0.0, min(1.0,-0.05*tc)))
3032! recwat(i,k) = max(recwat(i,k), tem)
3033 endif
3034
3035!! rain
3036!
3037! --- effective radius (rerain) & total water path (rainp):
3038! factor of 1.5 accounts for r**3/r**2 moments for exponentially
3039! distributed drops in effective radius calculations
3040! (from m.d. chou's code provided to y.-t. hou)
3041
3042 if (qrain(i,k) > 0.0) then
3043 tem = cn0r0 * sqrt(sqrt(rho*qrain(i,k)))
3044 rerain(i,k) = 1.5 * max(xmrmin, min(xmrmax, tem))
3045 rainp(i,k) = cpath * qrain(i,k) ! rain water path
3046 endif
3047
3048!! snow (large ice) & cloud ice
3049!
3050! --- effective radius (resnow) & total ice path (snowp) for snow, and
3051! total ice path (cicep) for cloud ice:
3052! factor of 1.5 accounts for r**3/r**2 moments for exponentially
3053! distributed ice particles in effective radius calculations
3054! separation of cloud ice & "snow" uses algorithm from subroutine gsmcolumn
3055
3056! pfac = max(0.5, sqrt(sqrt(min(1.0, pp1(i,k)*0.00004))))
3057!go pfac = max(0.5, (sqrt(min(1.0, pp1(i,k)*0.000025))))
3058 pfac = 1.0
3059
3060 if (qcice(i,k) > 0.0) then
3061
3062! --- mean particle size following houze et al. (jas, 1979, p. 160),
3063! converted from fig. 5 plot of lamdas. an analogous set of
3064! relationships also shown by fig. 8 of ryan (bams, 1996, p. 66),
3065! but with a variety of different relationships that parallel
3066! the houze curves.
3067
3068! dum = max(0.05, min(1.0, exp(0.0536*tc) ))
3069 dum = max(0.05, min(1.0, exp(0.0564*tc) ))
3070 indexs = min(mdimax, max(mdimin, int(xmimax*dum) ))
3071 dum=max(flgmin(i)*pfac, dum)
3072
3073! --- assumed number fraction of large ice to total (large & small) ice
3074! particles, which is based on a general impression of the literature.
3075! small ice are assumed to have a mean diameter of 50 microns.
3076
3077 if (tc >= 0.0) then
3078 flarge = flg1p0
3079 else
3080 flarge = dum
3081! flarge = max(FLGmin*pfac, dum)
3082 endif
3083!------------------------commented by moorthi -----------------------------
3084! elseif (tc >= -25.0) then
3085!
3086! --- note that absence of cloud water (qcwat) is used as a quick
3087! substitute for calculating water subsaturation as in gsmcolumn
3088!
3089! if (qcwat(i,k) <= 0.0 .or. tc < -8.0 &
3090! & .or. tc > -3.0) then
3091! flarge = FLG0P2
3092! else
3093!
3094! --- parameterize effects of rime splintering by increasing
3095! number of small ice particles
3096!
3097! flarge = FLG0P1
3098! endif
3099! elseif (tc <= -50.0) then
3100! flarge = 0.01
3101! else
3102! flarge = 0.2 * exp(0.1198*(tc+25.0))
3103! endif
3104!____________________________________________________________________________
3105
3106 xsimass = massi(mdimin) * (1.0 - flarge) / flarge
3107! nlimax = 20.0e3 !- ver3
3108! NLImax=50.E3 !- Ver3 => comment this line out
3109 nlimax=10.e3/sqrt(dum) !- Ver3
3110! NLImax=5.E3/sqrt(DUM) !- Ver3
3111! NLImax=6.E3/sqrt(DUM) !- Ver3
3112! NLImax=7.5E3/sqrt(DUM) !- Ver3
3113
3114! indexs = min(MDImax, max(MDImin, int(XMImax*dum) ))
3115!moorthi dsnow = XMImax * exp(0.0536*tc)
3116!moorthi indexs = max(INDEXSmin, min(MDImax, int(dsnow)))
3117
3118! if (lprnt) print *,' rrime=',rrime,' xsimass=',xsimass, &
3119! & ' indexs=',indexs,' massi=',massi(indexs),' flarge=',flarge
3120
3121 tem = rho * qcice(i,k)
3122 nlice = tem / (xsimass +rrime(i,k)*massi(indexs))
3123
3124! --- from subroutine gsmcolumn:
3125! minimum number concentration for large ice of NLImin=10/m**3
3126! at t>=0c. done in order to prevent unrealistically small
3127! melting rates and tiny amounts of snow from falling to
3128! unrealistically warm temperatures.
3129
3130 if (tc >= 0.0) then
3131
3132 nlice = max(nlimin, nlice)
3133
3134 elseif (nlice > nlimax) then
3135
3136! --- ferrier 6/13/01: prevent excess accumulation of ice
3137
3138 xli = (tem/nlimax - xsimass) / rrime(i,k)
3139
3140 if (xli <= massi(450) ) then
3141 dsnow = 9.5885e5 * xli**0.42066
3142 else
3143 dsnow = 3.9751e6 * xli** 0.49870
3144 endif
3145
3146 indexs = min(mdimax, max(indexs, int(dsnow)))
3147 nlice = tem / (xsimass + rrime(i,k)*massi(indexs))
3148
3149 endif ! end if_tc block
3150
3151! if (abs(plvl(i,ksfc)-plvl(i,k+k1)) < 300.0 &
3152! if (abs(plvl(i,ksfc)-plvl(i,k+k1)) < 400.0 &
3153! if (plvl(i,k+k1) > 600.0 &
3154! & .and. indexs >= INDEXSmin) then
3155! if (tc > -20.0 .and. indexs >= indexsmin) then
3156 if (plvl(i,ksfc) > 850.0 .and. &
3157! & plvl(i,k+k1) > 600.0 .and. indexs >= indexsmin) then
3158 & plvl(i,k+k1) > 700.0 .and. indexs >= indexsmin) then ! 20060516
3159!! if (plvl(i,ksfc) > 800.0 .and. &
3160!! & plvl(i,k+k1) > 700.0 .and. indexs >= indexsmin) then
3161! if (plvl(i,ksfc) > 700.0 .and. &
3162! & plvl(i,k+k1) > 600.0 .and. indexs >= indexsmin) then
3163 qsnow = min( qcice(i,k), &
3164 & nlice*rrime(i,k)*massi(indexs)/rho )
3165 endif
3166
3167 qqcice = max(0.0, qcice(i,k)-qsnow)
3168 cicep(i,k) = cpath * qqcice ! cloud ice path
3169 resnow(i,k) = 1.5 * float(indexs)
3170 snden(i,k) = sdens(indexs) / rrime(i,k) ! 1/snow density
3171 snowp(i,k) = cpath*qsnow ! snow path
3172! snowp (i,k) = cpath*qsnow*snden(i,k) ! snow path / snow density
3173
3174! if (lprnt .and. i == ipr) then
3175! if (i == 2) then
3176! print *,' L=',k,' snowp=',snowp(i,k),' cpath=',cpath, &
3177! & ' qsnow=',qsnow,' sden=',snden(i,k),' rrime=',rrime(i,k),&
3178! & ' indexs=',indexs,' sdens=',sdens(indexs),' resnow=', &
3179! & resnow(i,k),' qcice=',qqcice,' cicep=',cicep(i,k)
3180! endif
3181
3182 endif ! end if_qcice block
3183 endif ! end if_totcnd block
3184
3185 enddo
3186 enddo
3187!
3188!...................................
3189 end subroutine rsipath2
3190!-----------------------------------
3191
3192 end MODULE module_microphysics
3193
subroutine rsipath2(plyr, plvl, tlyr, qlyr, qcwat, qcice, qrain, rrime, im, levs, iflip, flgmin, cwatp, cicep, rainp, snowp, recwat, rerain, resnow, snden)
This program is a modified version of Ferrier's original "rshipath" subprogram. It computes layer's c...
This module contains some subroutines used in microphysics.