libsim Versione 7.2.1
Tipi di dato | Funzioni/Subroutine | Variabili
Riferimenti per il modulo vol7d_class

Classe per la gestione di un volume completo di dati osservati. Continua...

Tipi di dato

interface  c_e
 Test for a missing volume. Continua...
 
interface  check
 Check for problems return 0 if all check passed print diagnostics with log4f. Continua...
 
interface  copy
 copy object Continua...
 
interface  delete
 Distruttore per la classe vol7d. Continua...
 
interface  display
 Print object. Continua...
 
interface  doubledat
 doubleprecision data conversion Continua...
 
interface  export
 Scrittura su file. Continua...
 
interface  import
 Lettura da file. Continua...
 
interface  init
 Costruttore per la classe vol7d. Continua...
 
interface  integerdat
 integer data conversion Continua...
 
interface  realdat
 real data conversion Continua...
 
interface  rounding
 Reduce some dimensions (level and timerage) for semplification (rounding). Continua...
 
interface  to_char
 Represent data in a pretty string. Continua...
 
type  vol7d
 Definisce un oggetto contenente i volumi anagrafica e dati e tutti i descrittori delle loro dimensioni. Continua...
 

Funzioni/Subroutine

subroutine, private vol7d_init (this, time_definition)
 Inizializza un oggetto di tipo vol7d.
 
elemental subroutine, private vol7d_delete (this, dataonly)
 Distrugge l'oggetto in maniera pulita, liberando l'eventuale memoria dinamicamente allocata.
 
integer function, private vol7d_check (this)
 
subroutine, private vol7d_display (this)
 stampa a video una sintesi del contenuto
 
subroutine, private dat_display (this, idat, rdat, ddat, bdat, cdat)
 stampa a video una sintesi del contenuto
 
subroutine, private dat_vect_display (this, idat, rdat, ddat, bdat, cdat)
 stampa a video una sintesi del contenuto
 
character(len=80) function, private to_char_dat (this, idat, rdat, ddat, bdat, cdat)
 
logical function, private vol7d_c_e (this)
 Tests whether anything has ever been assigned to a vol7d object (.TRUE.) or it is as clean as after an init (.FALSE.).
 
subroutine vol7d_alloc (this, nana, ntime, nlevel, ntimerange, nnetwork, nanavarr, nanavard, nanavari, nanavarb, nanavarc, nanaattrr, nanaattrd, nanaattri, nanaattrb, nanaattrc, nanavarattrr, nanavarattrd, nanavarattri, nanavarattrb, nanavarattrc, ndativarr, ndativard, ndativari, ndativarb, ndativarc, ndatiattrr, ndatiattrd, ndatiattri, ndatiattrb, ndatiattrc, ndativarattrr, ndativarattrd, ndativarattri, ndativarattrb, ndativarattrc, ini)
 Metodo per allocare i descrittori delle 7 dimensioni.
 
logical function vol7d_check_vol (this)
 
subroutine vol7d_alloc_vol (this, ini, inivol)
 Metodo per allocare i volumi richiesti di variabili e attributi per anagrafica e dati.
 
subroutine vol7d_set_attr_ind (this)
 Metodo per creare gli indici che associano le variabili aventi attributo alle variabili nei relativi descrittori.
 
subroutine vol7d_merge (this, that, sort, bestdata, ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
 Metodo per fondere 2 oggetti vol7d.
 
subroutine vol7d_append (this, that, sort, bestdata, ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple)
 Metodo per accodare un oggetto vol7d ad un altro.
 
subroutine vol7d_copy (this, that, sort, unique, miss, lsort_time, lsort_timerange, lsort_level, ltime, ltimerange, llevel, lana, lnetwork, lanavarr, lanavard, lanavari, lanavarb, lanavarc, lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, ldativarr, ldativard, ldativari, ldativarb, ldativarc, ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc)
 Metodo per creare una copia completa e indipendente di un oggetto vol7d.
 
subroutine vol7d_reform (this, sort, unique, miss, lsort_time, lsort_timerange, lsort_level, ltime, ltimerange, llevel, lana, lnetwork, lanavarr, lanavard, lanavari, lanavarb, lanavarc, lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, ldativarr, ldativard, ldativari, ldativarb, ldativarc, ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc, purgeana)
 Metodo per riformare in varie maniere un oggetto vol7d.
 
subroutine vol7d_smart_sort (this, lsort_time, lsort_timerange, lsort_level)
 Sorts the sortable dimensions in the volume this only when necessary.
 
subroutine vol7d_filter (this, avl, vl, nl, s_d, e_d)
 Filter the contents of a volume keeping only desired data.
 
subroutine vol7d_convr (this, that, anaconv)
 Metodo per convertire i volumi di dati di un oggetto vol7d in dati reali dove possibile.
 
subroutine vol7d_diff_only (this, that, data_only, ana)
 Metodo per ottenere solo le differenze tra due oggetti vol7d.
 
subroutine vol7d_get_volanar (this, dimlist, vol1dp, vol2dp, vol3dp)
 Crea una vista a dimensione ridotta di un volume di anagrafica di tipo REAL.
 
subroutine vol7d_get_volanaattrr (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp)
 Crea una vista a dimensione ridotta di un volume di attributi di anagrafica di tipo REAL.
 
subroutine vol7d_get_voldatir (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp)
 Crea una vista a dimensione ridotta di un volume di dati di tipo REAL.
 
subroutine vol7d_get_voldatiattrr (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp, vol7dp)
 Crea una vista a dimensione ridotta di un volume di attributi di dati di tipo REAL.
 
subroutine vol7d_get_volanad (this, dimlist, vol1dp, vol2dp, vol3dp)
 Crea una vista a dimensione ridotta di un volume di anagrafica di tipo DOUBLE PRECISION.
 
subroutine vol7d_get_volanaattrd (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp)
 Crea una vista a dimensione ridotta di un volume di attributi di anagrafica di tipo DOUBLE PRECISION.
 
subroutine vol7d_get_voldatid (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp)
 Crea una vista a dimensione ridotta di un volume di dati di tipo DOUBLE PRECISION.
 
subroutine vol7d_get_voldatiattrd (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp, vol7dp)
 Crea una vista a dimensione ridotta di un volume di attributi di dati di tipo DOUBLE PRECISION.
 
subroutine vol7d_get_volanai (this, dimlist, vol1dp, vol2dp, vol3dp)
 Crea una vista a dimensione ridotta di un volume di anagrafica di tipo INTEGER.
 
subroutine vol7d_get_volanaattri (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp)
 Crea una vista a dimensione ridotta di un volume di attributi di anagrafica di tipo INTEGER.
 
subroutine vol7d_get_voldatii (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp)
 Crea una vista a dimensione ridotta di un volume di dati di tipo INTEGER.
 
subroutine vol7d_get_voldatiattri (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp, vol7dp)
 Crea una vista a dimensione ridotta di un volume di attributi di dati di tipo INTEGER.
 
subroutine vol7d_get_volanab (this, dimlist, vol1dp, vol2dp, vol3dp)
 Crea una vista a dimensione ridotta di un volume di anagrafica di tipo INTEGER(kind=int_b).
 
subroutine vol7d_get_volanaattrb (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp)
 Crea una vista a dimensione ridotta di un volume di attributi di anagrafica di tipo INTEGER(kind=int_b).
 
subroutine vol7d_get_voldatib (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp)
 Crea una vista a dimensione ridotta di un volume di dati di tipo INTEGER(kind=int_b).
 
subroutine vol7d_get_voldatiattrb (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp, vol7dp)
 Crea una vista a dimensione ridotta di un volume di attributi di dati di tipo INTEGER(kind=int_b).
 
subroutine vol7d_get_volanac (this, dimlist, vol1dp, vol2dp, vol3dp)
 Crea una vista a dimensione ridotta di un volume di anagrafica di tipo CHARACTER(len=vol7d_cdatalen).
 
subroutine vol7d_get_volanaattrc (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp)
 Crea una vista a dimensione ridotta di un volume di attributi di anagrafica di tipo CHARACTER(len=vol7d_cdatalen).
 
subroutine vol7d_get_voldatic (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp)
 Crea una vista a dimensione ridotta di un volume di dati di tipo CHARACTER(len=vol7d_cdatalen).
 
subroutine vol7d_get_voldatiattrc (this, dimlist, vol1dp, vol2dp, vol3dp, vol4dp, vol5dp, vol6dp, vol7dp)
 Crea una vista a dimensione ridotta di un volume di attributi di dati di tipo CHARACTER(len=vol7d_cdatalen).
 
subroutine, private vol7d_write_on_file (this, unit, description, filename, filename_auto)
 Scrittura su file di un volume Vol7d.
 
subroutine, private vol7d_read_from_file (this, unit, filename, description, tarray, filename_auto)
 Lettura da file di un volume Vol7d.
 
real function, dimension(size(this%ana), size(this%network)) realanavol (this, var)
 Return an ana volume of a requested variable as real data.
 
integer function, dimension(size(this%ana), size(this%network)) integeranavol (this, var)
 Return an ana volume of a requested variable as integer data.
 
subroutine move_datac (v7d, indana, indtime, indlevel, indtimerange, indnetwork, indananew, indtimenew, indlevelnew, indtimerangenew, indnetworknew)
 Move data for all variables from one coordinate in the character volume to other.
 
subroutine move_datar (v7d, indana, indtime, indlevel, indtimerange, indnetwork, indananew, indtimenew, indlevelnew, indtimerangenew, indnetworknew)
 Move data for all variables from one coordinate in the real volume to other.
 
subroutine v7d_rounding (v7din, v7dout, level, timerange, nostatproc)
 Reduce some dimensions (level and timerage) for semplification (rounding).
 

Variabili

integer, parameter vol7d_ana_a =1
 indice della dimensione "anagrafica" nei volumi di anagrafica, da usare nei metodi vol7d_get_volana*
 
integer, parameter vol7d_var_a =2
 indice della dimensione "variabile" nei volumi di anagrafica, da usare nei metodi vol7d_get_volana*
 
integer, parameter vol7d_network_a =3
 indice della dimensione "rete" nei volumi di anagrafica, da usare nei metodi vol7d_get_volana*
 
integer, parameter vol7d_attr_a =4
 indice della dimensione "attributo" nei volumi di anagrafica, da usare nei metodi vol7d_get_volana*
 
integer, parameter vol7d_ana_d =1
 indice della dimensione "anagrafica" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_time_d =2
 indice della dimensione "tempo" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_level_d =3
 indice della dimensione "livello verticale" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_timerange_d =4
 indice della dimensione "intervallo temporale" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_var_d =5
 indice della dimensione "variabile" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_network_d =6
 indice della dimensione "rete" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 
integer, parameter vol7d_attr_d =7
 indice della dimensione "attributo" nei volumi di dati, da usare nei metodi vol7d_get_voldati*
 

Descrizione dettagliata

Classe per la gestione di un volume completo di dati osservati.

Questo modulo definisce gli oggetti e i metodi per gestire volumi di dati meteorologici sparsi. I volumi definiti sono principalmente di 4 categorie:

Tutte le variabili sono inoltre disponibil1 in 5 tipi diversi:

Per ognuna delle dimensioni possibili, incluse le variabili e gli attributi con i loro diversi tipi, è definito un cosiddetto "vettore di descrittori", con un numero di elementi pari all'estensione della dimensione stessa, che contiene le informazioni necessarie a descrivere gli elementi di quella dimensione. In realtà l'utente non dovrà generalmente occuparsi di costruire un oggetto vol7d con le proprie mani ma utilizzerà nella maggior parte dei casi i metodi di importazione preconfezionati che importano dati da DB-All.e (vol7d_dballe_class) o dal DB Oracle del SIM (vol7d_oraclesim_class).

Il programma esempio_v7d.f90 contiene un esempio elementare di uso della classe vol7d:

! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
! authors:
! Davide Cesari <dcesari@arpa.emr.it>
! Paolo Patruno <ppatruno@arpa.emr.it>
! This program is free software; you can redistribute it and/or
! modify it under the terms of the GNU General Public License as
! published by the Free Software Foundation; either version 2 of
! the License, or (at your option) any later version.
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
! You should have received a copy of the GNU General Public License
! along with this program. If not, see <http://www.gnu.org/licenses/>.
PROGRAM esempio_vol7d
USE datetime_class ! strano ma purtroppo ci vuole !
IMPLICIT NONE
TYPE(vol7d) :: v7d1, v7d2, v7d3, v7dc, v7dl, v7dr
TYPE(datetime) :: enddate
DOUBLE PRECISION, POINTER :: vol1dd(:)
REAL, POINTER :: vol1dr(:), vol2dr(:,:)
INTEGER, POINTER :: vol1di(:)
INTEGER :: i, n1 = 5, n2 = 2
! prepara la strada a v7d
CALL init (v7d1)
CALL init (v7d2)
CALL init (v7d3)
! alloca i descrittori del volume, chiamabile piu' volte se con parametri diversi
CALL vol7d_alloc(v7d1, ndativard=1, ndatiattrb=2, ndativarattrb=1, ntime=n1)
CALL vol7d_alloc(v7d2, ndativard=1, ndativari=1, ntime=n2)
CALL vol7d_alloc(v7d3, nanavari=1)
! alloca il volume dati v7d
CALL vol7d_alloc_vol(v7d1)
CALL vol7d_alloc_vol(v7d2)
CALL vol7d_alloc_vol(v7d3)
! ho detto che c'è una variabile dati reale (ndativarr=1) e la definisco
CALL init(v7d1%dativar%d(1), btable='B12101')
CALL init(v7d2%dativar%d(1), btable='B12101')
CALL init(v7d2%dativar%i(1), btable='B12103', scalefactor=2)
! ho detto che c'è una variabile ana intera (nanavari=1) e la definisco
CALL init(v7d3%anavar%i(1), btable='B10000')
! anagrafica
CALL init(v7d1%ana(1), lon=11.5_fp_geo, lat=44.5_fp_geo)
CALL init(v7d2%ana(1), lon=11.5_fp_geo, lat=44.5_fp_geo)
CALL init(v7d3%ana(1), lon=11.5_fp_geo, lat=44.5_fp_geo)
! livello
CALL init(v7d1%level(1), level1=105, l1=10)
CALL init(v7d2%level(1), level1=105, l1=10)
! scadenza
CALL init(v7d1%timerange(1), timerange=4, p1=-3600, p2=0)
CALL init(v7d2%timerange(1), timerange=4, p1=-3600, p2=0)
! rete
CALL init(v7d1%network(1), name='generic')
CALL init(v7d2%network(1), name='generic')
CALL init(v7d3%network(1), name='generic')
! ho detto che ci sono due attributi dati byte (ndatiattrb=2) e li definisco
CALL init(v7d1%datiattr%b(1), btable='B33007')
CALL init(v7d1%datiattr%b(2), btable='B33192')
! ho detto che ho 1 variabile che ha attributi di tipo byte: è la variabile B22070
CALL init(v7d1%dativarattr%b(1), btable='B22070')
DO i=1,n1
! ci scrivo le date di riferimento
v7d1%time(i) = datetime_new(year=2007, month=3, day=i+5)
! ci scrivo il dato reale
v7d1%voldatid(1,i,1,1,1,1)=295.4+0.5*i
! ci scrivo gli attributi byte
v7d1%voldatiattrb(1,i,1,1,1,1,1)=60
v7d1%voldatiattrb(1,i,1,1,1,1,2)=40
END DO
DO i=1,n2
! ci scrivo le date di riferimento
v7d2%time(i) = datetime_new(year=2007, month=3, day=(i-1)*10+1)
! ci scrivo il dato reale
v7d2%voldatid(1,i,1,1,1,1)=306.4+0.50*i
v7d2%voldatii(1,i,1,1,1,1)=30640+50*i-300
END DO
v7d3%volanai(1,1,1) = 33
call display(v7d1)
call display(v7d2)
call display(v7d3)
! creo una vista su un vettore unidimensionale
! che scorre solo la dimensione del tempo (vol7d_time_d)
CALL vol7d_get_voldatid(v7d1, (/vol7d_time_d/), vol1dd)
print*,'Volume 1, dati double:'
print *,vol1dd
CALL vol7d_get_voldatid(v7d2, (/vol7d_time_d/), vol1dd)
print*,'Volume 2, dati double:'
print *,vol1dd
CALL vol7d_get_voldatii(v7d2, (/vol7d_time_d/), vol1di)
print*,'Volume 2, dati integer:'
print *,vol1di
! fondo i due volumi v7d1 e v7d2 ottenendo in un solo volume v7d1
CALL vol7d_merge(v7d1, v7d2, sort=.true.)
! gli aggiungo anche l'altro volume con soli dati di anagrafica
CALL vol7d_merge(v7d1, v7d3, sort=.true.)
CALL vol7d_get_voldatid(v7d1, (/vol7d_time_d/), vol1dd)
print*,'Volume merge, dati double:'
print *,vol1dd
CALL vol7d_get_voldatii(v7d1, (/vol7d_time_d/), vol1di)
print*,'Volume merge, dati integer:'
print *,vol1di
print*,'Volume merge, attributi:'
print*,v7d1%volanai
! converto il volume in real e distruggo l'originale
CALL vol7d_convr(v7d1, v7dr)
CALL delete(v7d1)
! ricreo la vista unidimensionale
CALL vol7d_get_voldatir(v7dr, (/vol7d_time_d,vol7d_var_d/), vol2dp=vol2dr)
print*,'Volume conv, dati real:'
print*,vol2dr
print*,'Volume conv, attributi:'
print*,v7dr%volanai
! copio il volume in un altro e distruggo l'originale
CALL vol7d_copy(v7dr, v7dc)
CALL delete (v7dr)
CALL vol7d_get_voldatir(v7dc, (/vol7d_time_d,vol7d_var_d/), vol2dp=vol2dr)
print*,'Volume copy, dati real:'
print*,vol2dr
print*,'Volume copy, attributi:'
print*,v7dc%volanai
! riformo il volume togliendo il penultimo livello temporale
v7dc%time(SIZE(v7dc%time)-1) = datetime_miss
CALL vol7d_reform(v7dc, miss=.true.)
CALL vol7d_get_voldatir(v7dc, (/vol7d_time_d,vol7d_var_d/), vol2dp=vol2dr)
print*,'Volume reform, (tolto il penultimo livello temporale) dati:'
print*,vol2dr
print*,'Volume reform, (tolto il penultimo livello temporale) attributi:'
print*,v7dc%volanai
! copio il volume in un altro tenendo solo le date prima di enddate
!CALL init(enddate, year=2007, month=3, day=8)
CALL vol7d_copy(v7dc, v7dl, ltime=(v7dc%time < datetime_new(year=2007, month=3, day=8)))
CALL vol7d_get_voldatir(v7dl, (/vol7d_time_d,vol7d_var_d/), vol2dp=vol2dr)
print*,'Volume copy (tolte le ultime date), dati:'
print*,vol2dr
print*,'Volume copy (tolte le ultime date), attributi:'
print*,v7dl%volanai
END PROGRAM esempio_vol7d
Distruttori per le 2 classi.
Costruttori per le classi datetime e timedelta.
Classi per la gestione delle coordinate temporali.
Classe per la gestione di un volume completo di dati osservati.

Generated with Doxygen.