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
104 TYPE(vol7d_var) :: var
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)
128 TYPE(vol7d_var),
INTENT(INOUT) :: this
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
174 TYPE(vol7d_var) :: this
176 CALL init(this, btable, description, unit, scalefactor)
178 END FUNCTION vol7d_var_new
182 elemental SUBROUTINE vol7d_var_delete(this)
183 TYPE(vol7d_var),
INTENT(INOUT) :: 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)
194 TYPE(vol7d_var),
INTENT(IN) :: this, that
197 res = this%btable == that%btable
199 END FUNCTION vol7d_var_eq
202 ELEMENTAL FUNCTION vol7d_var_ne(this, that)
RESULT(res)
203 TYPE(vol7d_var),
INTENT(IN) :: this, that
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)
228 TYPE(vol7d_var),
INTENT(in) :: 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()
265 TYPE(csv_record) :: csv
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)
314 TYPE(vol7d_var),
INTENT(in) :: this
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)
344 TYPE(vol7d_var),
INTENT(in) :: this
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" Distruttore per la classe vol7d_var.
display on the screen a brief content of object
Utilities for managing files.
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.
Definitions of constants and functions for working with missing values.
Definisce una variabile meteorologica osservata o un suo attributo.
Definition of constants to be used for declaring variables of a desired type.