Line data Source code
1 : !-----------------------------------------------------------------------
2 : ! $Id$
3 : !===============================================================================
4 : module stats_sfc_module
5 :
6 : implicit none
7 :
8 : private ! Set Default Scope
9 :
10 : public :: stats_init_sfc
11 :
12 : ! Constant parameters
13 : integer, parameter, public :: nvarmax_sfc = 250 ! Maximum variables allowed
14 :
15 : contains
16 :
17 : !-----------------------------------------------------------------------
18 0 : subroutine stats_init_sfc( vars_sfc, & ! intent(in)
19 : l_error, & ! intent(inout)
20 : stats_metadata, stats_sfc ) ! intent(inout)
21 :
22 : ! Description:
23 : ! Initializes array indices for stats_sfc
24 : ! References:
25 : ! None
26 : !-----------------------------------------------------------------------
27 :
28 : use constants_clubb, only: &
29 : fstderr ! Constant(s)
30 :
31 : use stats_type_utilities, only: &
32 : stat_assign ! Procedure
33 :
34 : use stats_type, only: &
35 : stats ! Type
36 :
37 : use stats_variables, only: &
38 : stats_metadata_type
39 :
40 : implicit none
41 :
42 : ! External
43 : intrinsic :: trim
44 :
45 : !--------------------- Input Variable ---------------------
46 : character(len= * ), dimension(nvarmax_sfc), intent(in) :: &
47 : vars_sfc
48 :
49 : !--------------------- InOut Variables ---------------------
50 : type (stats_metadata_type), intent(inout) :: &
51 : stats_metadata
52 :
53 : type (stats), target, intent(inout) :: &
54 : stats_sfc
55 :
56 : logical, intent(inout) :: l_error
57 :
58 : !--------------------- Local Varables ---------------------
59 : integer :: i, k
60 :
61 : !--------------------- Begin Code ---------------------
62 :
63 : ! Default initialization for array indices for stats_sfc is zero (see module
64 : ! stats_variables)
65 :
66 : ! Assign pointers for statistics variables stats_sfc using stat_assign
67 :
68 0 : k = 1
69 0 : do i = 1, stats_sfc%num_output_fields
70 :
71 0 : select case ( trim( vars_sfc(i) ) )
72 : case ('soil_heat_flux')
73 0 : stats_metadata%isoil_heat_flux = k
74 :
75 : call stat_assign( var_index=stats_metadata%isoil_heat_flux, var_name="soil_heat_flux", &
76 : var_description="soil_heat_flux, soil_heat_flux", &
77 : var_units="W/m^2", l_silhs=.false., &
78 0 : grid_kind=stats_sfc )
79 0 : k = k + 1
80 : case ('ustar')
81 0 : stats_metadata%iustar = k
82 :
83 : call stat_assign( var_index=stats_metadata%iustar, var_name="ustar", &
84 : var_description="ustar, Friction velocity", var_units="m/s", l_silhs=.false., &
85 0 : grid_kind=stats_sfc )
86 0 : k = k + 1
87 : case ('veg_T_in_K')
88 0 : stats_metadata%iveg_T_in_K = k
89 :
90 : call stat_assign( var_index=stats_metadata%iveg_T_in_K, var_name="veg_T_in_K", &
91 : var_description="veg_T_in_K, Surface Vegetation Temperature", var_units="K", &
92 0 : l_silhs=.false., grid_kind=stats_sfc )
93 0 : k = k + 1
94 : case ('sfc_soil_T_in_K')
95 0 : stats_metadata%isfc_soil_T_in_K = k
96 :
97 : call stat_assign( var_index=stats_metadata%isfc_soil_T_in_K, var_name="sfc_soil_T_in_K", &
98 : var_description="sfc_soil_T_in_K, Surface soil temperature", &
99 : var_units="K", l_silhs=.false., &
100 0 : grid_kind=stats_sfc )
101 0 : k = k + 1
102 : case ('deep_soil_T_in_K')
103 0 : stats_metadata%ideep_soil_T_in_K = k
104 :
105 : call stat_assign( var_index=stats_metadata%ideep_soil_T_in_K, var_name="deep_soil_T_in_K", &
106 : var_description="deep_soil_T_in_K, Deep soil Temperature", &
107 : var_units="K", l_silhs=.false., &
108 0 : grid_kind=stats_sfc )
109 0 : k = k + 1
110 :
111 : case ('lh')
112 0 : stats_metadata%ilh = k
113 : call stat_assign( var_index=stats_metadata%ilh, var_name="lh", &
114 : var_description="lh, Surface latent heating", var_units="W/m2", l_silhs=.false., &
115 0 : grid_kind=stats_sfc )
116 0 : k = k + 1
117 :
118 : case ('sh')
119 0 : stats_metadata%ish = k
120 : call stat_assign( var_index=stats_metadata%ish, var_name="sh", &
121 : var_description="sh, Surface sensible heating", var_units="W/m2", &
122 0 : l_silhs=.false., grid_kind=stats_sfc )
123 0 : k = k + 1
124 :
125 : case ('cc')
126 0 : stats_metadata%icc = k
127 : call stat_assign( var_index=stats_metadata%icc, var_name="cc", var_description="cc, Cloud cover", &
128 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
129 0 : k = k + 1
130 :
131 : case ('lwp')
132 0 : stats_metadata%ilwp = k
133 : call stat_assign( var_index=stats_metadata%ilwp, var_name="lwp", &
134 : var_description="lwp, Liquid water path", var_units="kg/m2", l_silhs=.false., &
135 0 : grid_kind=stats_sfc )
136 0 : k = k + 1
137 :
138 : case ('vwp')
139 0 : stats_metadata%ivwp = k
140 : call stat_assign( var_index=stats_metadata%ivwp, var_name="vwp", &
141 : var_description="vwp, Vapor water path", var_units="kg/m2", l_silhs=.false., &
142 0 : grid_kind=stats_sfc )
143 0 : k = k + 1
144 :
145 : case ('iwp')
146 0 : stats_metadata%iiwp = k
147 : call stat_assign( var_index=stats_metadata%iiwp, var_name="iwp", &
148 : var_description="iwp, Ice water path", var_units="kg/m2", l_silhs=.false., &
149 0 : grid_kind=stats_sfc )
150 0 : k = k + 1
151 :
152 : case ('swp')
153 0 : stats_metadata%iswp = k
154 : call stat_assign( var_index=stats_metadata%iswp, var_name="swp", &
155 : var_description="swp, Snow water path", var_units="kg/m2", l_silhs=.false., &
156 0 : grid_kind=stats_sfc )
157 0 : k = k + 1
158 :
159 : case ('rwp')
160 0 : stats_metadata%irwp = k
161 : call stat_assign( var_index=stats_metadata%irwp, var_name="rwp", &
162 : var_description="rwp, Rain water path", var_units="kg/m2", l_silhs=.false., &
163 0 : grid_kind=stats_sfc )
164 0 : k = k + 1
165 :
166 : case ('z_cloud_base')
167 0 : stats_metadata%iz_cloud_base = k
168 : call stat_assign( var_index=stats_metadata%iz_cloud_base, var_name="z_cloud_base", &
169 : var_description="z_cloud_base, Cloud base altitude", &
170 : var_units="m", l_silhs=.false., &
171 0 : grid_kind=stats_sfc )
172 0 : k = k + 1
173 :
174 : case ('z_inversion')
175 0 : stats_metadata%iz_inversion = k
176 : call stat_assign( var_index=stats_metadata%iz_inversion, var_name="z_inversion", &
177 : var_description="z_inversion, Inversion altitude", var_units="m", l_silhs=.false., &
178 0 : grid_kind=stats_sfc )
179 0 : k = k + 1
180 :
181 : case ('precip_rate_sfc') ! Brian
182 0 : stats_metadata%iprecip_rate_sfc = k
183 : call stat_assign( var_index=stats_metadata%iprecip_rate_sfc, var_name="precip_rate_sfc", &
184 : var_description="precip_rate_sfc, Surface rainfall rate", var_units="mm/day", &
185 0 : l_silhs=.true., grid_kind=stats_sfc )
186 0 : k = k + 1
187 :
188 : case ('rain_flux_sfc') ! Brian
189 0 : stats_metadata%irain_flux_sfc = k
190 :
191 : call stat_assign( var_index=stats_metadata%irain_flux_sfc, var_name="rain_flux_sfc", &
192 : var_description="rain_flux_sfc, Surface rain flux", &
193 : var_units="W/m^2", l_silhs=.false., &
194 0 : grid_kind=stats_sfc )
195 0 : k = k + 1
196 :
197 : case ('rrm_sfc') ! Brian
198 0 : stats_metadata%irrm_sfc = k
199 :
200 : call stat_assign( var_index=stats_metadata%irrm_sfc, var_name="rrm_sfc", &
201 : var_description="rrm_sfc, Surface rain water mixing ratio", var_units="kg/kg", &
202 0 : l_silhs=.false., grid_kind=stats_sfc )
203 0 : k = k + 1
204 :
205 : case ('precip_frac_tol')
206 0 : stats_metadata%iprecip_frac_tol = k
207 :
208 : call stat_assign( var_index=stats_metadata%iprecip_frac_tol, &
209 : var_name="precip_frac_tol", &
210 : var_description="Smallest allowable precipitation " &
211 : // "fraction when hydrometeors are present [-]", &
212 : var_units="-", &
213 0 : l_silhs=.false., grid_kind=stats_sfc )
214 0 : k = k + 1
215 :
216 : case ( 'morr_snow_rate' )
217 0 : stats_metadata%imorr_snow_rate = k
218 : call stat_assign( var_index=stats_metadata%imorr_snow_rate, var_name="morr_snow_rate", &
219 : var_description="morr_snow_rate, Snow+Ice+Graupel fallout rate " &
220 : // "from Morrison scheme", &
221 0 : var_units="mm/day", l_silhs=.false., grid_kind=stats_sfc )
222 0 : k = k + 1
223 :
224 : case ('wpthlp_sfc')
225 0 : stats_metadata%iwpthlp_sfc = k
226 :
227 : call stat_assign( var_index=stats_metadata%iwpthlp_sfc, var_name="wpthlp_sfc", &
228 : var_description="w'thl'_sfc, wpthlp surface flux", &
229 : var_units="K m/s", l_silhs=.false., &
230 0 : grid_kind=stats_sfc )
231 0 : k = k + 1
232 :
233 : case ('wprtp_sfc')
234 0 : stats_metadata%iwprtp_sfc = k
235 :
236 : call stat_assign( var_index=stats_metadata%iwprtp_sfc, var_name="wprtp_sfc", &
237 : var_description="w'rt'_sfc, wprtp surface flux", var_units="(kg/kg) m/s", &
238 0 : l_silhs=.false., grid_kind=stats_sfc )
239 0 : k = k + 1
240 :
241 : case ('upwp_sfc')
242 0 : stats_metadata%iupwp_sfc = k
243 :
244 : call stat_assign( var_index=stats_metadata%iupwp_sfc, var_name="upwp_sfc", &
245 : var_description="u'w'_sfc, upwp surface flux", &
246 : var_units="m^2/s^2", l_silhs=.false., &
247 0 : grid_kind=stats_sfc )
248 0 : k = k + 1
249 :
250 : case ('vpwp_sfc')
251 0 : stats_metadata%ivpwp_sfc = k
252 :
253 : call stat_assign( var_index=stats_metadata%ivpwp_sfc, var_name="vpwp_sfc", &
254 : var_description="v'w'_sfc, vpwp surface flux", &
255 : var_units="m^2/s^2", l_silhs=.false., &
256 0 : grid_kind=stats_sfc )
257 0 : k = k + 1
258 :
259 : case ('thlm_vert_avg')
260 0 : stats_metadata%ithlm_vert_avg = k
261 :
262 : call stat_assign( var_index=stats_metadata%ithlm_vert_avg, var_name="thlm_vert_avg", &
263 : var_description="thlm_vert_avg, Vertical average (density-weighted) of thlm", &
264 : var_units="K", &
265 0 : l_silhs=.false., grid_kind=stats_sfc )
266 0 : k = k + 1
267 :
268 : case ('rtm_vert_avg')
269 0 : stats_metadata%irtm_vert_avg = k
270 :
271 : call stat_assign( var_index=stats_metadata%irtm_vert_avg, var_name="rtm_vert_avg", &
272 : var_description="rtm_vert_avg, Vertical average (density-weighted) of rtm", &
273 0 : var_units="kg/kg", l_silhs=.false., grid_kind=stats_sfc )
274 0 : k = k + 1
275 :
276 : case ('um_vert_avg')
277 0 : stats_metadata%ium_vert_avg = k
278 :
279 : call stat_assign( var_index=stats_metadata%ium_vert_avg, var_name="um_vert_avg", &
280 : var_description="um_vert_avg, Vertical average (density-weighted) of um", &
281 : var_units="m/s", &
282 0 : l_silhs=.false., grid_kind=stats_sfc )
283 0 : k = k + 1
284 :
285 : case ('vm_vert_avg')
286 0 : stats_metadata%ivm_vert_avg = k
287 :
288 : call stat_assign( var_index=stats_metadata%ivm_vert_avg, var_name="vm_vert_avg", &
289 : var_description="vm_vert_avg, Vertical average (density-weighted) of vm", &
290 : var_units="m/s", &
291 0 : l_silhs=.false., grid_kind=stats_sfc )
292 0 : k = k + 1
293 :
294 : case ('wp2_vert_avg')
295 0 : stats_metadata%iwp2_vert_avg = k
296 :
297 : call stat_assign( var_index=stats_metadata%iwp2_vert_avg, var_name="wp2_vert_avg", &
298 : var_description="Density-weighted vertical average of w'^2", &
299 0 : var_units="m^2/s^2", l_silhs=.false., grid_kind=stats_sfc )
300 0 : k = k + 1
301 :
302 : case ('up2_vert_avg')
303 0 : stats_metadata%iup2_vert_avg = k
304 :
305 : call stat_assign( var_index=stats_metadata%iup2_vert_avg, var_name="up2_vert_avg", &
306 : var_description="u'^2_vert_avg, Vertical average (density-weighted) of up2", &
307 0 : var_units="m^2/s^2", l_silhs=.false., grid_kind=stats_sfc )
308 0 : k = k + 1
309 :
310 : case ('vp2_vert_avg')
311 0 : stats_metadata%ivp2_vert_avg = k
312 :
313 : call stat_assign( var_index=stats_metadata%ivp2_vert_avg, var_name="vp2_vert_avg", &
314 : var_description="v'^2_vert_avg, Vertical average (density-weighted) of vp2", &
315 0 : var_units="m^2/s^2", l_silhs=.false., grid_kind=stats_sfc )
316 0 : k = k + 1
317 :
318 : case ('rtp2_vert_avg')
319 0 : stats_metadata%irtp2_vert_avg = k
320 :
321 : call stat_assign( var_index=stats_metadata%irtp2_vert_avg, var_name="rtp2_vert_avg", &
322 : var_description="rt'^2_vert_avg, Vertical average (density-weighted) of rtp2", &
323 0 : var_units="kg^2/kg^2", l_silhs=.false., grid_kind=stats_sfc )
324 0 : k = k + 1
325 :
326 : case ('thlp2_vert_avg')
327 0 : stats_metadata%ithlp2_vert_avg = k
328 :
329 : call stat_assign( var_index=stats_metadata%ithlp2_vert_avg, var_name="thlp2_vert_avg", &
330 : var_description="thl'^2_vert_avg, Vertical average (density-weighted) of thlp2", &
331 0 : var_units="K^2", l_silhs=.false., grid_kind=stats_sfc )
332 0 : k = k + 1
333 :
334 : case ('T_sfc')
335 0 : stats_metadata%iT_sfc = k
336 :
337 : call stat_assign( var_index=stats_metadata%iT_sfc, var_name="T_sfc", &
338 : var_description="T_sfc, Surface Temperature", var_units="K", l_silhs=.false., &
339 0 : grid_kind=stats_sfc )
340 0 : k = k + 1
341 :
342 : case ('wp23_matrix_condt_num')
343 0 : stats_metadata%iwp23_matrix_condt_num = k
344 : call stat_assign( var_index=stats_metadata%iwp23_matrix_condt_num, var_name="wp23_matrix_condt_num", &
345 : var_description="w'^23_matrix_condt_num, Estimate of the condition number for wp2/3", &
346 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
347 0 : k = k + 1
348 :
349 : case ('thlm_matrix_condt_num')
350 0 : stats_metadata%ithlm_matrix_condt_num = k
351 : call stat_assign( var_index=stats_metadata%ithlm_matrix_condt_num, var_name="thlm_matrix_condt_num", &
352 : var_description="thlm_matrix_condt_num, Estimate of the condition " &
353 : // "number for thlm/wpthlp", &
354 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
355 0 : k = k + 1
356 :
357 : case ('rtm_matrix_condt_num')
358 0 : stats_metadata%irtm_matrix_condt_num = k
359 :
360 : call stat_assign( var_index=stats_metadata%irtm_matrix_condt_num, var_name="rtm_matrix_condt_num", &
361 : var_description="rtm_matrix_condt_num, Estimate of the condition number " &
362 : // "for rtm/wprtp", &
363 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
364 0 : k = k + 1
365 :
366 : case ('thlp2_matrix_condt_num')
367 0 : stats_metadata%ithlp2_matrix_condt_num = k
368 :
369 : call stat_assign( var_index=stats_metadata%ithlp2_matrix_condt_num, var_name="thlp2_matrix_condt_num", &
370 : var_description="thl'^2_matrix_condt_num, Estimate of the condition " &
371 : // "number for thlp2", &
372 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
373 0 : k = k + 1
374 :
375 : case ('rtp2_matrix_condt_num')
376 0 : stats_metadata%irtp2_matrix_condt_num = k
377 : call stat_assign( var_index=stats_metadata%irtp2_matrix_condt_num, var_name="rtp2_matrix_condt_num", &
378 : var_description="rt'^2_matrix_condt_num, Estimate of the condition " &
379 : // "number for rtp2", &
380 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
381 0 : k = k + 1
382 :
383 : case ('rtpthlp_matrix_condt_num')
384 0 : stats_metadata%irtpthlp_matrix_condt_num = k
385 : call stat_assign( var_index=stats_metadata%irtpthlp_matrix_condt_num, &
386 : var_name="rtpthlp_matrix_condt_num", &
387 : var_description="rt'thl'_matrix_condt_num, Estimate of the condition " &
388 : // "number for rtpthlp", &
389 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
390 0 : k = k + 1
391 :
392 : case ('up2_vp2_matrix_condt_num')
393 0 : stats_metadata%iup2_vp2_matrix_condt_num = k
394 : call stat_assign( var_index=stats_metadata%iup2_vp2_matrix_condt_num, &
395 : var_name="up2_vp2_matrix_condt_num", &
396 : var_description="u'^2_v'^2_matrix_condt_num, Estimate of the condition " &
397 : // "number for up2/vp2", &
398 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
399 0 : k = k + 1
400 :
401 : case ('windm_matrix_condt_num')
402 0 : stats_metadata%iwindm_matrix_condt_num = k
403 : call stat_assign( var_index=stats_metadata%iwindm_matrix_condt_num, var_name="windm_matrix_condt_num", &
404 : var_description="windm_matrix_condt_num, Estimate of the condition " &
405 : // "number for the mean wind", &
406 0 : var_units="count", l_silhs=.false., grid_kind=stats_sfc )
407 :
408 0 : k = k + 1
409 :
410 : case ('rtm_spur_src')
411 0 : stats_metadata%irtm_spur_src = k
412 :
413 : call stat_assign( var_index=stats_metadata%irtm_spur_src, var_name="rtm_spur_src", &
414 : var_description="rtm_spur_src, rtm spurious source", var_units="kg/(m^2 s)", &
415 0 : l_silhs=.false., grid_kind=stats_sfc )
416 0 : k = k + 1
417 :
418 : case ('thlm_spur_src')
419 0 : stats_metadata%ithlm_spur_src = k
420 :
421 : call stat_assign( var_index=stats_metadata%ithlm_spur_src, var_name="thlm_spur_src", &
422 : var_description="thlm_spur_src, thlm spurious source", &
423 0 : var_units="(K kg) / (m^2 s)", l_silhs=.false., grid_kind=stats_sfc )
424 0 : k = k + 1
425 :
426 : case ('rs_sd_morr_int')
427 0 : stats_metadata%irsm_sd_morr_int = k
428 :
429 : call stat_assign( var_index=stats_metadata%irsm_sd_morr_int, var_name="rs_sd_morr_int", &
430 : var_description="rs_sd_morr_int, rsm_sd_morr vertical integral", &
431 0 : var_units="(kg/kg)/s", l_silhs=.true., grid_kind=stats_sfc )
432 0 : k = k + 1
433 :
434 : case ('tot_vartn_normlzd_rtm')
435 0 : stats_metadata%itot_vartn_normlzd_rtm = k
436 :
437 : call stat_assign( var_index=stats_metadata%itot_vartn_normlzd_rtm, var_name="tot_vartn_normlzd_rtm", &
438 : var_description="Total variation of rtm in the vertical normalized", &
439 0 : var_units="-", l_silhs=.false., grid_kind=stats_sfc )
440 0 : k = k + 1
441 :
442 : case ('tot_vartn_normlzd_thlm')
443 0 : stats_metadata%itot_vartn_normlzd_thlm = k
444 :
445 : call stat_assign( var_index=stats_metadata%itot_vartn_normlzd_thlm, var_name="tot_vartn_normlzd_thlm", &
446 : var_description="Total variation of thlm in the vertical normalized", &
447 0 : var_units="-", l_silhs=.false., grid_kind=stats_sfc )
448 0 : k = k + 1
449 :
450 : case ('tot_vartn_normlzd_wprtp')
451 0 : stats_metadata%itot_vartn_normlzd_wprtp = k
452 :
453 : call stat_assign( var_index=stats_metadata%itot_vartn_normlzd_wprtp, var_name="tot_vartn_normlzd_wprtp", &
454 : var_description="Total variation of wprtp in the vertical normalized", &
455 0 : var_units="-", l_silhs=.false., grid_kind=stats_sfc )
456 0 : k = k + 1
457 :
458 : case default
459 0 : write(fstderr,*) 'Error: unrecognized variable in vars_sfc: ', &
460 0 : trim( vars_sfc(i) )
461 0 : l_error = .true. ! This will stop the run.
462 :
463 : end select
464 :
465 : end do ! 1 .. stats_sfc%num_output_fields
466 :
467 0 : return
468 :
469 : end subroutine stats_init_sfc
470 :
471 :
472 : end module stats_sfc_module
|