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
53TYPE(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
75INTERFACE OPERATOR (==)
76 MODULE PROCEDURE vol7d_var_eq
84INTERFACE 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
103TYPE vol7d_var_features
104 TYPE(vol7d_var) :: var
107END TYPE vol7d_var_features
109TYPE(vol7d_var_features),
ALLOCATABLE :: var_features(:)
112INTEGER,
PARAMETER :: var_ord=0
113INTEGER,
PARAMETER :: var_dir360=1
114INTEGER,
PARAMETER :: var_press=2
115INTEGER,
PARAMETER :: var_ucomp=3
116INTEGER,
PARAMETER :: var_vcomp=4
117INTEGER,
PARAMETER :: var_wcomp=5
127elemental SUBROUTINE vol7d_var_init(this, btable, description, unit, scalefactor)
128TYPE(vol7d_var),
INTENT(INOUT) :: this
129CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
130CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
131CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
132INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
134IF (
PRESENT(btable))
THEN
138 this%description = cmiss
140 this%scalefactor = imiss
143IF (
PRESENT(description))
THEN
144 this%description = description
146 this%description = cmiss
148IF (
PRESENT(unit))
THEN
153if (
present(scalefactor))
then
154 this%scalefactor = scalefactor
156 this%scalefactor = imiss
165END SUBROUTINE vol7d_var_init
168ELEMENTAL FUNCTION vol7d_var_new(btable, description, unit, scalefactor)
RESULT(this)
169CHARACTER(len=*),
INTENT(in),
OPTIONAL :: btable
170CHARACTER(len=*),
INTENT(in),
OPTIONAL :: description
171CHARACTER(len=*),
INTENT(in),
OPTIONAL :: unit
172INTEGER,
INTENT(in),
OPTIONAL :: scalefactor
174TYPE(vol7d_var) :: this
176CALL init(this, btable, description, unit, scalefactor)
178END FUNCTION vol7d_var_new
182elemental SUBROUTINE vol7d_var_delete(this)
183TYPE(vol7d_var),
INTENT(INOUT) :: this
186this%description = cmiss
188this%scalefactor = imiss
190END SUBROUTINE vol7d_var_delete
193ELEMENTAL FUNCTION vol7d_var_eq(this, that)
RESULT(res)
194TYPE(vol7d_var),
INTENT(IN) :: this, that
197res = this%btable == that%btable
199END FUNCTION vol7d_var_eq
202ELEMENTAL FUNCTION vol7d_var_ne(this, that)
RESULT(res)
203TYPE(vol7d_var),
INTENT(IN) :: this, that
206res = .NOT.(this == that)
208END FUNCTION vol7d_var_ne
211FUNCTION vol7d_var_nesv(this, that)
RESULT(res)
212TYPE(vol7d_var),
INTENT(IN) :: this, that(:)
213LOGICAL :: res(SIZE(that))
218 res(i) = .NOT.(this == that(i))
221END FUNCTION vol7d_var_nesv
226subroutine display_var(this)
230print*,
"VOL7DVAR: ",this%btable,trim(this%description),
" : ",this%unit,&
231 " scale factor",this%scalefactor
233end subroutine display_var
237subroutine display_var_vect(this)
243 call display_var(this(i))
246end subroutine display_var_vect
248FUNCTION vol7d_var_c_e(this)
RESULT(c_e)
249TYPE(vol7d_var),
INTENT(IN) :: this
251c_e = this /= vol7d_var_miss
252END FUNCTION vol7d_var_c_e
263SUBROUTINE vol7d_var_features_init()
265TYPE(csv_record) :: csv
266CHARACTER(len=1024) :: line
268IF (
ALLOCATED(var_features))
RETURN
270un = open_package_file(
'varbufr.csv', filetype_data)
280ALLOCATE(var_features(n))
283 READ(un,
'(A)',
END=200)line
285 CALL csv_record_getfield(csv, var_features(i)%var%btable)
286 CALL csv_record_getfield(csv)
287 CALL csv_record_getfield(csv)
288 CALL csv_record_getfield(csv, var_features(i)%posdef)
289 CALL csv_record_getfield(csv, var_features(i)%vartype)
296END SUBROUTINE vol7d_var_features_init
302SUBROUTINE vol7d_var_features_delete()
303IF (
ALLOCATED(var_features))
DEALLOCATE(var_features)
304END SUBROUTINE vol7d_var_features_delete
313ELEMENTAL FUNCTION vol7d_var_features_vartype(this)
RESULT(vartype)
314TYPE(vol7d_var),
INTENT(in) :: this
321IF (
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
330END FUNCTION vol7d_var_features_vartype
343ELEMENTAL SUBROUTINE vol7d_var_features_posdef_apply(this, val)
345REAL,
INTENT(inout) :: val
349IF (
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)
358END SUBROUTINE vol7d_var_features_posdef_apply
365ELEMENTAL FUNCTION vol7d_vartype(this)
RESULT(vartype)
371SELECT CASE(this%btable)
372CASE(
'B01012',
'B11001',
'B11043',
'B22001')
374CASE(
'B07004',
'B10004',
'B10051',
'B10060')
376CASE(
'B11003',
'B11200')
378CASE(
'B11004',
'B11201')
380CASE(
'B11005',
'B11006')
384END FUNCTION vol7d_vartype
387#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.