39 CHARACTER(len=10) :: btable=cmiss
40 CHARACTER(len=65) :: description=cmiss
41 CHARACTER(len=24) :: unit=cmiss
42 INTEGER :: scalefactor=imiss
49 INTEGER :: gribhint(4)=imiss
53 TYPE(vol7d_var),
PARAMETER :: vol7d_var_miss= &
54 vol7d_var(cmiss,cmiss,cmiss,imiss,imiss,imiss,imiss,imiss,imiss, &
55 (/imiss,imiss,imiss,imiss/))
61 MODULE PROCEDURE vol7d_var_init
67 MODULE PROCEDURE vol7d_var_delete
75 INTERFACE operator (==)
76 MODULE PROCEDURE vol7d_var_eq
84 INTERFACE operator (/=)
85 MODULE PROCEDURE vol7d_var_ne, vol7d_var_nesv
90 MODULE PROCEDURE vol7d_var_c_e
93 #define VOL7D_POLY_TYPE TYPE(vol7d_var)
94 #define VOL7D_POLY_TYPES _var
95 #include "array_utilities_pre.F90"
99 MODULE PROCEDURE display_var, display_var_vect
103 TYPE vol7d_var_features
107 end type vol7d_var_features
109 TYPE(vol7d_var_features
),
ALLOCATABLE :: var_features(:)
112 INTEGER,
PARAMETER :: var_ord=0
113 INTEGER,
PARAMETER :: var_dir360=1
114 INTEGER,
PARAMETER :: var_press=2
115 INTEGER,
PARAMETER :: var_ucomp=3
116 INTEGER,
PARAMETER :: var_vcomp=4
117 INTEGER,
PARAMETER :: var_wcomp=5
127 elemental SUBROUTINE vol7d_var_init(this, btable, description, unit, scalefactor)
129 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
130 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
131 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
132 INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
134 IF (present(btable))
THEN
138 this%description = cmiss
140 this%scalefactor = imiss
143 IF (present(description))
THEN
144 this%description = description
146 this%description = cmiss
148 IF (present(unit))
THEN
153 if (present(scalefactor))
then
154 this%scalefactor = scalefactor
156 this%scalefactor = imiss
165 END SUBROUTINE vol7d_var_init
168 ELEMENTAL FUNCTION vol7d_var_new(btable, description, unit, scalefactor) RESULT(this)
169 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
170 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
171 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
172 INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
176 CALL
init(this, btable, description, unit, scalefactor)
178 END FUNCTION vol7d_var_new
182 elemental SUBROUTINE vol7d_var_delete(this)
186 this%description = cmiss
188 this%scalefactor = imiss
190 END SUBROUTINE vol7d_var_delete
193 ELEMENTAL FUNCTION vol7d_var_eq(this, that) RESULT(res)
197 res = this%btable == that%btable
199 END FUNCTION vol7d_var_eq
202 ELEMENTAL FUNCTION vol7d_var_ne(this, that) RESULT(res)
206 res = .NOT.(this == that)
208 END FUNCTION vol7d_var_ne
211 FUNCTION vol7d_var_nesv(this, that) RESULT(res)
212 TYPE(vol7d_var),
INTENT(IN) :: this, that(:)
213 LOGICAL :: res(size(that))
218 res(i) = .NOT.(this == that(i))
221 END FUNCTION vol7d_var_nesv
226 subroutine display_var(this)
230 print*,
"VOL7DVAR: ",this%btable,trim(this%description),
" : ",this%unit,&
231 " scale factor",this%scalefactor
233 end subroutine display_var
237 subroutine display_var_vect(this)
243 call display_var(this(i))
246 end subroutine display_var_vect
248 FUNCTION vol7d_var_c_e(this) RESULT(c_e)
251 c_e = this /= vol7d_var_miss
252 END FUNCTION vol7d_var_c_e
263 SUBROUTINE vol7d_var_features_init()
266 CHARACTER(len=1024) :: line
268 IF (
ALLOCATED(var_features))
RETURN
270 un = open_package_file(
'varbufr.csv', filetype_data)
280 ALLOCATE(var_features(n))
283 READ(un,
'(A)',end=200)line
296 END SUBROUTINE vol7d_var_features_init
302 SUBROUTINE vol7d_var_features_delete()
303 IF (
ALLOCATED(var_features))
DEALLOCATE(var_features)
304 END SUBROUTINE vol7d_var_features_delete
313 ELEMENTAL FUNCTION vol7d_var_features_vartype(this) RESULT(vartype)
321 IF (
ALLOCATED(var_features))
THEN
322 DO i = 1,
SIZE(var_features)
323 IF (this == var_features(i)%var)
THEN
324 vartype = var_features(i)%vartype
330 END FUNCTION vol7d_var_features_vartype
343 ELEMENTAL SUBROUTINE vol7d_var_features_posdef_apply(this, val)
345 REAL,
INTENT(inout) :: val
349 IF (
ALLOCATED(var_features))
THEN
350 DO i = 1,
SIZE(var_features)
351 IF (this == var_features(i)%var)
THEN
352 IF (
c_e(var_features(i)%posdef)) val = max(var_features(i)%posdef, val)
358 END SUBROUTINE vol7d_var_features_posdef_apply
365 ELEMENTAL FUNCTION vol7d_vartype(this) RESULT(vartype)
371 SELECT CASE(this%btable)
372 CASE(
'B01012',
'B11001',
'B11043',
'B22001')
374 CASE(
'B07004',
'B10004',
'B10051',
'B10060')
376 CASE(
'B11003',
'B11200')
378 CASE(
'B11004',
'B11201')
380 CASE(
'B11005',
'B11006')
384 END FUNCTION vol7d_vartype
387 #include "array_utilities_inc.F90"
Definitions of constants and functions for working with missing values.
Distruttore per la classe vol7d_var.
display on the screen a brief content of object
Methods for successively obtaining the fields of a csv_record object.
Classe per la gestione delle variabili osservate da stazioni meteo e affini.
Costruttore per la classe vol7d_var.
Class for interpreting the records of a csv file.
Definisce una variabile meteorologica osservata o un suo attributo.
Definition of constants to be used for declaring variables of a desired type.
Utilities for managing files.