1 | ! $Id: ropp_io_types.f90 1834 2008-10-13 16:05:55Z frhl $
|
---|
2 |
|
---|
3 | module ropp_io_types
|
---|
4 |
|
---|
5 | !****m* Modules/ropp_io_types *
|
---|
6 | !
|
---|
7 | ! NAME
|
---|
8 | ! ropp_io_types - Type declarations for the ROPP IO library.
|
---|
9 | !
|
---|
10 | ! SYNOPSIS
|
---|
11 | ! use ropp_io
|
---|
12 | !
|
---|
13 | ! DESCRIPTION
|
---|
14 | ! This Fortran module supports the ROPP input / output library and provides
|
---|
15 | ! derived data types used by the ropp_io library. It must be loaded for all
|
---|
16 | ! applications using the ropp_io library / package. Note that loading the
|
---|
17 | ! ropp_io module includes the ropp_io_types module
|
---|
18 | !
|
---|
19 | ! SEE ALSO
|
---|
20 | ! ropp_io_types
|
---|
21 | ! ropp_io_init
|
---|
22 | ! ropp_io_free
|
---|
23 | ! ropp_io_read
|
---|
24 | ! ropp_io_write
|
---|
25 | !
|
---|
26 | ! AUTHOR
|
---|
27 | ! Met Office, Exeter, UK.
|
---|
28 | ! Any comments on this software should be given via the GRAS SAF
|
---|
29 | ! Helpdesk at http://www.grassaf.org
|
---|
30 | !
|
---|
31 | ! COPYRIGHT
|
---|
32 | ! (c) EUMETSAT. All rights reserved.
|
---|
33 | ! For further details please refer to the file COPYRIGHT
|
---|
34 | ! which you should have received as part of this distribution.
|
---|
35 | !
|
---|
36 | !****
|
---|
37 |
|
---|
38 | !-------------------------------------------------------------------------------
|
---|
39 | ! 1. Other modules
|
---|
40 | !-------------------------------------------------------------------------------
|
---|
41 |
|
---|
42 | use typesizes, wp => EightByteReal
|
---|
43 |
|
---|
44 | !-------------------------------------------------------------------------------
|
---|
45 | ! 2. Useful variables
|
---|
46 | !-------------------------------------------------------------------------------
|
---|
47 |
|
---|
48 | !****ip* Initialisation/ThisFmtVer
|
---|
49 | !
|
---|
50 | ! NAME
|
---|
51 | ! ThisFmtVer - Parameter describing the current implemented ROPP
|
---|
52 | ! data format version (NOT the current software
|
---|
53 | ! version of ROPP).
|
---|
54 | !
|
---|
55 | ! NOTES
|
---|
56 | ! This parameter is an internal parameter to the ropp_io library and not
|
---|
57 | ! intended to be used by users. Update the value only if the (text) file
|
---|
58 | ! format specification changes (see Ref).
|
---|
59 | !
|
---|
60 | ! REFERENCE
|
---|
61 | ! ROPP Interface File Format. SAF/GRAS/METO/FMT/ROPP/001
|
---|
62 | !
|
---|
63 | ! SOURCE
|
---|
64 | !
|
---|
65 | character (len=*), parameter :: ThisFmtVer = "ROPP I/O V1.1"
|
---|
66 | !
|
---|
67 | !****
|
---|
68 |
|
---|
69 | !****ip* Initialisation/ropp_io_ncopensep
|
---|
70 | !
|
---|
71 | ! NAME
|
---|
72 | ! ropp_io_ncopensep - Internal global variable keeping track if netCDF data
|
---|
73 | ! files have been opened separately (as opposed to
|
---|
74 | ! be opened from ropp_io_read() or ropp_io_write()).
|
---|
75 | !
|
---|
76 | ! NOTES
|
---|
77 | ! This variable is an internal variable to the ropp_io library and not
|
---|
78 | ! intended to be used by users.
|
---|
79 | !
|
---|
80 | ! SOURCE
|
---|
81 | !
|
---|
82 | logical :: ropp_io_ncopensep = .false.
|
---|
83 | !
|
---|
84 | !****
|
---|
85 |
|
---|
86 | !-------------------------------------------------------------------------------
|
---|
87 | ! 3. Missing Data Flag Value
|
---|
88 | !-------------------------------------------------------------------------------
|
---|
89 |
|
---|
90 | !****ip* Initialisation/ropp_io_mdfv
|
---|
91 | !
|
---|
92 | ! NAME
|
---|
93 | ! ropp_io_mdfv - Internal global 'Missing Data Flag/Test Value(s)'
|
---|
94 | !
|
---|
95 | ! NOTES
|
---|
96 | ! These parametres are used to indicate/test a 'missing' (invalid)
|
---|
97 | ! data value.
|
---|
98 | ! ropp_io_mdfv should be used to set invalid data for most
|
---|
99 | ! ROPP parametres, but a single universal value is not suitable for
|
---|
100 | ! all; some - e.g. (X,Y,Z) coordinate vectors - are set to zero.
|
---|
101 | ! For others, parameter-specific values may be more appropriate.
|
---|
102 | ! ropp_io_zero can be used to set parametres to zero.
|
---|
103 | ! ropp_io_mdtv can used for testing for invalid parameter values;
|
---|
104 | ! anything less than this value can be assumed to be set 'missing',
|
---|
105 | ! though again, some parametres may have specific values to test for.
|
---|
106 | ! ropp_zdtv can be used to test for (almost) zero, e.g.
|
---|
107 | ! if ( abs(value) < ropp_io_zdtv ) then ...
|
---|
108 | ! ! value can be considered to be zero
|
---|
109 | ! The values for ropp_io_mdfv and ropp_mdtv here may be changed
|
---|
110 | ! in the future when the text files are finally dead and formatting
|
---|
111 | ! limitations ceases to be an issue.
|
---|
112 | !
|
---|
113 | ! SOURCE
|
---|
114 | !
|
---|
115 | real(wp), parameter :: ropp_io_mdfv = -9999.9_wp
|
---|
116 | real(wp), parameter :: ropp_io_zero = 0.0_wp
|
---|
117 |
|
---|
118 | real(wp), parameter :: ropp_io_mdtv = -9999.0_wp
|
---|
119 | real(wp), parameter :: ropp_io_zdtv = 1e-10_wp
|
---|
120 | !
|
---|
121 | !****
|
---|
122 |
|
---|
123 | !-------------------------------------------------------------------------------
|
---|
124 | ! 4. PCD flags
|
---|
125 | !-------------------------------------------------------------------------------
|
---|
126 |
|
---|
127 | !****p* Initialisation/PCD_parametres
|
---|
128 | !
|
---|
129 | ! NAME
|
---|
130 | ! PCD parametres - Parametres for setting and testing the Product Confidence
|
---|
131 | ! Data (PCD) element of the ROprof structure.
|
---|
132 | !
|
---|
133 | ! SOURCE
|
---|
134 | !
|
---|
135 | integer, parameter :: PCD_summary = 0 ! Nominal / non-nominal quality
|
---|
136 | integer, parameter :: PCD_offline = 1 ! NRT / offline product
|
---|
137 | integer, parameter :: PCD_rising = 2 ! Setting / rising occultation
|
---|
138 | integer, parameter :: PCD_phase = 3 ! Phase processing nominal / non-nominal
|
---|
139 | integer, parameter :: PCD_bangle = 4 ! Bending angle proc. nominal / non-nominal
|
---|
140 | integer, parameter :: PCD_refrac = 5 ! Refractivity proc. nominal / non-nominal
|
---|
141 | integer, parameter :: PCD_met = 6 ! Meteorological. proc. nominal / non-nominal
|
---|
142 | integer, parameter :: PCD_open_loop = 7 ! Open Loop data used no / yes
|
---|
143 | integer, parameter :: PCD_reflections = 8 ! Surface reflections detected no / yes
|
---|
144 | integer, parameter :: PCD_l2_signal = 9 ! L2 GPS signal used L2P / L2C
|
---|
145 | integer, parameter :: PCD_reserved_11 = 10 ! Reserved
|
---|
146 | integer, parameter :: PCD_reserved_12 = 11 ! Reserved
|
---|
147 | integer, parameter :: PCD_reserved_13 = 12 ! Reserved
|
---|
148 | integer, parameter :: PCD_bg = 13 ! Background profile nominal / non-nominal
|
---|
149 | integer, parameter :: PCD_occultation = 14 ! Occultation / background profile
|
---|
150 | integer, parameter :: PCD_missing = 15 ! PCD missing
|
---|
151 | !
|
---|
152 | !****
|
---|
153 |
|
---|
154 | !-------------------------------------------------------------------------------
|
---|
155 | ! 4. Date and time
|
---|
156 | !-------------------------------------------------------------------------------
|
---|
157 |
|
---|
158 | !****d* Datatypes/DT7units
|
---|
159 | !
|
---|
160 | ! NAME
|
---|
161 | ! DT7units - A sub-structure of the DT7type structure, defining units.
|
---|
162 | !
|
---|
163 | ! SOURCE
|
---|
164 | !
|
---|
165 | type DT7units
|
---|
166 | character(len = 64) :: year = "years"
|
---|
167 | character(len = 64) :: month = "months"
|
---|
168 | character(len = 64) :: day = "days"
|
---|
169 | character(len = 64) :: hour = "hours"
|
---|
170 | character(len = 64) :: minute = "minutes"
|
---|
171 | character(len = 64) :: second = "seconds"
|
---|
172 | character(len = 64) :: msec = "milliseconds"
|
---|
173 | end type DT7units
|
---|
174 | !
|
---|
175 | !****
|
---|
176 |
|
---|
177 | !****d* Datatypes/DT7range
|
---|
178 | !
|
---|
179 | ! NAME
|
---|
180 | ! DT7range - A sub-structure of the DT7type structure, setting valid ranges.
|
---|
181 | !
|
---|
182 | ! SOURCE
|
---|
183 | !
|
---|
184 | type DT7range
|
---|
185 | integer, dimension(2) :: year = (/1995, 2099/)
|
---|
186 | integer, dimension(2) :: month = (/ 01, 12/)
|
---|
187 | integer, dimension(2) :: day = (/ 01, 31/)
|
---|
188 | integer, dimension(2) :: hour = (/ 00, 23/)
|
---|
189 | integer, dimension(2) :: minute = (/ 00, 59/)
|
---|
190 | integer, dimension(2) :: second = (/ 00, 59/)
|
---|
191 | integer, dimension(2) :: msec = (/ 00, 999/)
|
---|
192 | end type DT7range
|
---|
193 | !
|
---|
194 | !****
|
---|
195 |
|
---|
196 | !****d* Datatypes/DT7type
|
---|
197 | !
|
---|
198 | ! NAME
|
---|
199 | ! DT7types - A sub-structure of the ROprofs structure for date information.
|
---|
200 | !
|
---|
201 | ! SOURCE
|
---|
202 | !
|
---|
203 | type DT7type
|
---|
204 | integer :: year = 9999
|
---|
205 | integer :: month = 99
|
---|
206 | integer :: day = 99
|
---|
207 | integer :: hour = 99
|
---|
208 | integer :: minute = 99
|
---|
209 | integer :: second = 99
|
---|
210 | integer :: msec = 999
|
---|
211 | type(DT7units) :: units
|
---|
212 | type(DT7range) :: range
|
---|
213 | end type DT7type
|
---|
214 | !
|
---|
215 | !****
|
---|
216 |
|
---|
217 | !-------------------------------------------------------------------------------
|
---|
218 | ! 5. Georeferencing of the profile
|
---|
219 | !-------------------------------------------------------------------------------
|
---|
220 |
|
---|
221 | !****d* Datatypes/GEOunits
|
---|
222 | !
|
---|
223 | ! NAME
|
---|
224 | ! GEOunits - A sub-structure of the GEOtype structure, setting units.
|
---|
225 | !
|
---|
226 | ! SOURCE
|
---|
227 | !
|
---|
228 | type GEOunits
|
---|
229 | character(len = 64) :: time_offset = "seconds"
|
---|
230 | character(len = 64) :: lat = "degrees_north"
|
---|
231 | character(len = 64) :: lon = "degrees_east"
|
---|
232 | character(len = 64) :: roc = "metres"
|
---|
233 | character(len = 64) :: r_coc = "metres"
|
---|
234 | character(len = 64) :: azimuth = "degrees_T"
|
---|
235 | character(len = 64) :: undulation = "metres"
|
---|
236 | end type GEOunits
|
---|
237 | !
|
---|
238 | !****
|
---|
239 |
|
---|
240 | !****d* Datatypes/GEOrange
|
---|
241 | !
|
---|
242 | ! NAME
|
---|
243 | ! GEOrange - A sub-structure of the GEOtype structure, setting valid ranges.
|
---|
244 | !
|
---|
245 | ! SOURCE
|
---|
246 | !
|
---|
247 | type GEOrange
|
---|
248 | real(wp), dimension(2) :: time_offset = (/0.0_wp, 239.999_wp/)
|
---|
249 | real(wp), dimension(2) :: lat = (/ -90.0_wp, 90.0_wp/)
|
---|
250 | real(wp), dimension(2) :: lon = (/-180.0_wp, 180.0_wp/)
|
---|
251 | real(wp), dimension(2) :: roc = (/ 6.2e6_wp, 6.6e6_wp/)
|
---|
252 | real(wp), dimension(2) :: r_coc = (/-5.0e4_wp, 5.0e4_wp/)
|
---|
253 | real(wp), dimension(2) :: azimuth = (/ 0.0_wp, 360.0_wp/)
|
---|
254 | real(wp), dimension(2) :: undulation = (/-150.0_wp, 150.0_wp/)
|
---|
255 | end type GEOrange
|
---|
256 | !
|
---|
257 | !****
|
---|
258 |
|
---|
259 | !****d* Datatypes/GEOref
|
---|
260 | !
|
---|
261 | ! NAME
|
---|
262 | ! GEOref - A sub-structure of the GEOtype structure, defining the reference frame
|
---|
263 | ! for the centre of curvature.
|
---|
264 | !
|
---|
265 | ! SOURCE
|
---|
266 | !
|
---|
267 | type GEOref
|
---|
268 | character(len = 3) :: r_coc = 'ECF'
|
---|
269 | end type GEOref
|
---|
270 | !
|
---|
271 | !****
|
---|
272 |
|
---|
273 | !****d* Datatypes/GEOtype
|
---|
274 | !
|
---|
275 | ! NAME
|
---|
276 | ! GEOtype - A sub-structure of the ROprof structure, describing the georeferencing
|
---|
277 | ! a given profile.
|
---|
278 | !
|
---|
279 | ! SOURCE
|
---|
280 | !
|
---|
281 | type GEOtype
|
---|
282 | real(wp) :: time_offset = ropp_io_zero ! Time since start (s)
|
---|
283 | real(wp) :: lat = ropp_io_mdfv ! Latitude (deg)
|
---|
284 | real(wp) :: lon = ropp_io_mdfv ! Longitude (deg)
|
---|
285 | real(wp) :: roc = ropp_io_mdfv ! RoC value (m)
|
---|
286 | real(wp), dimension(3) :: r_coc = ropp_io_zero ! RoC offset X,Y,Z vector (m)
|
---|
287 | real(wp) :: azimuth = ropp_io_mdfv ! GNSS->LEO line of sight angle (degT)
|
---|
288 | real(wp) :: undulation = ropp_io_mdfv ! Geoid undulation (EGM96-WGS84) (m)
|
---|
289 | type(GEOunits) :: units
|
---|
290 | type(GEOrange) :: range
|
---|
291 | type(GEOref) :: reference_frame
|
---|
292 | end type GEOtype
|
---|
293 | !
|
---|
294 | !****
|
---|
295 |
|
---|
296 | !-------------------------------------------------------------------------------
|
---|
297 | ! 6. Background meta data
|
---|
298 | !-------------------------------------------------------------------------------
|
---|
299 |
|
---|
300 | !****d* Datatypes/BGunits
|
---|
301 | !
|
---|
302 | ! NAME
|
---|
303 | ! BGunits - A sub-structure of the BGtype structure, defining units.
|
---|
304 | !
|
---|
305 | ! SOURCE
|
---|
306 | !
|
---|
307 | type BGunits
|
---|
308 | character(len = 64) :: year = "years"
|
---|
309 | character(len = 64) :: month = "months"
|
---|
310 | character(len = 64) :: day = "days"
|
---|
311 | character(len = 64) :: hour = "hours"
|
---|
312 | character(len = 64) :: minute = "minutes"
|
---|
313 | character(len = 64) :: fcPeriod = "hours"
|
---|
314 | end type BGunits
|
---|
315 | !
|
---|
316 | !****
|
---|
317 |
|
---|
318 | !****d* Datatypes/BGrange
|
---|
319 | !
|
---|
320 | ! NAME
|
---|
321 | ! BGrange - A sub-structure of the BGtype structure, setting valid ranges.
|
---|
322 | !
|
---|
323 | ! SOURCE
|
---|
324 | !
|
---|
325 | type BGrange
|
---|
326 | integer, dimension(2) :: year = (/1995, 2099/)
|
---|
327 | integer, dimension(2) :: month = (/ 01, 12/)
|
---|
328 | integer, dimension(2) :: day = (/ 01, 31/)
|
---|
329 | integer, dimension(2) :: hour = (/ 00, 23/)
|
---|
330 | integer, dimension(2) :: minute = (/ 00, 59/)
|
---|
331 | real(wp), dimension(2) :: fcperiod = (/ 00.0_wp, 24.0_wp/)
|
---|
332 | end type BGrange
|
---|
333 | !
|
---|
334 | !****
|
---|
335 |
|
---|
336 | !****d* Datatypes/BGtype
|
---|
337 | !
|
---|
338 | ! NAME
|
---|
339 | ! BGunits - A sub-structure of the ROprof structure, describing background (as used
|
---|
340 | ! in the retrieval) meta data.
|
---|
341 | !
|
---|
342 | ! SOURCE
|
---|
343 | !
|
---|
344 | type BGtype
|
---|
345 | character(len = 20) :: source = 'NONE' ! Source of b/g profile
|
---|
346 | integer :: year = 9999 ! VT year of b/g
|
---|
347 | integer :: month = 99 ! VT month of b/g
|
---|
348 | integer :: day = 99 ! VT day of b/g
|
---|
349 | integer :: hour = 99 ! VT hour of b/g
|
---|
350 | integer :: minute = 99 ! VT minute of b/g
|
---|
351 | real(wp) :: fcperiod = 999.9 ! F/c period (hrs)
|
---|
352 | type(BGunits) :: units
|
---|
353 | type(BGrange) :: range
|
---|
354 | end type BGtype
|
---|
355 | !
|
---|
356 | !****
|
---|
357 |
|
---|
358 | !-------------------------------------------------------------------------------
|
---|
359 | ! 7. Level 1a - Orbits, phases and amplitudes
|
---|
360 | !-------------------------------------------------------------------------------
|
---|
361 |
|
---|
362 | !****d* Datatypes/L1aunits
|
---|
363 | !
|
---|
364 | ! NAME
|
---|
365 | ! L1aunits - A sub-structure of the L1atype structure, defining units.
|
---|
366 | !
|
---|
367 | ! SOURCE
|
---|
368 | !
|
---|
369 | type L1aunits
|
---|
370 | character(len = 64) :: dtime = "seconds"
|
---|
371 | character(len = 64) :: snr = "volt / volt"
|
---|
372 | character(len = 64) :: phase = "metres"
|
---|
373 | character(len = 64) :: r_gns = "metres"
|
---|
374 | character(len = 64) :: v_gns = "metres / seconds"
|
---|
375 | character(len = 64) :: r_leo = "metres"
|
---|
376 | character(len = 64) :: v_leo = "metres / seconds"
|
---|
377 | character(len = 64) :: phase_qual = "percent"
|
---|
378 | end type L1aunits
|
---|
379 | !
|
---|
380 | !****
|
---|
381 |
|
---|
382 | !****d* Datatypes/L1arange
|
---|
383 | !
|
---|
384 | ! NAME
|
---|
385 | ! L1arange - A sub-structure of the L1atype structure, setting valid ranges.
|
---|
386 | !
|
---|
387 | ! SOURCE
|
---|
388 | !
|
---|
389 | type L1arange
|
---|
390 | real(wp), dimension(2) :: dtime = (/ 0.0_wp, 239.999_wp/)
|
---|
391 | real(wp), dimension(2) :: snr = (/ 0.0_wp, 2000.0_wp/)
|
---|
392 | real(wp), dimension(2) :: phase = (/-9999.0_wp, 10000.0_wp/)
|
---|
393 | real(wp), dimension(2) :: r_gns = (/-43.0e6_wp, 43.0e6_wp/)
|
---|
394 | real(wp), dimension(2) :: v_gns = (/ -1.0e4_wp, 1.0e4_wp/)
|
---|
395 | real(wp), dimension(2) :: r_leo = (/-10.0e6_wp, 10.0e6_wp/)
|
---|
396 | real(wp), dimension(2) :: v_leo = (/ -1.0e4_wp, 1.0e4_wp/)
|
---|
397 | real(wp), dimension(2) :: phase_qual = (/ 0.0_wp, 100.0_wp/)
|
---|
398 | end type L1arange
|
---|
399 | !
|
---|
400 | !****
|
---|
401 |
|
---|
402 | !****d* Datatypes/L1aref
|
---|
403 | !
|
---|
404 | ! NAME
|
---|
405 | ! L1aref - A sub-structure of the L1atype structure, defining the reference frame
|
---|
406 | ! for POD data.
|
---|
407 | !
|
---|
408 | ! SOURCE
|
---|
409 | !
|
---|
410 | type L1aref
|
---|
411 | character(len = 3) :: r_gns = "ECF"
|
---|
412 | character(len = 3) :: v_gns = "ECI"
|
---|
413 | character(len = 3) :: r_leo = "ECF"
|
---|
414 | character(len = 3) :: v_leo = "ECI"
|
---|
415 | end type L1aref
|
---|
416 | !
|
---|
417 | !****
|
---|
418 |
|
---|
419 | !****d* Datatypes/L1atype
|
---|
420 | !
|
---|
421 | ! NAME
|
---|
422 | ! L1atype - A sub-structure of the ROprof structure, containing amplitude, phase and
|
---|
423 | ! POD data.
|
---|
424 | !
|
---|
425 | ! SOURCE
|
---|
426 | !
|
---|
427 | type L1atype
|
---|
428 | integer :: Npoints = 0 ! No. of samples in L1a profile
|
---|
429 | real(wp), dimension(:), pointer :: dtime => null() ! Time since start (s)
|
---|
430 | real(wp), dimension(:), pointer :: snr_L1ca => null() ! Signal-to-noise ratio - L1 (V/V)
|
---|
431 | real(wp), dimension(:), pointer :: snr_L1p => null() ! Signal-to-noise ratio - L1 (V/V)
|
---|
432 | real(wp), dimension(:), pointer :: snr_L2p => null() ! Signal-to-noise ratio - L1 (V/V)
|
---|
433 | real(wp), dimension(:), pointer :: phase_L1 => null() ! Excess phase - L1 (m)
|
---|
434 | real(wp), dimension(:), pointer :: phase_L2 => null() ! Excess phase - L2 (m)
|
---|
435 | real(wp), dimension(:,:), pointer :: r_gns => null() ! GNSS position (m)
|
---|
436 | real(wp), dimension(:,:), pointer :: v_gns => null() ! GNSS velocity (m/s)
|
---|
437 | real(wp), dimension(:,:), pointer :: r_leo => null() ! LEO position (m)
|
---|
438 | real(wp), dimension(:,:), pointer :: v_leo => null() ! LEO velocity (m/s)
|
---|
439 | real(wp), dimension(:), pointer :: phase_qual => null() ! Quality value (%)
|
---|
440 | type(L1aunits) :: units
|
---|
441 | type(L1arange) :: range
|
---|
442 | type(L1aref) :: reference_frame
|
---|
443 | end type L1atype
|
---|
444 | !
|
---|
445 | !****
|
---|
446 |
|
---|
447 | !-------------------------------------------------------------------------------
|
---|
448 | ! 8. Level 1b - Bending angles and impact parametres
|
---|
449 | !-------------------------------------------------------------------------------
|
---|
450 |
|
---|
451 | !****d* Datatypes/L1bunits
|
---|
452 | !
|
---|
453 | ! NAME
|
---|
454 | ! L1bunits - A sub-structure of the L1btype structure, defining units.
|
---|
455 | !
|
---|
456 | ! SOURCE
|
---|
457 | !
|
---|
458 | type L1bunits
|
---|
459 | character(len = 64) :: lat_tp = "degrees_north"
|
---|
460 | character(len = 64) :: lon_tp = "degrees_east"
|
---|
461 | character(len = 64) :: azimuth_tp = "degrees"
|
---|
462 | character(len = 64) :: impact = "metres"
|
---|
463 | character(len = 64) :: bangle = "radians"
|
---|
464 | character(len = 64) :: bangle_sigma = "radians"
|
---|
465 | character(len = 64) :: bangle_qual = "percent"
|
---|
466 | end type L1bunits
|
---|
467 | !
|
---|
468 | !****
|
---|
469 |
|
---|
470 | !****d* Datatypes/L1brange
|
---|
471 | !
|
---|
472 | ! NAME
|
---|
473 | ! L1brange - A sub-structure of the L1btype structure, setting valid ranges.
|
---|
474 | !
|
---|
475 | ! SOURCE
|
---|
476 | !
|
---|
477 | type L1brange
|
---|
478 | real(wp), dimension(2) :: lat_tp = (/ -90.0_wp, 90.0_wp/)
|
---|
479 | real(wp), dimension(2) :: lon_tp = (/-180.0_wp, 180.0_wp/)
|
---|
480 | real(wp), dimension(2) :: azimuth_tp = (/ 0.0_wp, 360.0_wp/)
|
---|
481 | real(wp), dimension(2) :: impact = (/ 6.2e6_wp, 6.6e6_wp/)
|
---|
482 | real(wp), dimension(2) :: bangle = (/ -0.001_wp, 0.1_wp/)
|
---|
483 | real(wp), dimension(2) :: bangle_sigma = (/ 0.0_wp, 0.01_wp/)
|
---|
484 | real(wp), dimension(2) :: bangle_qual = (/ 0.0_wp, 100.0_wp/)
|
---|
485 | end type L1brange
|
---|
486 | !
|
---|
487 | !****
|
---|
488 |
|
---|
489 | !****d* Datatypes/L1bType
|
---|
490 | !
|
---|
491 | ! NAME
|
---|
492 | ! L1btype - A sub-structure of the ROprof structure, containing bending angle and
|
---|
493 | ! impact parameter data.
|
---|
494 | !
|
---|
495 | ! SOURCE
|
---|
496 | !
|
---|
497 | type L1btype
|
---|
498 | integer :: Npoints = 0 ! No. of samples in L1b profile
|
---|
499 | real(wp), dimension(:), pointer :: lat_tp => null() ! Latitude (deg)
|
---|
500 | real(wp), dimension(:), pointer :: lon_tp => null() ! Longitude (deg)
|
---|
501 | real(wp), dimension(:), pointer :: azimuth_tp => null() ! GNSS->LEO line of sight angle (degT)
|
---|
502 | real(wp), dimension(:), pointer :: impact_L1 => null() ! Impact param - L1 (m)
|
---|
503 | real(wp), dimension(:), pointer :: impact_L2 => null() ! Impact param - L2 (m)
|
---|
504 | real(wp), dimension(:), pointer :: impact => null() ! Impact param - corr (m)
|
---|
505 | real(wp), dimension(:), pointer :: impact_Opt => null() ! Impact param - opt (m)
|
---|
506 | real(wp), dimension(:), pointer :: bangle_L1 => null() ! Bending angle - L1 (rad)
|
---|
507 | real(wp), dimension(:), pointer :: bangle_L2 => null() ! Bending angle - L2 (rad)
|
---|
508 | real(wp), dimension(:), pointer :: bangle => null() ! Bending angle - corr (rad)
|
---|
509 | real(wp), dimension(:), pointer :: bangle_Opt => null() ! Bending angle - opt (rad)
|
---|
510 | real(wp), dimension(:), pointer :: bangle_L1_sigma => null() ! Error in BA - L1 (rad)
|
---|
511 | real(wp), dimension(:), pointer :: bangle_L2_sigma => null() ! Error in BA - L2 (rad)
|
---|
512 | real(wp), dimension(:), pointer :: bangle_sigma => null() ! Error in BA - corr (rad)
|
---|
513 | real(wp), dimension(:), pointer :: bangle_Opt_sigma => null() ! Error in BA - opt (rad)
|
---|
514 | real(wp), dimension(:), pointer :: bangle_L1_qual => null() ! Quality values - L1 (%)
|
---|
515 | real(wp), dimension(:), pointer :: bangle_L2_qual => null() ! Quality values - L2 (%)
|
---|
516 | real(wp), dimension(:), pointer :: bangle_qual => null() ! Quality values - corr (%)
|
---|
517 | real(wp), dimension(:), pointer :: bangle_Opt_qual => null() ! Quality values - opt (%)
|
---|
518 | type(L1bunits) :: units
|
---|
519 | type(L1brange) :: range
|
---|
520 | end type L1btype
|
---|
521 | !
|
---|
522 | !****
|
---|
523 |
|
---|
524 | !-------------------------------------------------------------------------------
|
---|
525 | ! 9. Level 2a - Refractivity
|
---|
526 | !-------------------------------------------------------------------------------
|
---|
527 |
|
---|
528 | !****d* Datatypes/L2aunits
|
---|
529 | !
|
---|
530 | ! NAME
|
---|
531 | ! L2aunits - A sub-structure of the L2atype structure, defining units.
|
---|
532 | !
|
---|
533 | ! SOURCE
|
---|
534 | !
|
---|
535 | type L2aunits
|
---|
536 | character(len = 64) :: alt_refrac = "metres"
|
---|
537 | character(len = 64) :: geop_refrac = "geopotential metres"
|
---|
538 | character(len = 64) :: refrac = "N-units"
|
---|
539 | character(len = 64) :: refrac_sigma = "N-units"
|
---|
540 | character(len = 64) :: refrac_qual = "percent"
|
---|
541 | end type L2aunits
|
---|
542 | !
|
---|
543 | !****
|
---|
544 |
|
---|
545 | !****d* Datatypes/L2arange
|
---|
546 | !
|
---|
547 | ! NAME
|
---|
548 | ! L2arange - A sub-structure of the L2atype structure, setting valid ranges.
|
---|
549 | !
|
---|
550 | ! SOURCE
|
---|
551 | !
|
---|
552 | type L2arange
|
---|
553 | real(wp), dimension(2) :: alt_refrac = (/-1.0e3_wp, 1.0e5_wp/)
|
---|
554 | real(wp), dimension(2) :: geop_refrac = (/-1.0e3_wp, 1.0e5_wp/)
|
---|
555 | real(wp), dimension(2) :: refrac = (/ 0.0_wp, 500.0_wp/)
|
---|
556 | real(wp), dimension(2) :: refrac_sigma = (/ 0.0_wp, 10.0_wp/)
|
---|
557 | real(wp), dimension(2) :: refrac_qual = (/ 0.0_wp, 100.0_wp/)
|
---|
558 | end type L2arange
|
---|
559 | !
|
---|
560 | !****
|
---|
561 |
|
---|
562 | !****d* Datatypes/L2atype
|
---|
563 | !
|
---|
564 | ! NAME
|
---|
565 | ! L2atype - A sub-structure of the ROprof structure, containing refractivity, altitude
|
---|
566 | ! and geopotential height data.
|
---|
567 | !
|
---|
568 | ! SOURCE
|
---|
569 | !
|
---|
570 | type L2atype
|
---|
571 | integer :: Npoints = 0 ! No. of samples in L2a profile
|
---|
572 | real(wp), dimension(:), pointer :: alt_refrac => null() ! Geometric height (m)
|
---|
573 | real(wp), dimension(:), pointer :: geop_refrac => null() ! Geopotential height (m)
|
---|
574 | real(wp), dimension(:), pointer :: refrac => null() ! Refractivity (N-units)
|
---|
575 | real(wp), dimension(:), pointer :: refrac_sigma => null() ! Est. error in refractivity (N-units)
|
---|
576 | real(wp), dimension(:), pointer :: refrac_qual => null() ! Quality value (%)
|
---|
577 | type(L2aunits) :: units
|
---|
578 | type(L2arange) :: range
|
---|
579 | end type L2atype
|
---|
580 | !
|
---|
581 | !****
|
---|
582 |
|
---|
583 | !-------------------------------------------------------------------------------
|
---|
584 | ! 10. Level 2b - Meteorological quantities
|
---|
585 | !-------------------------------------------------------------------------------
|
---|
586 |
|
---|
587 | !****d* Datatypes/L2bunits
|
---|
588 | !
|
---|
589 | ! NAME
|
---|
590 | ! L2bunits - A sub-structure of the L2btype structure, defining units.
|
---|
591 | !
|
---|
592 | ! SOURCE
|
---|
593 | !
|
---|
594 | type L2bunits
|
---|
595 | character(len = 64) :: geop = "geopotential metres"
|
---|
596 | character(len = 64) :: geop_sigma = "geopotential metres"
|
---|
597 | character(len = 64) :: press = "hPa"
|
---|
598 | character(len = 64) :: press_sigma = "hPa"
|
---|
599 | character(len = 64) :: temp = "kelvin"
|
---|
600 | character(len = 64) :: temp_sigma = "kelvin"
|
---|
601 | character(len = 64) :: shum = "gram / kilogram"
|
---|
602 | character(len = 64) :: shum_sigma = "gram / kilogram"
|
---|
603 | character(len = 64) :: meteo_qual = "percent"
|
---|
604 | end type L2bunits
|
---|
605 | !
|
---|
606 | !****
|
---|
607 |
|
---|
608 | !****d* Datatypes/L2brange
|
---|
609 | !
|
---|
610 | ! NAME
|
---|
611 | ! L2brange - A sub-structure of the L2btype structure, setting valid ranges.
|
---|
612 | !
|
---|
613 | ! SOURCE
|
---|
614 | !
|
---|
615 | type L2brange
|
---|
616 | real(wp), dimension(2) :: geop = (/ -1.0e3_wp, 1.0e5_wp/)
|
---|
617 | real(wp), dimension(2) :: geop_sigma = (/ 0.0_wp, 500.0_wp/)
|
---|
618 | real(wp), dimension(2) :: press = (/ 0.01_wp, 1100.0_wp/)
|
---|
619 | real(wp), dimension(2) :: press_sigma = (/ 0.0_wp, 5.0_wp/)
|
---|
620 | real(wp), dimension(2) :: temp = (/150.0_wp, 350.0_wp/)
|
---|
621 | real(wp), dimension(2) :: temp_sigma = (/ 0.0_wp, 5.0_wp/)
|
---|
622 | real(wp), dimension(2) :: shum = (/ 0.0_wp, 50.0_wp/)
|
---|
623 | real(wp), dimension(2) :: shum_sigma = (/ 0.0_wp, 5.0_wp/)
|
---|
624 | real(wp), dimension(2) :: meteo_qual = (/ 0.0_wp, 100.0_wp/)
|
---|
625 | end type L2brange
|
---|
626 | !
|
---|
627 | !****
|
---|
628 |
|
---|
629 | !****d* Datatypes/L2btype
|
---|
630 | !
|
---|
631 | ! NAME
|
---|
632 | ! L2btype - A sub-structure of the ROprof structure, containing meteorological (i.e.
|
---|
633 | ! temperature, pressure, (specific) humidity and geopotential height data.
|
---|
634 | !
|
---|
635 | ! SOURCE
|
---|
636 | !
|
---|
637 | type L2btype
|
---|
638 | integer :: Npoints = 0 ! No. of samples in L2b profile
|
---|
639 | real(wp), dimension(:), pointer :: geop => null() ! Geopotential height (m)
|
---|
640 | real(wp), dimension(:), pointer :: geop_sigma => null() ! Est. Error in geopotential height (m)
|
---|
641 | real(wp), dimension(:), pointer :: press => null() ! Pressure (hPa)
|
---|
642 | real(wp), dimension(:), pointer :: press_sigma => null() ! Est. Error in pressure (hPa)
|
---|
643 | real(wp), dimension(:), pointer :: temp => null() ! Temperature (K)
|
---|
644 | real(wp), dimension(:), pointer :: temp_sigma => null() ! Est. error in temperature (K)
|
---|
645 | real(wp), dimension(:), pointer :: shum => null() ! Specific humidity (g/Kg)
|
---|
646 | real(wp), dimension(:), pointer :: shum_sigma => null() ! Est. error in SH (g/Kg)
|
---|
647 | real(wp), dimension(:), pointer :: meteo_qual => null() ! Quality value (%)
|
---|
648 | type(L2bunits) :: units
|
---|
649 | type(L2brange) :: range
|
---|
650 | end type L2btype
|
---|
651 | !
|
---|
652 | !****
|
---|
653 |
|
---|
654 | !-------------------------------------------------------------------------------
|
---|
655 | ! 11. Level 2c - Meteorological surface quantities
|
---|
656 | !-------------------------------------------------------------------------------
|
---|
657 |
|
---|
658 | !****d* Datatypes/L2cunits
|
---|
659 | !
|
---|
660 | ! NAME
|
---|
661 | ! L2cunits - A sub-structure of the L2ctype structure, defining units.
|
---|
662 | !
|
---|
663 | ! SOURCE
|
---|
664 | !
|
---|
665 | type L2cunits
|
---|
666 | character(len = 64) :: geop_sfc = "geopotential metres"
|
---|
667 | character(len = 64) :: press_sfc = "hPa"
|
---|
668 | character(len = 64) :: press_sfc_sigma = "hPa"
|
---|
669 | character(len = 64) :: press_sfc_qual = "percent"
|
---|
670 | end type L2cunits
|
---|
671 | !
|
---|
672 | !****
|
---|
673 |
|
---|
674 | !****d* Datatypes/L2crange
|
---|
675 | !
|
---|
676 | ! NAME
|
---|
677 | ! L2crange - A sub-structure of the L2ctype structure, setting valid ranges.
|
---|
678 | !
|
---|
679 | ! SOURCE
|
---|
680 | !
|
---|
681 | type L2crange
|
---|
682 | real(wp), dimension(2) :: geop_sfc = (/ -1.0e3_wp, 1.0e4_wp/)
|
---|
683 | real(wp), dimension(2) :: press_sfc = (/250.0_wp, 1100.0_wp/)
|
---|
684 | real(wp), dimension(2) :: press_sfc_sigma = (/ 0.0_wp, 5.0_wp/)
|
---|
685 | real(wp), dimension(2) :: press_sfc_qual = (/ 0.0_wp, 100.0_wp/)
|
---|
686 | end type L2crange
|
---|
687 | !
|
---|
688 | !****
|
---|
689 |
|
---|
690 | !****d* Datatypes/L2ctype
|
---|
691 | !
|
---|
692 | ! NAME
|
---|
693 | ! L2ctype - A sub-structure of the ROprof structure, containing meteorological
|
---|
694 | ! surface pressure.
|
---|
695 | !
|
---|
696 | ! SOURCE
|
---|
697 | !
|
---|
698 | type L2ctype
|
---|
699 | integer :: Npoints = 0 ! No. of samples in profile (0 or 1)
|
---|
700 | real(wp) :: geop_sfc = ropp_io_mdfv ! Geopotential height of surface (m)
|
---|
701 | real(wp) :: press_sfc = ropp_io_mdfv ! Surface pressure (hPa)
|
---|
702 | real(wp) :: press_sfc_sigma = ropp_io_mdfv ! Est. error in surface pressure (hPa)
|
---|
703 | real(wp) :: press_sfc_qual = ropp_io_mdfv ! Quality value for L2b+c (%)
|
---|
704 | type(L2cunits) :: units
|
---|
705 | type(L2crange) :: range
|
---|
706 | end type L2ctype
|
---|
707 | !
|
---|
708 | !****
|
---|
709 |
|
---|
710 | !-------------------------------------------------------------------------------
|
---|
711 | ! 12. Level 2d - Meteorological model level coefficients
|
---|
712 | !-------------------------------------------------------------------------------
|
---|
713 |
|
---|
714 | !****d* Datatypes/L2dunits
|
---|
715 | !
|
---|
716 | ! NAME
|
---|
717 | ! L2dunits - A sub-structure of the L2dtype structure, defining units.
|
---|
718 | !
|
---|
719 | ! SOURCE
|
---|
720 | !
|
---|
721 | type L2dunits
|
---|
722 | character(len = 40) :: level_coeff_a = 'hPa'
|
---|
723 | character(len = 40) :: level_coeff_b = ''
|
---|
724 | end type L2dunits
|
---|
725 | !
|
---|
726 | !****
|
---|
727 |
|
---|
728 | !****d* Datatypes/L2drange
|
---|
729 | !
|
---|
730 | ! NAME
|
---|
731 | ! L2drange - A sub-structure of the L2dtype structure, setting valid ranges.
|
---|
732 | !
|
---|
733 | ! SOURCE
|
---|
734 | !
|
---|
735 | type L2drange
|
---|
736 | real(wp), dimension(2) :: level_coeff_a = (/ 0.0_wp, 2000.0_wp/)
|
---|
737 | real(wp), dimension(2) :: level_coeff_b = (/ 0.0_wp, 2.0_wp/)
|
---|
738 | end type L2drange
|
---|
739 | !
|
---|
740 | !****
|
---|
741 |
|
---|
742 | !****d* Datatypes/L2dtype
|
---|
743 | !
|
---|
744 | ! NAME
|
---|
745 | ! L2dtype - A sub-structure of the ROprof structure, containing the defining
|
---|
746 | ! coefficients for vertical hybrid or eta-type level structures.
|
---|
747 | !
|
---|
748 | ! SOURCE
|
---|
749 | !
|
---|
750 | type L2dtype
|
---|
751 | integer :: Npoints = 0
|
---|
752 | character(len = 64) :: level_type = "UNKNOWN"
|
---|
753 | real(wp), dimension(:), pointer :: level_coeff_a => null() ! Model level coefficients
|
---|
754 | real(wp), dimension(:), pointer :: level_coeff_b => null()
|
---|
755 | type(L2dunits) :: units
|
---|
756 | type(L2drange) :: range
|
---|
757 | end type L2dtype
|
---|
758 | !
|
---|
759 | !****
|
---|
760 |
|
---|
761 | !-------------------------------------------------------------------------------
|
---|
762 | ! 13. Variable lists
|
---|
763 | !-------------------------------------------------------------------------------
|
---|
764 |
|
---|
765 | !****id* Datatypes/VlisttypeD0d
|
---|
766 | !
|
---|
767 | ! NAME
|
---|
768 | ! VlisttypeD0d - Variable list for scalar double precision variables.
|
---|
769 | !
|
---|
770 | ! NOTES
|
---|
771 | ! This parameter is an internal parameter to the ropp_io library and not
|
---|
772 | ! intended to be used by users.
|
---|
773 | !
|
---|
774 | ! SOURCE
|
---|
775 | !
|
---|
776 | type VlisttypeD0d
|
---|
777 | character(len = 1024) :: name = ""
|
---|
778 | character(len = 1024) :: long_name = ""
|
---|
779 | character(len = 1024) :: units = ""
|
---|
780 | real(wp), dimension(2) :: range = (/ ropp_io_mdfv, &
|
---|
781 | ropp_io_mdfv /)
|
---|
782 | real(wp) :: data
|
---|
783 | type(VlisttypeD0d), pointer :: next => null()
|
---|
784 | end type VlisttypeD0d
|
---|
785 | !
|
---|
786 | !****
|
---|
787 |
|
---|
788 | !****id* Datatypes/VlisttypeD1d
|
---|
789 | !
|
---|
790 | ! NAME
|
---|
791 | ! VlisttypeD1d - Variable list for one-dimensional double precision
|
---|
792 | ! variables.
|
---|
793 | !
|
---|
794 | ! NOTES
|
---|
795 | ! This parameter is an internal parameter to the ropp_io library and not
|
---|
796 | ! intended to be used by users.
|
---|
797 | !
|
---|
798 | ! SOURCE
|
---|
799 | !
|
---|
800 | type VlisttypeD1d
|
---|
801 | character(len = 1024) :: name = ""
|
---|
802 | character(len = 1024) :: long_name = ""
|
---|
803 | character(len = 1024) :: units = ""
|
---|
804 | real(wp), dimension(2) :: range = (/ ropp_io_mdfv, &
|
---|
805 | ropp_io_mdfv /)
|
---|
806 | real(wp), dimension(:), pointer :: data
|
---|
807 | type(VlisttypeD1d), pointer :: next => null()
|
---|
808 | end type VlisttypeD1d
|
---|
809 | !
|
---|
810 | !****
|
---|
811 |
|
---|
812 | !****id* Datatypes/VlisttypeD2d
|
---|
813 | !
|
---|
814 | ! NAME
|
---|
815 | ! VlisttypeD2d - Variable list for two-dimensional double precision
|
---|
816 | ! variables.
|
---|
817 | !
|
---|
818 | ! NOTES
|
---|
819 | ! This parameter is an internal parameter to the ropp_io library and not
|
---|
820 | ! intended to be used by users.
|
---|
821 | !
|
---|
822 | ! SOURCE
|
---|
823 | !
|
---|
824 | type VlisttypeD2d
|
---|
825 | character(len = 1024) :: name = ""
|
---|
826 | character(len = 1024) :: long_name = ""
|
---|
827 | character(len = 1024) :: units = ""
|
---|
828 | real(wp), dimension(2) :: range = (/ ropp_io_mdfv, &
|
---|
829 | ropp_io_mdfv /)
|
---|
830 | real(wp), dimension(:,:), pointer :: data
|
---|
831 | type(VlisttypeD2d), pointer :: next => null()
|
---|
832 | end type VlisttypeD2d
|
---|
833 | !
|
---|
834 | !****
|
---|
835 |
|
---|
836 | !****id* Datatypes/Vlisttype
|
---|
837 | !
|
---|
838 | ! NAME
|
---|
839 | ! Vlisttype - Variable list for additional variables variables.
|
---|
840 | !
|
---|
841 | ! NOTES
|
---|
842 | ! This parameter is an internal parameter to the ropp_io library and not
|
---|
843 | ! intended to be used by users.
|
---|
844 | !
|
---|
845 | ! SOURCE
|
---|
846 | !
|
---|
847 | type Vlisttype
|
---|
848 | type(VlisttypeD0d), pointer :: VlistD0d => null()
|
---|
849 | type(VlisttypeD1d), pointer :: VlistD1d => null()
|
---|
850 | type(VlisttypeD2d), pointer :: VlistD2d => null()
|
---|
851 | end type Vlisttype
|
---|
852 | !
|
---|
853 | !****
|
---|
854 |
|
---|
855 | !-------------------------------------------------------------------------------
|
---|
856 | ! 14. RO profile
|
---|
857 | !-------------------------------------------------------------------------------
|
---|
858 |
|
---|
859 | !****d* Datatypes/ROunits
|
---|
860 | !
|
---|
861 | ! NAME
|
---|
862 | ! ROunits - A sub-structure of the ROprof structure, defining (top-level) units.
|
---|
863 | !
|
---|
864 | ! SOURCE
|
---|
865 | !
|
---|
866 | type ROunits
|
---|
867 | character(len = 64) :: pcd = "bits"
|
---|
868 | character(len = 64) :: overall_qual = "percent"
|
---|
869 | end type ROunits
|
---|
870 | !
|
---|
871 | !****
|
---|
872 |
|
---|
873 | !****d* Datatypes/ROrange
|
---|
874 | !
|
---|
875 | ! NAME
|
---|
876 | ! ROrange - A sub-structure of the ROprof structure, defining (top level) ranges.
|
---|
877 | !
|
---|
878 | ! SOURCE
|
---|
879 | !
|
---|
880 | type ROrange
|
---|
881 | integer, dimension(2) :: pcd = (/ 0, 32767 /)
|
---|
882 | real(wp), dimension(2) :: overall_qual = (/ 0.0_wp, 100.0_wp /)
|
---|
883 | end type ROrange
|
---|
884 | !
|
---|
885 | !****
|
---|
886 |
|
---|
887 | !****d* Datatypes/ROprof
|
---|
888 | !
|
---|
889 | ! NAME
|
---|
890 | ! ROprof - Radio Occultation data (profile) data type.
|
---|
891 | !
|
---|
892 | ! SYNOPSIS
|
---|
893 | ! use ropp_io_types
|
---|
894 | ! ...
|
---|
895 | ! type(ROprof) :: ro_data
|
---|
896 | !
|
---|
897 | ! NOTES
|
---|
898 | ! The ROprof structure is composed out of several other structures; see the user guide
|
---|
899 | ! for a breakdown of the actual element names.
|
---|
900 | !
|
---|
901 | ! SEE ALSO
|
---|
902 | ! DT7type
|
---|
903 | ! GEOtype
|
---|
904 | ! BGtype
|
---|
905 | ! L1atype
|
---|
906 | ! L1btype
|
---|
907 | ! L2atype
|
---|
908 | ! L2btype
|
---|
909 | ! L2ctype
|
---|
910 | ! L2dtype
|
---|
911 | ! ROunits
|
---|
912 | !
|
---|
913 | ! SOURCE
|
---|
914 | !
|
---|
915 | type ROprof
|
---|
916 | character(len = 21) :: FmtVersion = "UNKNOWN" ! File format version ID
|
---|
917 | character(len = 40) :: occ_id = "UNKNOWN" ! Occultation ID
|
---|
918 | character(len = 4) :: leo_id = "UNKN" ! LEO identifier
|
---|
919 | character(len = 4) :: gns_id = "U999" ! GNSS identifier
|
---|
920 | character(len = 4) :: stn_id = "UNKN" ! GSN station identifier
|
---|
921 | character(len = 40) :: processing_centre = "UNKNOWN" ! Processing centre
|
---|
922 | character(len = 40) :: pod_method = "UNKNOWN" ! POD processing method
|
---|
923 | character(len = 40) :: phase_method = "UNKNOWN" ! Excess phase processing method
|
---|
924 | character(len = 40) :: bangle_method = "UNKNOWN" ! Bending angle processing method
|
---|
925 | character(len = 40) :: refrac_method = "UNKNOWN" ! Refractivity processing method
|
---|
926 | character(len = 40) :: meteo_method = "UNKNOWN" ! Meteorological processing method
|
---|
927 | character(len = 80) :: thin_method = "UNKNOWN" ! Profile thinning method
|
---|
928 | character(len = 40) :: software_version = "UNKNOWN" ! Software version ID
|
---|
929 | type(DT7type) :: DTocc ! Date/time of occultation
|
---|
930 | type(DT7type) :: DTpro ! Date/time of processing
|
---|
931 | integer :: PCD = 65535 ! Product quality flags
|
---|
932 | real(wp) :: overall_qual = ropp_io_mdfv ! Overall quality value
|
---|
933 | type(GEOtype) :: georef ! Georeferencing of the profile
|
---|
934 | type(BGtype) :: bg ! Background meta-data
|
---|
935 | type(L1atype) :: Lev1a ! Level 1a data
|
---|
936 | type(L1btype) :: Lev1b ! Level 1b data
|
---|
937 | type(L2atype) :: Lev2a ! Level 2a data
|
---|
938 | type(L2btype) :: Lev2b ! Level 2b data
|
---|
939 | type(L2ctype) :: Lev2c ! Level 2c data
|
---|
940 | type(L2dtype) :: Lev2d ! Level 2d data
|
---|
941 | type(ROunits) :: units ! Parameter unit names
|
---|
942 | type(ROrange) :: range ! Parameter ranges
|
---|
943 | type(Vlisttype) :: vlist ! Additional variables
|
---|
944 | end type ROprof
|
---|
945 |
|
---|
946 | !****
|
---|
947 |
|
---|
948 | !-------------------------------------------------------------------------------
|
---|
949 | ! 15. Error correlation / covariance matrix
|
---|
950 | !-------------------------------------------------------------------------------
|
---|
951 |
|
---|
952 | !****d* Datatypes/ROcorcov
|
---|
953 | !
|
---|
954 | ! NAME
|
---|
955 | ! ROcorcov - Error correlation or covariance data type.
|
---|
956 | !
|
---|
957 | ! SYNOPSIS
|
---|
958 | ! use ropp_io_types
|
---|
959 | ! ...
|
---|
960 | ! type(ROcorcov) :: covar
|
---|
961 | !
|
---|
962 | ! NOTES
|
---|
963 | ! The ROcorcov structure contains an error correlation or covariance matrix
|
---|
964 | ! (the latter will be splitted into an error correlation matrix and an array
|
---|
965 | ! of diagonal standard deviations). The error correlation matrix is stored in
|
---|
966 | ! Lapack's packed format for positive definite matrices, i.e. as a 1d array.
|
---|
967 | !
|
---|
968 | ! As an additional element, the structure may also contain a latitude range
|
---|
969 | ! pair which is intended to specify within which latitude band the error
|
---|
970 | ! covariance is applicable.
|
---|
971 | !
|
---|
972 | ! SEE ALSO
|
---|
973 | !
|
---|
974 | ! SOURCE
|
---|
975 | !
|
---|
976 | type ROcorcov
|
---|
977 | character(len = 13) :: FmtVersion = "UNKNOWN" ! File format version ID
|
---|
978 | character(len = 40) :: processing_centre = "UNKNOWN" ! Processing centre
|
---|
979 |
|
---|
980 | real(wp) :: lat_min = -90.0_wp
|
---|
981 | real(wp) :: lat_max = 90.0_wp
|
---|
982 | real(wp), dimension(:), pointer :: sigma => null()
|
---|
983 | real(wp), dimension(:), pointer :: corr => null()
|
---|
984 | end type ROcorcov
|
---|
985 | !
|
---|
986 | !****
|
---|
987 |
|
---|
988 | end module ropp_io_types
|
---|