1 | !! Diagnostics: Reflectivity |
---|
2 | !! This routine - including comments were taken from the RIP4 program |
---|
3 | !! The only change was the removing of the old "ivarint=0" option |
---|
4 | |
---|
5 | MODULE module_calc_dbz |
---|
6 | |
---|
7 | CONTAINS |
---|
8 | SUBROUTINE calc_dbz (SCR, cname, cdesc, cunits) |
---|
9 | |
---|
10 | ! |
---|
11 | ! This routine computes equivalent reflectivity factor (in dBZ) at |
---|
12 | ! each model grid point. In calculating Ze, the RIP algorithm makes |
---|
13 | ! assumptions consistent with those made in an early version |
---|
14 | ! (ca. 1996) of the bulk mixed-phase microphysical scheme in the MM5 |
---|
15 | ! model (i.e., the scheme known as "Resiner-2"). For each species: |
---|
16 | ! |
---|
17 | ! 1. Particles are assumed to be spheres of constant density. The |
---|
18 | ! densities of rain drops, snow particles, and graupel particles are |
---|
19 | ! taken to be rho_r = rho_l = 1000 kg m^-3, rho_s = 100 kg m^-3, and |
---|
20 | ! rho_g = 400 kg m^-3, respectively. (l refers to the density of |
---|
21 | ! liquid water.) |
---|
22 | ! |
---|
23 | ! 2. The size distribution (in terms of the actual diameter of the |
---|
24 | ! particles, rather than the melted diameter or the equivalent solid |
---|
25 | ! ice sphere diameter) is assumed to follow an exponential |
---|
26 | ! distribution of the form N(D) = N_0 * exp( lambda*D ). |
---|
27 | ! |
---|
28 | ! 3. If ivarint=0, the intercept parameters are assumed constant (as |
---|
29 | ! in early Reisner-2), with values of 8x10^6, 2x10^7, and 4x10^6 m^-4, |
---|
30 | ! for rain, snow, and graupel, respectively. If ivarint=1, variable |
---|
31 | ! intercept parameters are used, as calculated in Thompson, Rasmussen, |
---|
32 | ! and Manning (2004, Monthly Weather Review, Vol. 132, No. 2, pp. 519-542.) |
---|
33 | ! |
---|
34 | ! More information on the derivation of simulated reflectivity in RIP |
---|
35 | ! can be found in Stoelinga (2005, unpublished write-up). Contact |
---|
36 | ! Mark Stoelinga (stoeling@atmos.washington.edu) for a copy. |
---|
37 | ! |
---|
38 | |
---|
39 | USE constants_module |
---|
40 | USE module_model_basics |
---|
41 | |
---|
42 | IMPLICIT NONE |
---|
43 | |
---|
44 | !Arguments |
---|
45 | real, pointer, dimension(:,:,:) :: SCR |
---|
46 | character (len=128) :: cname, cdesc, cunits |
---|
47 | |
---|
48 | !Local Variables |
---|
49 | integer :: i, j, k |
---|
50 | real :: temp_c |
---|
51 | real :: gonv, ronv, sonv |
---|
52 | real :: factor_g, factor_r, factor_s |
---|
53 | real :: factorb_g, factorb_r, factorb_s |
---|
54 | real :: rhoair, z_e |
---|
55 | real, dimension(west_east_dim,south_north_dim,bottom_top_dim) :: qvp, qra, qsn, qgr |
---|
56 | real, dimension(west_east_dim,south_north_dim,bottom_top_dim) :: tmk, prs |
---|
57 | |
---|
58 | ! Constants used to calculate variable intercepts |
---|
59 | real, parameter :: r1 = 1.e-15 |
---|
60 | real, parameter :: ron = 8.e6 |
---|
61 | real, parameter :: ron2 = 1.e10 |
---|
62 | real, parameter :: son = 2.e7 |
---|
63 | real, parameter :: gon = 5.e7 |
---|
64 | real, parameter :: ron_min = 8.e6 |
---|
65 | real, parameter :: ron_qr0 = 0.00010 |
---|
66 | real, parameter :: ron_delqr0 = 0.25*ron_qr0 |
---|
67 | real, parameter :: ron_const1r = (ron2-ron_min)*0.5 |
---|
68 | real, parameter :: ron_const2r = (ron2+ron_min)*0.5 |
---|
69 | ! Other constants |
---|
70 | real, parameter :: gamma_seven = 720. |
---|
71 | real, parameter :: rho_r = RHOWAT ! 1000. kg m^-3 |
---|
72 | real, parameter :: rho_s = 100. ! kg m^-3 |
---|
73 | real, parameter :: rho_g = 400. ! kg m^-3 |
---|
74 | real, parameter :: alpha = 0.224 |
---|
75 | |
---|
76 | ALLOCATE(SCR(west_east_dim,south_north_dim,bottom_top_dim)) |
---|
77 | |
---|
78 | |
---|
79 | prs = PRES * 0.01 ! pressure in hPa |
---|
80 | tmk = TK ! temperature in K |
---|
81 | |
---|
82 | qvp = QV |
---|
83 | qra = QR |
---|
84 | qsn = 0.0 |
---|
85 | qgr = 0.0 |
---|
86 | IF ( have_QS ) qsn = QS |
---|
87 | IF ( have_QG ) qgr = QG |
---|
88 | IF ( maxval(qsn) == 0.0 .AND. maxval(qgr) == 0.0 ) THEN |
---|
89 | !! No ice in this run |
---|
90 | WHERE ( tmk .lt. CELKEL ) |
---|
91 | qra = 0.0 |
---|
92 | qsn = qr |
---|
93 | END WHERE |
---|
94 | END IF |
---|
95 | |
---|
96 | factor_r = gamma_seven * 1.e18 * (1./(PI*rho_r))**1.75 |
---|
97 | factor_s = gamma_seven * 1.e18 * (1./(PI*rho_s))**1.75 & |
---|
98 | * (rho_s/RHOWAT)**2 * alpha |
---|
99 | factor_g = gamma_seven * 1.e18 * (1./(PI*rho_g))**1.75 & |
---|
100 | * (rho_g/RHOWAT)**2 * alpha |
---|
101 | |
---|
102 | DO k = 1,bottom_top_dim |
---|
103 | DO j = 1,south_north_dim |
---|
104 | DO i = 1,west_east_dim |
---|
105 | |
---|
106 | rhoair=prs(i,j,k)*100./ ( Rd*virtual(tmk(i,j,k),qvp(i,j,k)) ) ! air density |
---|
107 | |
---|
108 | ! Adjust factor for brightband, where snow or graupel particle |
---|
109 | ! scatters like liquid water (alpha=1.0) because it is assumed to |
---|
110 | ! have a liquid skin. |
---|
111 | |
---|
112 | IF (tmk(i,j,k) .gt. CELKEL) THEN |
---|
113 | factorb_s=factor_s/alpha |
---|
114 | factorb_g=factor_g/alpha |
---|
115 | ELSE |
---|
116 | factorb_s=factor_s |
---|
117 | factorb_g=factor_g |
---|
118 | ENDIF |
---|
119 | |
---|
120 | ! Calculate variable intercept parameters |
---|
121 | |
---|
122 | temp_c = amin1(-0.001, tmk(i,j,k)-CELKEL) |
---|
123 | sonv = amin1(2.0e8, 2.0e6*exp(-0.12*temp_c)) |
---|
124 | |
---|
125 | gonv = gon |
---|
126 | IF (qgr(i,j,k).gt.r1) THEN |
---|
127 | gonv = 2.38*(PI*rho_g/(rhoair*qgr(i,j,k)))**0.92 |
---|
128 | gonv = max(1.e4, min(gonv,gon)) |
---|
129 | ENDIF |
---|
130 | |
---|
131 | ronv = ron2 |
---|
132 | IF (qra(i,j,k).gt. r1) THEN |
---|
133 | ronv = ron_const1r*tanh((ron_qr0-qra(i,j,k)) & |
---|
134 | /ron_delqr0) + ron_const2r |
---|
135 | ENDIF |
---|
136 | |
---|
137 | ! Total equivalent reflectivity factor (z_e, in mm^6 m^-3) is |
---|
138 | ! the sum of z_e for each hydrometeor species: |
---|
139 | |
---|
140 | z_e = factor_r * (rhoair*qra(i,j,k))**1.75 /ronv**.75 & |
---|
141 | + factorb_s * (rhoair*qsn(i,j,k))**1.75 /sonv**.75 & |
---|
142 | + factorb_g * (rhoair*qgr(i,j,k))**1.75 /gonv**.75 |
---|
143 | |
---|
144 | ! Adjust small values of Z_e so that dBZ is no lower than -30 |
---|
145 | z_e = max(z_e,.001) |
---|
146 | |
---|
147 | ! Convert to dBZ |
---|
148 | SCR(i,j,k) = 10. * log10(z_e) |
---|
149 | |
---|
150 | ENDDO |
---|
151 | ENDDO |
---|
152 | ENDDO |
---|
153 | |
---|
154 | |
---|
155 | cname = "dbz" |
---|
156 | cdesc = "Reflectivity" |
---|
157 | cunits = "-" |
---|
158 | |
---|
159 | END SUBROUTINE calc_dbz |
---|
160 | |
---|
161 | END MODULE module_calc_dbz |
---|
162 | |
---|