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
50 INTEGER :: feat_ind=imiss
54 TYPE(vol7d_var),
PARAMETER :: vol7d_var_miss= &
55 vol7d_var(cmiss,cmiss,cmiss,imiss,imiss,imiss,imiss,imiss,imiss, &
56 (/imiss,imiss,imiss,imiss/))
62 MODULE PROCEDURE vol7d_var_init
68 MODULE PROCEDURE vol7d_var_delete
76 INTERFACE OPERATOR (==)
77 MODULE PROCEDURE vol7d_var_eq
85 INTERFACE OPERATOR (/=)
86 MODULE PROCEDURE vol7d_var_ne, vol7d_var_nesv
91 MODULE PROCEDURE vol7d_var_c_e
94 #define VOL7D_POLY_TYPE TYPE(vol7d_var) 95 #define VOL7D_POLY_TYPES _var 96 #include "array_utilities_pre.F90" 100 MODULE PROCEDURE display_var, display_var_vect
104 TYPE vol7d_var_features
105 TYPE(vol7d_var) :: var
108 END TYPE vol7d_var_features
110 TYPE(vol7d_var_features),
ALLOCATABLE :: var_features(:)
113 INTEGER,
PARAMETER :: var_ord=0
114 INTEGER,
PARAMETER :: var_dir360=1
115 INTEGER,
PARAMETER :: var_press=2
116 INTEGER,
PARAMETER :: var_ucomp=3
117 INTEGER,
PARAMETER :: var_vcomp=4
118 INTEGER,
PARAMETER :: var_wcomp=5
120 PRIVATE vol7d_var_features_init
129 elemental SUBROUTINE vol7d_var_init(this, btable, description, unit, scalefactor)
130 TYPE(vol7d_var),
INTENT(INOUT) :: this
131 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
132 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
133 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
134 INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
136 IF (
PRESENT(btable))
THEN 140 this%description = cmiss
142 this%scalefactor = imiss
145 IF (
PRESENT(description))
THEN 146 this%description = description
148 this%description = cmiss
150 IF (
PRESENT(unit))
THEN 155 if (
present(scalefactor))
then 156 this%scalefactor = scalefactor
158 this%scalefactor = imiss
167 END SUBROUTINE vol7d_var_init
170 ELEMENTAL FUNCTION vol7d_var_new(btable, description, unit, scalefactor)
RESULT(this)
171 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
172 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
173 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
174 INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
176 TYPE(vol7d_var) :: this
178 CALL init(this, btable, description, unit, scalefactor)
180 END FUNCTION vol7d_var_new
184 elemental SUBROUTINE vol7d_var_delete(this)
185 TYPE(vol7d_var),
INTENT(INOUT) :: this
188 this%description = cmiss
190 this%scalefactor = imiss
192 END SUBROUTINE vol7d_var_delete
195 ELEMENTAL FUNCTION vol7d_var_eq(this, that)
RESULT(res)
196 TYPE(vol7d_var),
INTENT(IN) :: this, that
199 res = this%btable == that%btable
201 END FUNCTION vol7d_var_eq
204 ELEMENTAL FUNCTION vol7d_var_ne(this, that)
RESULT(res)
205 TYPE(vol7d_var),
INTENT(IN) :: this, that
208 res = .NOT.(this == that)
210 END FUNCTION vol7d_var_ne
213 FUNCTION vol7d_var_nesv(this, that)
RESULT(res)
214 TYPE(vol7d_var),
INTENT(IN) :: this, that(:)
215 LOGICAL :: res(SIZE(that))
220 res(i) = .NOT.(this == that(i))
223 END FUNCTION vol7d_var_nesv
228 subroutine display_var(this)
230 TYPE(vol7d_var),
INTENT(in) :: this
232 print*,
"VOL7DVAR: ",this%btable,trim(this%description),
" : ",this%unit,&
233 " scale factor",this%scalefactor
235 end subroutine display_var
239 subroutine display_var_vect(this)
245 call display_var(this(i))
248 end subroutine display_var_vect
250 FUNCTION vol7d_var_c_e(this)
RESULT(c_e)
253 c_e = this /= vol7d_var_miss
254 END FUNCTION vol7d_var_c_e
257 SUBROUTINE vol7d_var_features_set(this)
261 CALL vol7d_var_features_init()
263 IF (
ALLOCATED(var_features))
THEN 264 DO i = 1,
SIZE(var_features)
265 IF (this == var_features(i)%var)
THEN 272 END SUBROUTINE vol7d_var_features_set
283 SUBROUTINE vol7d_var_features_init()
285 TYPE(csv_record) :: csv
286 CHARACTER(len=1024) :: line
288 IF (
ALLOCATED(var_features))
RETURN 290 un = open_package_file(
'varbufr.csv', filetype_data)
300 ALLOCATE(var_features(n))
303 READ(un,
'(A)',end=200)line
316 END SUBROUTINE vol7d_var_features_init
322 SUBROUTINE vol7d_var_features_delete()
323 IF (
ALLOCATED(var_features))
DEALLOCATE(var_features)
324 END SUBROUTINE vol7d_var_features_delete
333 ELEMENTAL FUNCTION vol7d_var_features_vartype(this)
RESULT(vartype)
334 TYPE(vol7d_var),
INTENT(in) :: this
337 IF (
c_e(this%feat_ind))
THEN 338 vartype = var_features(this%feat_ind)%vartype
343 END FUNCTION vol7d_var_features_vartype
356 ELEMENTAL SUBROUTINE vol7d_var_features_posdef_apply(this, val)
358 REAL,
INTENT(inout) :: val
360 IF (
c_e(this%feat_ind))
THEN 361 IF (
c_e(var_features(this%feat_ind)%posdef))
THEN 363 val = max(var_features(this%feat_ind)%posdef, val)
368 END SUBROUTINE vol7d_var_features_posdef_apply
375 ELEMENTAL FUNCTION vol7d_vartype(this)
RESULT(vartype)
381 SELECT CASE(this%btable)
382 CASE(
'B01012',
'B11001',
'B11043',
'B22001')
384 CASE(
'B07004',
'B10004',
'B10051',
'B10060')
386 CASE(
'B11003',
'B11200')
388 CASE(
'B11004',
'B11201')
390 CASE(
'B11005',
'B11006')
394 END FUNCTION vol7d_vartype
397 #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.