43TYPE(vol7d_level),
PARAMETER :: vol7d_level_miss=
vol7d_level(imiss,imiss,imiss,imiss)
49 MODULE PROCEDURE vol7d_level_init
55 MODULE PROCEDURE vol7d_level_delete
61INTERFACE OPERATOR (==)
62 MODULE PROCEDURE vol7d_level_eq
68INTERFACE OPERATOR (/=)
69 MODULE PROCEDURE vol7d_level_ne
78 MODULE PROCEDURE vol7d_level_gt
87 MODULE PROCEDURE vol7d_level_lt
95INTERFACE OPERATOR (>=)
96 MODULE PROCEDURE vol7d_level_ge
104INTERFACE OPERATOR (<=)
105 MODULE PROCEDURE vol7d_level_le
111INTERFACE OPERATOR (.almosteq.)
112 MODULE PROCEDURE vol7d_level_almost_eq
119 MODULE PROCEDURE vol7d_level_c_e
122#define VOL7D_POLY_TYPE TYPE(vol7d_level)
123#define VOL7D_POLY_TYPES _level
125#include "array_utilities_pre.F90"
129 MODULE PROCEDURE display_level
134 MODULE PROCEDURE to_char_level
139 MODULE PROCEDURE vol7d_level_to_var_int, vol7d_level_to_var_lev
144 MODULE PROCEDURE vol7d_level_to_var_factor_int, vol7d_level_to_var_factor_lev
149 MODULE PROCEDURE vol7d_level_to_var_log10_int, vol7d_level_to_var_log10_lev
152type(vol7d_level) :: almost_equal_levels(3)=(/&
158INTEGER,
PARAMETER :: &
159 height_level(6) = (/102,103,106,117,160,161/), &
160 thermo_level(3) = (/20,107,235/), &
161 sigma_level(2) = (/104,111/)
165 CHARACTER(len=10) :: btable
170TYPE(level_var),
PARAMETER :: level_var_converter(7) = (/ &
171 level_var(20,
'B12101'), &
172 level_var(100,
'B10004'), &
173 level_var(102,
'B10007'), &
174 level_var(103,
'B10007'), &
175 level_var(107,
'B12192'), &
176 level_var(108,
'B10004'), &
177 level_var(161,
'B22195') /)
179PRIVATE level_var, level_var_converter
188FUNCTION vol7d_level_new(level1, l1, level2, l2)
RESULT(this)
189INTEGER,
INTENT(IN),
OPTIONAL :: level1
190INTEGER,
INTENT(IN),
OPTIONAL :: l1
191INTEGER,
INTENT(IN),
OPTIONAL :: level2
192INTEGER,
INTENT(IN),
OPTIONAL :: l2
194TYPE(vol7d_level) :: this
196CALL init(this, level1, l1, level2, l2)
198END FUNCTION vol7d_level_new
204SUBROUTINE vol7d_level_init(this, level1, l1, level2, l2)
205TYPE(vol7d_level),
INTENT(INOUT) :: this
206INTEGER,
INTENT(IN),
OPTIONAL :: level1
207INTEGER,
INTENT(IN),
OPTIONAL :: l1
208INTEGER,
INTENT(IN),
OPTIONAL :: level2
209INTEGER,
INTENT(IN),
OPTIONAL :: l2
216IF (
PRESENT(level1))
THEN
222IF (
PRESENT(l1)) this%l1 = l1
224IF (
PRESENT(level2))
THEN
230IF (
PRESENT(l2)) this%l2 = l2
232END SUBROUTINE vol7d_level_init
236SUBROUTINE vol7d_level_delete(this)
237TYPE(vol7d_level),
INTENT(INOUT) :: this
244END SUBROUTINE vol7d_level_delete
247SUBROUTINE display_level(this)
248TYPE(vol7d_level),
INTENT(in) :: this
252END SUBROUTINE display_level
255FUNCTION to_char_level(this)
259TYPE(vol7d_level),
INTENT(in) :: this
260CHARACTER(len=255) :: to_char_level
263INTEGER :: handle, ier
266ier = idba_messaggi(handle,
"/dev/null",
"w",
"BUFR")
267ier = idba_spiegal(handle,this%level1,this%l1,this%level2,this%l2,to_char_level)
268ier = idba_fatto(handle)
270to_char_level=
"LEVEL: "//to_char_level
274to_char_level=
"LEVEL: "//&
275 " typelev1:"//trim(
to_char(this%level1))//
" L1:"//trim(
to_char(this%l1))//&
276 " typelev2:"//trim(
to_char(this%level2))//
" L2:"//trim(
to_char(this%l2))
280END FUNCTION to_char_level
283ELEMENTAL FUNCTION vol7d_level_eq(this, that)
RESULT(res)
284TYPE(vol7d_level),
INTENT(IN) :: this, that
288 this%level1 == that%level1 .AND. &
289 this%level2 == that%level2 .AND. &
290 this%l1 == that%l1 .AND. this%l2 == that%l2
292END FUNCTION vol7d_level_eq
295ELEMENTAL FUNCTION vol7d_level_ne(this, that)
RESULT(res)
296TYPE(vol7d_level),
INTENT(IN) :: this, that
299res = .NOT.(this == that)
301END FUNCTION vol7d_level_ne
304ELEMENTAL FUNCTION vol7d_level_almost_eq(this, that)
RESULT(res)
305TYPE(vol7d_level),
INTENT(IN) :: this, that
308IF ( .not.
c_e(this%level1) .or. .not.
c_e(that%level1) .or. this%level1 == that%level1 .AND. &
309 .not.
c_e(this%level2) .or. .not.
c_e(that%level2) .or. this%level2 == that%level2 .AND. &
310 .not.
c_e(this%l1) .or. .not.
c_e(that%l1) .or. this%l1 == that%l1 .AND. &
311 .not.
c_e(this%l2) .or. .not.
c_e(that%l2) .or. this%l2 == that%l2)
THEN
317END FUNCTION vol7d_level_almost_eq
320ELEMENTAL FUNCTION vol7d_level_gt(this, that)
RESULT(res)
321TYPE(vol7d_level),
INTENT(IN) :: this, that
325 this%level1 > that%level1 .OR. &
326 (this%level1 == that%level1 .AND. this%l1 > that%l1) .OR. &
327 (this%level1 == that%level1 .AND. this%l1 == that%l1 .AND. &
329 this%level2 > that%level2 .OR. &
330 (this%level2 == that%level2 .AND. this%l2 > that%l2) &
337END FUNCTION vol7d_level_gt
340ELEMENTAL FUNCTION vol7d_level_lt(this, that)
RESULT(res)
341TYPE(vol7d_level),
INTENT(IN) :: this, that
345 this%level1 < that%level1 .OR. &
346 (this%level1 == that%level1 .AND. this%l1 < that%l1) .OR. &
347 (this%level1 == that%level1 .AND. this%l1 == that%l1 .AND. &
349 this%level2 < that%level2 .OR. &
350 (this%level2 == that%level2 .AND. this%l2 < that%l2) &
357END FUNCTION vol7d_level_lt
360ELEMENTAL FUNCTION vol7d_level_ge(this, that)
RESULT(res)
361TYPE(vol7d_level),
INTENT(IN) :: this, that
364IF (this == that)
THEN
366ELSE IF (this > that)
THEN
372END FUNCTION vol7d_level_ge
375ELEMENTAL FUNCTION vol7d_level_le(this, that)
RESULT(res)
376TYPE(vol7d_level),
INTENT(IN) :: this, that
379IF (this == that)
THEN
381ELSE IF (this < that)
THEN
387END FUNCTION vol7d_level_le
390ELEMENTAL FUNCTION vol7d_level_c_e(this)
RESULT(c_e)
391TYPE(vol7d_level),
INTENT(IN) :: this
393c_e = this /= vol7d_level_miss
394END FUNCTION vol7d_level_c_e
397#include "array_utilities_inc.F90"
400FUNCTION vol7d_level_to_var_lev(level)
RESULT(btable)
401TYPE(vol7d_level),
INTENT(in) :: level
402CHARACTER(len=10) :: btable
404btable = vol7d_level_to_var_int(level%level1)
406END FUNCTION vol7d_level_to_var_lev
408FUNCTION vol7d_level_to_var_int(level)
RESULT(btable)
409INTEGER,
INTENT(in) :: level
410CHARACTER(len=10) :: btable
414DO i = 1,
SIZE(level_var_converter)
415 IF (level_var_converter(i)%level == level)
THEN
416 btable = level_var_converter(i)%btable
423END FUNCTION vol7d_level_to_var_int
426FUNCTION vol7d_level_to_var_factor_lev(level)
RESULT(factor)
427TYPE(vol7d_level),
INTENT(in) :: level
430factor = vol7d_level_to_var_factor_int(level%level1)
432END FUNCTION vol7d_level_to_var_factor_lev
434FUNCTION vol7d_level_to_var_factor_int(level)
RESULT(factor)
435INTEGER,
INTENT(in) :: level
439IF (any(level == height_level))
THEN
441ELSE IF (any(level == thermo_level))
THEN
443ELSE IF (any(level == sigma_level))
THEN
447END FUNCTION vol7d_level_to_var_factor_int
450FUNCTION vol7d_level_to_var_log10_lev(level)
RESULT(log10)
454log10 = vol7d_level_to_var_log10_int(level%level1)
456END FUNCTION vol7d_level_to_var_log10_lev
458FUNCTION vol7d_level_to_var_log10_int(level)
RESULT(log10)
459INTEGER,
INTENT(in) :: level
463IF (any(level == height_level))
THEN
465ELSE IF (any(level == thermo_level))
THEN
467ELSE IF (any(level == sigma_level))
THEN
471END FUNCTION vol7d_level_to_var_log10_int
Distruttore per la classe vol7d_level.
Index method with sorted array.
Costruttore per la classe vol7d_level.
Represent level object in a pretty string.
Return the conversion factor for multiplying the level value when converting to variable.
Return the scale value (base 10 log of conversion factor) for multiplying the level value when conver...
Convert a level type to a physical variable.
Utilities for CHARACTER variables.
Definition of constants to be used for declaring variables of a desired type.
Definitions of constants and functions for working with missing values.
Classe per la gestione dei livelli verticali in osservazioni meteo e affini.
Definisce il livello verticale di un'osservazione.