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
54TYPE(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
76INTERFACE OPERATOR (==)
77 MODULE PROCEDURE vol7d_var_eq
85INTERFACE 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
104TYPE vol7d_var_features
105 TYPE(vol7d_var) :: var
108END TYPE vol7d_var_features
110TYPE(vol7d_var_features),
ALLOCATABLE :: var_features(:)
113INTEGER,
PARAMETER :: var_ord=0
114INTEGER,
PARAMETER :: var_dir360=1
115INTEGER,
PARAMETER :: var_press=2
116INTEGER,
PARAMETER :: var_ucomp=3
117INTEGER,
PARAMETER :: var_vcomp=4
118INTEGER,
PARAMETER :: var_wcomp=5
120PRIVATE vol7d_var_features_init
129elemental SUBROUTINE vol7d_var_init(this, btable, description, unit, scalefactor)
130TYPE(vol7d_var),
INTENT(INOUT) :: this
131CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
132CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
133CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
134INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
136IF (
PRESENT(btable))
THEN
140 this%description = cmiss
142 this%scalefactor = imiss
145IF (
PRESENT(description))
THEN
146 this%description = description
148 this%description = cmiss
150IF (
PRESENT(unit))
THEN
155if (
present(scalefactor))
then
156 this%scalefactor = scalefactor
158 this%scalefactor = imiss
167END SUBROUTINE vol7d_var_init
170ELEMENTAL FUNCTION vol7d_var_new(btable, description, unit, scalefactor)
RESULT(this)
171CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
172CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
173CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
174INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
176TYPE(vol7d_var) :: this
178CALL init(this, btable, description, unit, scalefactor)
180END FUNCTION vol7d_var_new
184elemental SUBROUTINE vol7d_var_delete(this)
185TYPE(vol7d_var),
INTENT(INOUT) :: this
188this%description = cmiss
190this%scalefactor = imiss
192END SUBROUTINE vol7d_var_delete
195ELEMENTAL FUNCTION vol7d_var_eq(this, that)
RESULT(res)
196TYPE(vol7d_var),
INTENT(IN) :: this, that
199res = this%btable == that%btable
201END FUNCTION vol7d_var_eq
204ELEMENTAL FUNCTION vol7d_var_ne(this, that)
RESULT(res)
205TYPE(vol7d_var),
INTENT(IN) :: this, that
208res = .NOT.(this == that)
210END FUNCTION vol7d_var_ne
213FUNCTION vol7d_var_nesv(this, that)
RESULT(res)
214TYPE(vol7d_var),
INTENT(IN) :: this, that(:)
215LOGICAL :: res(SIZE(that))
220 res(i) = .NOT.(this == that(i))
223END FUNCTION vol7d_var_nesv
228subroutine display_var(this)
232print*,
"VOL7DVAR: ",this%btable,trim(this%description),
" : ",this%unit,&
233 " scale factor",this%scalefactor
235end subroutine display_var
239subroutine display_var_vect(this)
245 call display_var(this(i))
248end subroutine display_var_vect
250FUNCTION vol7d_var_c_e(this)
RESULT(c_e)
251TYPE(vol7d_var),
INTENT(IN) :: this
253c_e = this /= vol7d_var_miss
254END FUNCTION vol7d_var_c_e
257SUBROUTINE vol7d_var_features_set(this)
258TYPE(vol7d_var),
INTENT(inout) :: this
261CALL vol7d_var_features_init()
263IF (
ALLOCATED(var_features))
THEN
264 DO i = 1,
SIZE(var_features)
265 IF (this == var_features(i)%var)
THEN
272END SUBROUTINE vol7d_var_features_set
283SUBROUTINE vol7d_var_features_init()
285TYPE(csv_record) :: csv
286CHARACTER(len=1024) :: line
288IF (
ALLOCATED(var_features))
RETURN
290un = open_package_file(
'varbufr.csv', filetype_data)
300ALLOCATE(var_features(n))
303 READ(un,
'(A)',
END=200)line
305 CALL csv_record_getfield(csv, var_features(i)%var%btable)
306 CALL csv_record_getfield(csv)
307 CALL csv_record_getfield(csv)
308 CALL csv_record_getfield(csv, var_features(i)%posdef)
309 CALL csv_record_getfield(csv, var_features(i)%vartype)
316END SUBROUTINE vol7d_var_features_init
322SUBROUTINE vol7d_var_features_delete()
323IF (
ALLOCATED(var_features))
DEALLOCATE(var_features)
324END SUBROUTINE vol7d_var_features_delete
333ELEMENTAL FUNCTION vol7d_var_features_vartype(this)
RESULT(vartype)
334TYPE(vol7d_var),
INTENT(in) :: this
337IF (
c_e(this%feat_ind))
THEN
338 vartype = var_features(this%feat_ind)%vartype
343END FUNCTION vol7d_var_features_vartype
356ELEMENTAL SUBROUTINE vol7d_var_features_posdef_apply(this, val)
358REAL,
INTENT(inout) :: val
360IF (
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)
368END SUBROUTINE vol7d_var_features_posdef_apply
375ELEMENTAL FUNCTION vol7d_vartype(this)
RESULT(vartype)
381SELECT CASE(this%btable)
382CASE(
'B01012',
'B11001',
'B11043',
'B22001')
384CASE(
'B07004',
'B10004',
'B10051',
'B10060')
386CASE(
'B11003',
'B11200')
388CASE(
'B11004',
'B11201')
390CASE(
'B11005',
'B11006')
394END FUNCTION vol7d_vartype
397#include "array_utilities_inc.F90"
Distruttore per la classe vol7d_var.
display on the screen a brief content of object
Costruttore per la classe vol7d_var.
Utilities for managing files.
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 delle variabili osservate da stazioni meteo e affini.
Class for interpreting the records of a csv file.
Definisce una variabile meteorologica osservata o un suo attributo.