1 | ! (c) British Crown Copyright 2008, the Met Office. |
---|
2 | ! All rights reserved. |
---|
3 | ! |
---|
4 | ! Redistribution and use in source and binary forms, with or without modification, are permitted |
---|
5 | ! provided that the following conditions are met: |
---|
6 | ! |
---|
7 | ! * Redistributions of source code must retain the above copyright notice, this list |
---|
8 | ! of conditions and the following disclaimer. |
---|
9 | ! * Redistributions in binary form must reproduce the above copyright notice, this list |
---|
10 | ! of conditions and the following disclaimer in the documentation and/or other materials |
---|
11 | ! provided with the distribution. |
---|
12 | ! * Neither the name of the Met Office nor the names of its contributors may be used |
---|
13 | ! to endorse or promote products derived from this software without specific prior written |
---|
14 | ! permission. |
---|
15 | ! |
---|
16 | ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR |
---|
17 | ! IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
---|
18 | ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
---|
19 | ! CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
20 | ! DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
---|
21 | ! DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER |
---|
22 | ! IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
---|
23 | ! OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
24 | |
---|
25 | ! |
---|
26 | ! History: |
---|
27 | ! Jul 2007 - A. Bodas-Salcedo - Initial version |
---|
28 | ! Jul 2008 - A. Bodas-Salcedo - Added definitions of ISCCP axes |
---|
29 | ! Oct 2008 - H. Chepfer - Added PARASOL_NREFL |
---|
30 | ! Jun 2010 - R. Marchand - Modified to support quickbeam V3, added ifdef for hydrometeor definitions |
---|
31 | ! |
---|
32 | ! |
---|
33 | ! |
---|
34 | |
---|
35 | #include "cosp_defs.h" |
---|
36 | MODULE MOD_COSP_CONSTANTS |
---|
37 | |
---|
38 | use netcdf, only: nf90_fill_real |
---|
39 | IMPLICIT NONE |
---|
40 | |
---|
41 | character(len=32) :: COSP_VERSION='COSP v1.4' |
---|
42 | |
---|
43 | ! Indices to address arrays of LS and CONV hydrometeors |
---|
44 | integer,parameter :: I_LSCLIQ = 1 |
---|
45 | integer,parameter :: I_LSCICE = 2 |
---|
46 | integer,parameter :: I_LSRAIN = 3 |
---|
47 | integer,parameter :: I_LSSNOW = 4 |
---|
48 | integer,parameter :: I_CVCLIQ = 5 |
---|
49 | integer,parameter :: I_CVCICE = 6 |
---|
50 | integer,parameter :: I_CVRAIN = 7 |
---|
51 | integer,parameter :: I_CVSNOW = 8 |
---|
52 | integer,parameter :: I_LSGRPL = 9 |
---|
53 | |
---|
54 | ! Missing value |
---|
55 | real,parameter :: R_UNDEF = -1.0E30 |
---|
56 | ! real,parameter :: R_UNDEF = nf90_fill_real |
---|
57 | |
---|
58 | ! Number of possible output variables |
---|
59 | integer,parameter :: N_OUT_LIST = 63 |
---|
60 | integer,parameter :: N3D = 8 |
---|
61 | integer,parameter :: N2D = 14 |
---|
62 | integer,parameter :: N1D = 40 |
---|
63 | |
---|
64 | ! Value for forward model result from a level that is under the ground |
---|
65 | real,parameter :: R_GROUND = -1.0E20 |
---|
66 | |
---|
67 | ! Stratiform and convective clouds in frac_out |
---|
68 | integer, parameter :: I_LSC = 1, & ! Large-scale clouds |
---|
69 | I_CVC = 2 ! Convective clouds |
---|
70 | |
---|
71 | ! Timing of different simulators, including statistics module |
---|
72 | integer, parameter :: N_SIMULATORS = 7 |
---|
73 | integer,parameter :: I_RADAR = 1 |
---|
74 | integer,parameter :: I_LIDAR = 2 |
---|
75 | integer,parameter :: I_ISCCP = 3 |
---|
76 | integer,parameter :: I_MISR = 4 |
---|
77 | integer,parameter :: I_MODIS = 5 |
---|
78 | integer,parameter :: I_RTTOV = 6 |
---|
79 | integer,parameter :: I_STATS = 7 |
---|
80 | character*32, dimension(N_SIMULATORS) :: SIM_NAME = (/'Radar','Lidar','ISCCP','MISR ','MODIS','RTTOV','Stats'/) |
---|
81 | integer,dimension(N_SIMULATORS) :: tsim |
---|
82 | data tsim/N_SIMULATORS*0.0/ |
---|
83 | |
---|
84 | !--- Radar constants |
---|
85 | ! CFAD constants |
---|
86 | integer,parameter :: DBZE_BINS = 15 ! Number of dBZe bins in histogram (cfad) |
---|
87 | real,parameter :: DBZE_MIN = -100.0 ! Minimum value for radar reflectivity |
---|
88 | real,parameter :: DBZE_MAX = 80.0 ! Maximum value for radar reflectivity |
---|
89 | real,parameter :: CFAD_ZE_MIN = -50.0 ! Lower value of the first CFAD Ze bin |
---|
90 | real,parameter :: CFAD_ZE_WIDTH = 5.0 ! Bin width (dBZe) |
---|
91 | |
---|
92 | |
---|
93 | !--- Lidar constants |
---|
94 | ! CFAD constants |
---|
95 | integer,parameter :: SR_BINS = 15 |
---|
96 | integer,parameter :: DPOL_BINS = 6 |
---|
97 | real,parameter :: LIDAR_UNDEF = 999.999 |
---|
98 | |
---|
99 | ! Other constants |
---|
100 | integer,parameter :: LIDAR_NCAT = 4 |
---|
101 | integer,parameter :: PARASOL_NREFL = 5 ! parasol |
---|
102 | real,parameter,dimension(PARASOL_NREFL) :: PARASOL_SZA = (/0.0, 20.0, 40.0, 60.0, 80.0/) |
---|
103 | real,parameter :: DEFAULT_LIDAR_REFF = 30.0e-6 ! Default lidar effective radius |
---|
104 | |
---|
105 | integer,parameter :: LIDAR_NTEMP = 40 |
---|
106 | real,parameter,dimension(LIDAR_NTEMP) :: LIDAR_PHASE_TEMP=(/-91.5,-88.5,-85.5,-82.5,-79.5,-76.5,-73.5,-70.5,-67.5,-64.5, & |
---|
107 | -61.5,-58.5,-55.5,-52.5,-49.5,-46.5,-43.5,-40.5,-37.5,-34.5, & |
---|
108 | -31.5,-28.5,-25.5,-22.5,-19.5,-16.5,-13.5,-10.5, -7.5, -4.5, & |
---|
109 | -1.5, 1.5, 4.5, 7.5, 10.5, 13.5, 16.5, 19.5, 22.5, 25.5/) |
---|
110 | real,parameter,dimension(2,LIDAR_NTEMP) :: LIDAR_PHASE_TEMP_BNDS=reshape(source=& |
---|
111 | (/-273.15,-90.,-90.,-87.,-87.,-84.,-84.,-81.,-81.,-78., & |
---|
112 | -78.,-75.,-75.,-72.,-72.,-69.,-69.,-66.,-66.,-63., & |
---|
113 | -63.,-60.,-60.,-57.,-57.,-54.,-54.,-51.,-51.,-48., & |
---|
114 | -48.,-45.,-45.,-42.,-42.,-39.,-39.,-36.,-36.,-33., & |
---|
115 | -33.,-30.,-30.,-27.,-27.,-24.,-24.,-21.,-21.,-18., & |
---|
116 | -18.,-15.,-15.,-12.,-12., -9., -9., -6., -6., -3., & |
---|
117 | -3., 0., 0., 3., 3., 6., 6., 9., 9., 12., & |
---|
118 | 12., 15., 15., 18., 18., 21., 21., 24., 24.,100./),shape=(/2,40/)) |
---|
119 | |
---|
120 | !--- MISR constants |
---|
121 | integer,parameter :: MISR_N_CTH = 16 |
---|
122 | |
---|
123 | !--- RTTOV constants |
---|
124 | integer,parameter :: RTTOV_MAX_CHANNELS = 20 |
---|
125 | |
---|
126 | ! ISCCP tau-Pc axes |
---|
127 | real,parameter,dimension(7) :: ISCCP_TAU = (/0.15, 0.80, 2.45, 6.5, 16.2, 41.5, 100.0/) |
---|
128 | real,parameter,dimension(2,7) :: ISCCP_TAU_BNDS = reshape(source=(/0.0,0.3,0.3,1.30,1.30,3.6,3.6,9.4, & |
---|
129 | 9.4,23.0,23.0,60.0,60.0,100000.0/), shape=(/2,7/)) |
---|
130 | |
---|
131 | real,parameter,dimension(7) :: ISCCP_PC = (/90000., 74000., 62000., 50000., 37500., 24500., 9000./) |
---|
132 | real,parameter,dimension(2,7) :: ISCCP_PC_BNDS = reshape(source=(/100000.0,80000.0,80000.0,68000.0,68000.0,56000.0 & |
---|
133 | ,56000.0,44000.0,44000.0,31000.0,31000.0,18000.0,18000.0,0.0/), shape=(/2,7/)) |
---|
134 | |
---|
135 | real,parameter,dimension(MISR_N_CTH) :: MISR_CTH = 1000.0*(/ 0., 0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.5, & |
---|
136 | 4.5, 6., 8., 10., 12., 14.5, 16., 18./) |
---|
137 | real,parameter,dimension(2,MISR_N_CTH) :: MISR_CTH_BNDS = 1000.0*reshape(source=(/ & |
---|
138 | -99.0, 0.0, 0.0, 0.5, 0.5, 1.0, 1.0, 1.5, & |
---|
139 | 1.5, 2.0, 2.0, 2.5, 2.5, 3.0, 3.0, 4.0, & |
---|
140 | 4.0, 5.0, 5.0, 7.0, 7.0, 9.0, 9.0, 11.0, & |
---|
141 | 11.0, 13.0, 13.0, 15.0, 15.0, 17.0, 17.0, 99.0/), & |
---|
142 | shape=(/2,MISR_N_CTH/)) |
---|
143 | |
---|
144 | |
---|
145 | ! |
---|
146 | ! The following code was modifed by Roj with implementation of quickbeam V3 |
---|
147 | ! (1) use ifdef to support more than one microphyscis scheme |
---|
148 | ! (2) added constants microphysic_scheme_name, LOAD_scale_LUTs, and SAVE_scale_LUTs |
---|
149 | ! |
---|
150 | |
---|
151 | ! directory where LUTs will be stored |
---|
152 | character*120 :: RADAR_SIM_LUT_DIRECTORY = './' |
---|
153 | |
---|
154 | #ifdef MMF_V3_SINGLE_MOMENT |
---|
155 | |
---|
156 | ! |
---|
157 | ! Table hclass for quickbeam to support one-moment (bulk) microphysics scheme used by MMF V3.0 & V3.5 |
---|
158 | ! |
---|
159 | |
---|
160 | ! |
---|
161 | ! NOTE: if ANY value in this section of code is changed, the existing LUT |
---|
162 | ! (i.e., the associated *.dat file) MUST be deleted so that a NEW |
---|
163 | ! LUT will be created !!! |
---|
164 | ! |
---|
165 | character*120 :: RADAR_SIM_MICROPHYSICS_SCHEME_NAME = 'MMF_v3_single_moment' |
---|
166 | |
---|
167 | logical :: RADAR_SIM_LOAD_scale_LUTs_flag = .false. |
---|
168 | logical :: RADAR_SIM_UPDATE_scale_LUTs_flag = .false. |
---|
169 | integer,parameter :: N_HYDRO = 9 |
---|
170 | |
---|
171 | integer :: HCLASS_TYPE(N_HYDRO),HCLASS_PHASE(N_HYDRO) |
---|
172 | |
---|
173 | real :: HCLASS_DMIN(N_HYDRO),HCLASS_DMAX(N_HYDRO), & |
---|
174 | HCLASS_APM(N_HYDRO),HCLASS_BPM(N_HYDRO),HCLASS_RHO(N_HYDRO), & |
---|
175 | HCLASS_P1(N_HYDRO),HCLASS_P2(N_HYDRO),HCLASS_P3(N_HYDRO) |
---|
176 | |
---|
177 | ! HCLASS_CP is not used in the version of Quickbeam included in COSP |
---|
178 | ! LSL LSI LSR LSS CVL CVI CVR CVS LSG |
---|
179 | data HCLASS_TYPE/ 5, 1, 2, 2, 5, 1, 2, 2, 2/ |
---|
180 | data HCLASS_PHASE/ 0, 1, 0, 1, 0, 1, 0, 1, 1/ |
---|
181 | data HCLASS_DMIN/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
182 | data HCLASS_DMAX/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
183 | data HCLASS_APM/ 524, 110.8, 524, -1, 524, 110.8, 524, -1, -1/ |
---|
184 | data HCLASS_BPM/ 3, 2.91, 3, -1, 3, 2.91, 3, -1, -1/ |
---|
185 | data HCLASS_RHO/ -1, -1, -1, 100, -1, -1, -1, 100, 400/ |
---|
186 | data HCLASS_P1/ -1, -1, 8.e6, 3.e6, -1, -1, 8.e6, 3.e6, 4.e6/ |
---|
187 | data HCLASS_P2/ 6, 40, -1, -1, 6, 40, -1, -1, -1/ |
---|
188 | data HCLASS_P3/ 0.3, 2, -1, -1, 0.3, 2, -1, -1, -1/ |
---|
189 | |
---|
190 | ! NOTES on HCLASS variables |
---|
191 | ! |
---|
192 | ! TYPE - Set to |
---|
193 | ! 1 for modified gamma distribution, |
---|
194 | ! 2 for exponential distribution, |
---|
195 | ! 3 for power law distribution, |
---|
196 | ! 4 for monodisperse distribution, |
---|
197 | ! 5 for lognormal distribution. |
---|
198 | |
---|
199 | ! PHASE - Set to 0 for liquid, 1 for ice. |
---|
200 | |
---|
201 | ! DMIN - The minimum drop size for this class (micron), ignored for monodisperse. |
---|
202 | ! DMAX - The maximum drop size for this class (micron), ignored for monodisperse. |
---|
203 | ! Important note: The settings for DMIN and DMAX are |
---|
204 | ! ignored in the current version for all distributions except for power |
---|
205 | ! law. Except when the power law distribution is used, particle size |
---|
206 | ! is fixed to vary from zero to infinity, a restriction that is expected |
---|
207 | ! to be lifted in future versions. A placeholder must still be specified |
---|
208 | ! for each. |
---|
209 | |
---|
210 | ! Density of particles is given by apm*D^bpm or a fixed value rho. ONLY specify ONE of these two!! |
---|
211 | ! APM - The alpha_m coefficient in equation (1) (kg m**-beta_m ) |
---|
212 | ! BPM - The beta_m coefficient in equation (1), see section 4.1. |
---|
213 | |
---|
214 | ! RHO - Hydrometeor density (kg m-3 ). |
---|
215 | |
---|
216 | ! P1, P2, P3 - are default distribution parameters that depend on the type |
---|
217 | ! of distribution (see quickmbeam documentation for more information) |
---|
218 | ! |
---|
219 | ! Modified Gamma (must set P3 and one of P1 or P2) |
---|
220 | ! P1 - Set to the total particle number concentration Nt /rho_a (kg-1 ), where |
---|
221 | ! rho_a is the density of air in the radar volume. |
---|
222 | ! P2 - Set to the particle mean diameter D (micron). |
---|
223 | ! P3 - Set to the distribution width nu. |
---|
224 | ! |
---|
225 | ! Exponetial (set one of) |
---|
226 | ! P1 - Set to a constant intercept parameter N0 (m-4). |
---|
227 | ! P2 - Set to a constant lambda (micron-1). |
---|
228 | ! |
---|
229 | ! Power Law |
---|
230 | ! P1 - Set this to the value of a constant power law parameter br |
---|
231 | ! |
---|
232 | ! Monodisperse |
---|
233 | ! P1 - Set to a constant diameter D0 (micron) = Re. |
---|
234 | ! |
---|
235 | ! Log-normal (must set P3 and one of P1 or P2) |
---|
236 | ! P1 - Set to the total particle number concentration Nt /rho_a (kg-1 ) |
---|
237 | ! P2 - Set to the geometric mean particle radius rg (micron). |
---|
238 | ! P3 - Set to the natural logarithm of the geometric standard deviation. |
---|
239 | ! |
---|
240 | |
---|
241 | |
---|
242 | real,dimension(N_HYDRO) :: N_ax,N_bx,alpha_x,c_x,d_x,g_x,a_x,b_x,gamma_1,gamma_2,gamma_3,gamma_4 |
---|
243 | |
---|
244 | ! Microphysical settings for the precipitation flux to mixing ratio conversion |
---|
245 | ! LSL LSI LSR LSS CVL CVI CVR CVS LSG |
---|
246 | data N_ax/ -1., -1., 8.e6, 3.e6, -1., -1., 8.e6, 3.e6, 4.e6/ |
---|
247 | data N_bx/ -1., -1., 0.0, 0.0, -1., -1., 0.0, 0.0, 0.0/ |
---|
248 | data alpha_x/ -1., -1., 0.0, 0.0, -1., -1., 0.0, 0.0, 0.0/ |
---|
249 | data c_x/ -1., -1., 842.0, 4.84, -1., -1., 842.0, 4.84, 94.5/ |
---|
250 | data d_x/ -1., -1., 0.8, 0.25, -1., -1., 0.8, 0.25, 0.5/ |
---|
251 | data g_x/ -1., -1., 0.5, 0.5, -1., -1., 0.5, 0.5, 0.5/ |
---|
252 | data a_x/ -1., -1., 524.0, 52.36, -1., -1., 524.0, 52.36, 209.44/ |
---|
253 | data b_x/ -1., -1., 3.0, 3.0, -1., -1., 3.0, 3.0, 3.0/ |
---|
254 | data gamma_1/ -1., -1., 17.83725, 8.284701, -1., -1., 17.83725, 8.284701, 11.63230/ |
---|
255 | data gamma_2/ -1., -1., 6.0, 6.0, -1., -1., 6.0, 6.0, 6.0/ |
---|
256 | data gamma_3/ -1., -1., 2.0, 2.0, -1., -1., 2.0, 2.0, 2.0/ |
---|
257 | data gamma_4/ -1., -1., 6.0, 6.0, -1., -1., 6.0, 6.0, 6.0/ |
---|
258 | |
---|
259 | |
---|
260 | |
---|
261 | #endif |
---|
262 | |
---|
263 | |
---|
264 | #ifdef MMF_V3p5_TWO_MOMENT |
---|
265 | |
---|
266 | ! |
---|
267 | ! Table hclass for quickbeam to support two-moment "morrison" microphysics scheme used by V3.5 (SAM 6.8) |
---|
268 | ! |
---|
269 | ! This Number concentriation Np in [1/kg] MUST be input to COSP/radar simulator |
---|
270 | ! |
---|
271 | ! NOTE: Be sure to check that the ice-density (rho) set it this tables matches what you used |
---|
272 | ! |
---|
273 | |
---|
274 | ! |
---|
275 | ! NOTE: if ANY value in this section of code is changed, the existing LUT |
---|
276 | ! (i.e., the associated *.dat file) MUST be deleted so that a NEW |
---|
277 | ! LUT will be created !!! |
---|
278 | ! |
---|
279 | character*120 :: RADAR_SIM_MICROPHYSICS_SCHEME_NAME = 'MMF_v3.5_two_moment' |
---|
280 | |
---|
281 | logical :: RADAR_SIM_LOAD_scale_LUTs_flag = .false. |
---|
282 | logical :: RADAR_SIM_UPDATE_scale_LUTs_flag = .false. |
---|
283 | |
---|
284 | integer,parameter :: N_HYDRO = 9 |
---|
285 | |
---|
286 | integer :: HCLASS_TYPE(N_HYDRO),HCLASS_PHASE(N_HYDRO) |
---|
287 | |
---|
288 | real :: HCLASS_DMIN(N_HYDRO),HCLASS_DMAX(N_HYDRO), & |
---|
289 | HCLASS_APM(N_HYDRO),HCLASS_BPM(N_HYDRO),HCLASS_RHO(N_HYDRO), & |
---|
290 | HCLASS_P1(N_HYDRO),HCLASS_P2(N_HYDRO),HCLASS_P3(N_HYDRO) |
---|
291 | |
---|
292 | ! HCLASS_CP is not used in the version of Quickbeam included in COSP |
---|
293 | ! LSL LSI LSR LSS CVL CVI CVR CVS LSG |
---|
294 | data HCLASS_TYPE/ 1, 1, 1, 1, 1, 1, 1, 1, 1/ |
---|
295 | data HCLASS_PHASE/ 0, 1, 0, 1, 0, 1, 0, 1, 1/ |
---|
296 | data HCLASS_DMIN/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
297 | data HCLASS_DMAX/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
298 | data HCLASS_APM/ 524, -1, 524, -1, 524, -1, 524, -1, -1/ |
---|
299 | data HCLASS_BPM/ 3, -1, 3, -1, 3, -1, 3, -1, -1/ |
---|
300 | data HCLASS_RHO/ -1, 500, -1, 100, -1, 500, -1, 100, 900/ |
---|
301 | data HCLASS_P1/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
302 | data HCLASS_P2/ -1, -1, -1, -1, -1, -1, -1, -1, -1/ |
---|
303 | data HCLASS_P3/ -2, 1, 1, 1, -2, 1, 1, 1, 1/ |
---|
304 | ! Note: value of "-2" for HCLASS_P3 uses martin 1994 parameteriztion of gamma function width with Number concentration |
---|
305 | #endif |
---|
306 | |
---|
307 | END MODULE MOD_COSP_CONSTANTS |
---|