doc/app/idl: check_palm_output.pro

File check_palm_output.pro, 7.0 KB (added by herbort, 13 years ago)
Line 
1;#######################################################################
2;# Program language: IDL (Interactive Data Language), file-ending .pro #
3;#                                                                     #
4;# This program checks the content of netCDF-files generated by PALM   #
5;# and displays it on the standard output (console).                   #
6;# The program provides the following:                                 #
7;#  1. Variables of the netCDF-file                                    #
8;#  2. The Dimensions of the variables                                 #
9;#  3. The type of the variable (float, double, ..)                    #
10;#  4. The unit of the variable (e.g. m/s)                             #
11;# (5. In case of timeseries-data (ts) the mean time step of the run)  #
12;#                                                                     #
13;#                                                   coder: F. Herbort #
14;#######################################################################
15;                                                                      #
16; ENTER PARAMETERS:                                                    #
17; =================                                                    #
18;                                                                      #
19; Host-Identifier:                                                     #
20hostid = 'lcsgih'   ;                                                  #
21;                                                                      #
22; Name of run:                                                         #
23name_of_run = 'example_cbl'   ; sub-folder of                          #
24;                               ~/palm/current_version/JOBS            #
25; Number for restart-files:                                            #
26resnum = ' '   ; (blank if no restart-file is considered)              #
27;                                                                      #
28; Path to netCDF-file:                                                 #
29netcdf_path = '/home/herbort/palm/current_version/JOBS/'+name_of_run+'/OUTPUT/' ;#
30;                                                                      #
31; Kind of data:                                                        #
32kind_data = 'pr'   ;                                                   #
33; ts    --> timeseries                                                 #
34; pr    --> profiles                                                   #
35; sp    --> spectra                                                    #
36; xy    --> xy cross-section                                           #
37; 3d    --> 3d data                                                    #
38; 3d_av --> time-averaged 3d data                                      #
39;  .           .                                                       #
40;  .           .                                                       #
41;                                                                      #
42;#######################################################################
43
44PRINT, ' '
45PRINT, '========================================================'
46PRINT, 'Program checks content of netCDF-files generated by PALM'
47PRINT, '                                            [F. Herbort]'
48PRINT, '========================================================'
49PRINT, ' '
50
51;=======================================================================
52; Checking existence of file:
53; ---------------------------
54
55IF resnum EQ ' ' THEN datafile = hostid+'_'+name_of_run+'_'+kind_data+'.nc'
56IF resnum NE ' ' THEN datafile = hostid+'_'+name_of_run+'_'+kind_data+'.'+resnum+'.nc'
57input = netcdf_path+datafile
58
59fileyn = FILE_TEST(input)
60
61; Checking, wether filename is without hostid at the beginning of filename:
62IF fileyn EQ 0L THEN BEGIN
63IF resnum EQ ' ' THEN datafile = name_of_run+'_'+kind_data+'.nc'
64IF resnum NE ' ' THEN datafile = name_of_run+'_'+kind_data+'.'+resnum+'.nc'
65input = netcdf_path+datafile
66fileyn = FILE_TEST(input)
67ENDIF
68
69IF fileyn EQ 0L THEN BEGIN
70PRINT, 'netCDF-file does not exist!'
71PRINT, 'Program aborted'
72PRINT, ' '
73GOTO, abort_flag
74ENDIF
75
76;=======================================================================
77; Checking the netCDF-file:
78; -------------------------
79
80nid = NCDF_OPEN(input)
81
82PRINT, 'Opened netCDF-file ', input
83
84info_n = NCDF_INQUIRE(nid)
85
86PRINT, ' '
87PRINT, info_n.Nvars, ' variables existing:', FORMAT = '(I2,A20)'
88PRINT, ' '
89PRINT, 'No.         Variable              Dimensions        Type          Unit'
90PRINT, '---         --------              ----------        ----          ----'
91
92FOR n1 = 0, info_n.Nvars - 1 DO BEGIN
93vars = NCDF_VARINQ(nid,n1)
94
95dimens = vars.Ndims
96
97IF dimens EQ 0 THEN str_dims = 'scalar'
98
99IF dimens GE 1 THEN BEGIN
100
101dimarr = LONARR(dimens)
102
103FOR cc = 0, dimens - 1 DO BEGIN
104NCDF_DIMINQ, nid, vars.Dim(cc), dimename, dim_size
105
106dimarr(cc) = dim_size
107
108ENDFOR
109
110IF dimens EQ 1 THEN str_dims = '('+STRING(dimarr(0), FORMAT = '(I4)')+')'
111IF dimens EQ 1 AND kind_data EQ 'ts' THEN str_dims = '('+STRING(dimarr(0), FORMAT = '(I6)')+')'
112IF dimens EQ 2 THEN str_dims = '('+STRING(dimarr(0), FORMAT = '(I4)')+','+STRING(dimarr(1), FORMAT = '(I4)')+')'
113IF dimens EQ 3 THEN str_dims = '('+STRING(dimarr(0), FORMAT = '(I4)')+','+STRING(dimarr(1), $
114                               FORMAT = '(I4)')+','+STRING(dimarr(2), FORMAT = '(I4)')+')'
115IF dimens EQ 4 THEN str_dims = '('+STRING(dimarr(0), FORMAT = '(I4)')+','+STRING(dimarr(1), $
116                               FORMAT = '(I4)')+','+STRING(dimarr(2), FORMAT = '(I4)')+','+STRING(dimarr(3), FORMAT = '(I4)')+')'
117IF dimens GT 4 THEN str_dims = '> 4-dimensional'
118
119ENDIF
120
121attdims = vars.Natts
122
123IF attdims GE 1 THEN BEGIN
124FOR aa = 0, attdims - 1 DO BEGIN
125
126attr_name = NCDF_ATTNAME(nid,n1,aa)
127
128IF attr_name EQ 'units' THEN BEGIN
129NCDF_ATTGET, nid, n1, 'units', unit_byte
130
131res = SIZE(unit_byte, /DIMENSION)
132num_letters = res(0)
133
134unit = ''
135IF num_letters GT 0 THEN BEGIN
136FOR ll = 0, num_letters - 1 DO BEGIN
137unit = unit+STRING(unit_byte(ll))
138ENDFOR
139ENDIF
140IF num_letters EQ 0 THEN unit = STRING(unit_byte)
141
142;HELP, unit
143ENDIF
144
145ENDFOR
146ENDIF
147
148PRINT, n1+1, vars.Name, str_dims, vars.DataType, unit, FORMAT = '(I2,4X,A14,3X,A21,5X,A7,7X,A7)'
149
150IF vars.Name EQ 'time' THEN BEGIN
151NCDF_VARGET, nid, vars.Name, time
152ENDIF
153
154ENDFOR
155
156IF kind_data EQ 'ts' THEN BEGIN
157
158; Determining the mean time step of the run:
159PRINT, ' '
160dim_time = N_ELEMENTS(time)
161time_diff = FLTARR(dim_time-2L)
162time_diff(*) = time(2L:dim_time-1L) - time(1L:dim_time-2L)
163
164mean_time_step = MEAN(time_diff)
165sigma_time_step = SQRT(VARIANCE(time_diff))
166
167PRINT, ' '
168PRINT, 'Mean time step of the run: ', mean_time_step, ' s + - ', $
169sigma_time_step, ' s', FORMAT = '(A27,F4.2,A7,F4.2,A2)'
170PRINT, ' '
171
172IF dim_time GT 30 THEN BEGIN
173
174time_diff = time_diff(19L:dim_time-3L)
175
176mean_time_step = MEAN(time_diff)
177sigma_time_step = SQRT(VARIANCE(time_diff))
178
179PRINT, ' '
180PRINT, 'Mean time step of the run (but from the 20th time step): ', mean_time_step, ' s + - ', $
181sigma_time_step, ' s', FORMAT = '(A57,F4.2,A7,F4.2,A2)'
182PRINT, ' '
183
184ENDIF
185
186ENDIF
187
188
189PRINT, ' '
190
191NCDF_CLOSE, nid
192
193PRINT, 'Program finished'
194abort_flag:
195PRINT, ' '
196
197
198END