![Page 1: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/1.jpg)
GRIB API
ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale
Anna Chiara Goglio Palmanova, Gennaio 2017
![Page 2: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/2.jpg)
GRIB API
INDICE della presentazione
1. Codice GRIB
• Struttura e caratteristiche
• Edizioni 1 e 2
2. Applicativi GRIB API
• Definizione
• Interfacce e Struttura
• Caratteristiche
• Logica di accesso ai GRIB
• Chiavi
‒ Caratteristiche
‒ Esempi
• Indici
3. Interfaccia FORTRAN 90
• Regole generali
• Struttura dei programmi
• Funzioni disponibili
• Gestione degli errori
4. Esempi
• Estrazione campo in un
punto lat/lon
• Estrazione su tutta la griglia
• Creazione e conversione file
GRIB
5. Documentazione
![Page 3: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/3.jpg)
....
Codice GRIB (GRIdded Binary)
file.GRIB
Messaggio #1
Messaggio #N
Messaggio #2
......
Sezione 0: Indicator
Sezione N: End
Slide 1/23
GRIB API / Codice GRIB
Formati standard WMO (World Meteorological Organization) per la trasmissione e l’archiviazione di campi definiti su grigliato regolare
Compatti Veloci da codificare/decodificare Auto-descrittivi Flessibili
GRIB
Sezioni … : Definition
Sezione N-1: Binary data
Sequenza di messaggi o record
Divisioni logiche obbligatorie/opzionali (specifiche dell’edizione)
Ottetti di bit n° da 1 per ogni sezione contenenti le informazioni in binario (sequenze iniziale e finale del messaggio in ASCII)
Definizione info generali del record, griglia, campi,..
Tabelle WMO per la codifica
![Page 4: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/4.jpg)
Edizioni GRIB 1 e GRIB 2 GRIB API / Codice GRIB
GRIB 1 (1985) GRIB 2 (2001)
Diversa codifica + compatto
Sezioni di definizione separate + flessibile
Possibilità di creare multi-GRIB adatto a long-range/climate run
(tempi,campi,livelli,griglie) ed ensamble run
Codifica di errori e statistica
Codifica di immagini radar
e dati satellite
Codifica dati spettrali
Codifica serie temporali
⇒ ⇒ ⇒
Slide 2/23
Miglioramenti edizione GRIB 2
![Page 5: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/5.jpg)
GRIB API
INDICE della presentazione
1. Codice GRIB
• Struttura e caratteristiche
• Edizioni 1 e 2
2. Applicativi GRIB API
• Definizione
• Interfacce e Struttura
• Caratteristiche
• Logica di accesso ai GRIB
• Chiavi
‒ Caratteristiche
‒ Esempi
• Indici
3. Interfaccia FORTRAN 90
• Regole generali
• Struttura dei programmi
• Funzioni disponibili
• Gestione degli errori
4. Esempi
• Estrazione campo in un
punto lat/lon
• Estrazione su tutta la griglia
• Creazione e conversione file
GRIB
5. Documentazione
![Page 6: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/6.jpg)
Le GRIB API (prodotte da ECMWF) sono applicativi per la gestione di dati in formato GRIB utilizzabili tramite varie interfacce
altamente performanti
estremamente versatili
molto flessibili
scarsa documentazione approccio poco intuitivo
~ 40 funzioni per interrogare, copiare, modificare e convertire
Indipendenti dall’edizione GRIB
35% di guadagno in velocità rispetto alle CDO
Slide 3/23
GRIB API / Applicativi GRIB API
GRIB API (Application Program Interface)
![Page 7: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/7.jpg)
Interfacce e struttura
Interfacce disponibili: C (nativo) Fortran 90 Phyton
GRIB tools:
} gestione tramite chiamate a funzioni
Applicativi pronti } gestione tramite comandi di linea
+ Intuitivi
+ Performanti + Versatili
C,F90,Python
GRIB tools
GRIB API
GRIB1
GRIB2
Slide 4/23
GRIB API / Applicativi GRIB API
Decoding
rules
![Page 8: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/8.jpg)
C,F90,Python
GRIB tools
GRIB API
GRIB1
Chiamate INDIPENDENTI dalla versione GRIB
Permettono la CONVERSIONE tra versioni GRIB
Interfacce e caratteristiche
GRIB2
Interfacce disponibili: C (nativo) Fortran 90 Phyton
GRIB tools:
} gestione tramite chiamate a funzioni
Applicativi pronti } gestione tramite comandi di linea
+ Intuitivi
+ Performanti + Versatili
Slide 5/23
GRIB API / Applicativi GRIB API
Decoding
rules IINDIPENDENTI dalla
versione delle regole di codifica
![Page 9: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/9.jpg)
....
Accesso ai GRIB
file.GRIB
Messaggio #1
Messaggio #N
Messaggio #2
....
Sezione 0: Indicator
Sezione 1: Product def
Sezione 4: Binary data
Sezione 5: End
grib_dump (grib TOOLS)
Slide 6/23
GRIB API / Applicativi GRIB API
![Page 10: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/10.jpg)
GRIBEX, CDO, … Ricerca per elemento in array (GRIB caricato in memoria) GRIB API Ricerca valore della chiave (accesso solo agli ottetti corrispondenti)
....
Accesso key-based - Accesso array-based
file.GRIB
Messaggio #1
Messaggio #N
Messaggio #2
....
Sezione 0: Indicator
Sezione 1: Product def
Sezione 4: Binary data
Sezione 5: End
array(i)
array(j)
Slide 7/23
GRIB API / Applicativi GRIB API
Veloce
![Page 11: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/11.jpg)
....
Accesso key-based - Accesso array-based
file.GRIB
Messaggio #1
Messaggio #N
Messaggio #2
....
Sezione 0: Indicator
Sezione 1: Product def
Sezione 4: Binary data
Sezione 5: End
Slide 7/23
GRIB API / Applicativi GRIB API
GRIBEX, CDO, … Ricerca per elemento in array (GRIB caricato in memoria) GRIB API Ricerca per posizione della chiave (accesso SOLO agli ottetti corrispondenti)
Veloce
![Page 12: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/12.jpg)
GRIB API keys - caratteristiche Chiavi individuate tramite nome (basato sulla documentazione WMO) Formato nativo (real, integer o string)
non è noto (solo l’interfaccia in C restituisce il tipo) in alcuni casi si può convertire (nome:i, nome:l, nome:d, nome:s)
Codificate/Calcolate
Modificabili/READ-ONLY Le chiavi in un messaggio variano a seconda di
• contenuto del messaggio (per es. forecastTime/dataTime) • versione GRIB • valore attribuito ad alcune di esse (per es. edition )
Elenco keys disponibili: grib_ls, grib_dump (grib TOOLS)
NOME FORMATO del valore TIPO ACCESSIBILITA’ del valore DISPONIBILITA’
Slide 8/23
GRIB API / Applicativi GRIB API
![Page 13: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/13.jpg)
GRIB API keys - esempi
Categoria
(namespace)
Keys
GRIB1/GRIB2
Es. di valori
ls - editionNumber
- dataType
1,2
an,fc
parameter - name
- shortName
- indicatorOfParameter/parameterNumber
- indicatorOfTypeOfLevel/parameterCategory
- units/parameterUnits
Temperature
2t,10u
172,167
sfc,100
K, m s-1
vertical - level 0,500
time - dataDate
- dataTime
- forecastTime
20151125
1200
90
geography - iScansNegatively
- jScansPositively
- latitudeOfFirstGridPointInDegrees
- latitudeOfLastGridPointInDegrees
- longitudeOfFirstGridPointInDegrees
- latitudeOfLastGridPointInDegrees
0, 1
0, 1
data values - numberOfPoints/numberOfDataPoints 259920
i
j
i
j
Slide 9/23
GRIB API / Applicativi GRIB API
![Page 14: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/14.jpg)
GRIB API index: gestione delle keys
INDICE Gestione messaggi tramite accesso ai soli ottetti relativi alle chiavi scelte
Index_keys=‘indicatorOfParameter, indicatorOfTypeOfLevel, level, shortName, units’
Slide 10/23
GRIB API / Applicativi GRIB API
![Page 15: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/15.jpg)
GRIB API
INDICE della presentazione
1. Codice GRIB
• Struttura e caratteristiche
• Edizioni 1 e 2
2. Applicativi GRIB API
• Definizione
• Interfacce e Struttura
• Caratteristiche
• Logica di accesso ai GRIB
• Chiavi
‒ Caratteristiche
‒ Esempi
• Indici
3. Interfaccia FORTRAN 90
• Regole generali
• Struttura dei programmi
• Funzioni disponibili
• Gestione degli errori
4. Esempi
• Estrazione campo in un
punto lat/lon
• Estrazione su tutta la griglia
• Creazione e conversione file
GRIB
5. Documentazione
![Page 16: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/16.jpg)
Interfaccia FORTRAN 90 / Regole generali
o All’inizio del programma è necessario chiamare il modulo grib api: USE grib_api o Tutti gli oggetti sono gestiti tramite un numero ID:
• ID file.GRIB • ID messaggi – corrisponde al numero del record • ID indice • ID iterator
o Per poter leggere/scrivere un file.GRIB è necessario aprirlo/chiuderlo: CALL grib_open_file/CALL grib_close_file o Per creare un indice contenente solo le chiavi scelte: CALL grib_index_create/CALL grib_new_from_index CALL grib_index_release oppure per accedere ad un intero messaggio questo deve essere caricato/scaricato: CALL grib_new_from_file CALL grib_release
Slide 11/23
GRIB API / Interfaccia F90
![Page 17: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/17.jpg)
Interfaccia FORTRAN 90 / Struttura generale dei programmi
PROGRAM nome_programma ! Modulo grib_api: USE grib_api IMPLICIT NONE ….. ! Apertura file.GRIB CALL grib_open_file(id_filein,file.GRIB,open_mode) ! Apertura di un messaggio completo dal file.GRIB CALL grib_new_from_file(id_filein, id_record) ! Oppure ! Creazione di un indice dal file.GRIB CALL grib_index_create(id_index,file.GRIB,index_keys) …… ! Chiusura messaggio e/o indice CALL grib_index_release(id_index) CALL grib_release(id_record) ! Chiusura file.GRIB CALL grib_close_file(id_filein) END PROGRAM nome_programma
‘r’ = read ‘w’ = write
Elenco chiavi dell’indice da creare ed eventuali conversioni di tipo, per es. ‘indicatorOfParameter,indicatorOfTypeOfLevel:l,level’
Intent(in) Intent(out)
Slide 12/23
GRIB API / Interfaccia F90
![Page 18: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/18.jpg)
Interfaccia FORTRAN 90 / Funzioni disponibili
~ 40 funzioni disponibili Categorie di funzioni disponibili:
Gestione dei file.GRIB Gestione dei messaggi Gestione degli indici Gestione delle chiavi Gestione dei dati Gestione degli errori
Formato argomenti restituiti:
nome_funzione(arg1,arg2,..argN(out),..) argN(out) formato nativo nome_funzione_formato(arg1,arg2,..argN(out),..) argN(out) formato
Slide 13/23
GRIB API / Interfaccia F90
![Page 19: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/19.jpg)
Interfaccia FORTRAN 90 / Funzioni per la gestione di file.GRIB
Apertura file in modalità di lettura o scrittura grib_open_file(id_filein,file.GRIB,open_mode) open_mode: ‘r’=read (lettura-modifica),’w’=write (creazione) Chiusura file grib_close_file(id_filein) Scrittura di un messaggio presente in memoria in un file.GRIB grib_write(id_mes,id_outfile) outfile.GRIB deve essere stato aperto in scrittura Lettura di n byte da file.GRIB grib_read_bytes(file.GRIB,buffer,nbyte) buffer: stringa Scrittura n byte in file.GRIB grib_write_bytes(file.GRIB,buffer,nbyte)
Intent(in) Intent(out)
Slide 14/23
GRIB API / Interfaccia F90
![Page 20: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/20.jpg)
Interfaccia FORTRAN 90 / Funzioni per la gestione di messaggi
Conteggio messaggi presenti in un file.GRIB grib_count_in_file(id_filein,mes_num) Apertura di un messaggio da file.GRIB grib_new_from_file(id_filein, id_record) Chiusura di un messaggio grib_release(id_mes) Lettura del numero di byte occupati dal messaggio grib_get_message_size(id_mes, byte_size) Copia di un messaggio in memoria grib_copy_message(id_mes,array) array: character(len=1),dimension(1:byte_size) Creazione di un messaggio da un array caricato in memoria grib_new_from_message(id_mes, array) Elenco del contenuto grib_dump(id_mes)
Intent(in) Intent(out)
Slide 15/23
GRIB API / Interfaccia F90
![Page 21: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/21.jpg)
Creazione da file GRIB (scelta delle chiavi) grib_index_create(id_index,file.GRIB,index_keys) Creazione da un altro indice (selezione valore delle chiavi) grib_new_from_index(id_index, id_new_index) Chiusura indice creato grib_index_release(id_index) Aggiunta di più file GRIB da gestire tramite un unico indice grib_index_add_file(id_index,file.GRIB) Conteggio valori distinti assunti da ciascuna chiave nel file GRIB grib_index_get_size(id_index, key, size) Selezione del contenuto in base al valore delle chiavi grib_index_select(id_index,key,key_value) l’indice NON viene modificato con questa operazione, è necessario crearne uno nuovo con grib_new_from_index Salvataggio in file.idx grib_index_write(id_index,file.idx) Lettura file.idx grib_index_read(id_index,file.idx)
Interfaccia FORTRAN 90 / Funzioni per la gestione di indici
Intent(in) Intent(out)
Slide 16/23
GRIB API / Interfaccia F90
![Page 22: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/22.jpg)
Conteggio valori distinti assunti da ciascuna chiave in un indice grib_index_get_size(id_index, key, size)
Cattura valore/valori di una chiave da un messaggio o da un indice grib_get(id_mes,key,value) grib_get(id_index,key,values) Modifica valore di una chiave in un messaggio grib_set(id_mes,key,new_value) Controllo dello stato di una chiave in un messaggio (se è missing o meno) grib_is_missing(id_mes,key,flag) flag: 0=not missing, 1=missing Settaggio stato missing per una chiave in un messaggio grib_set_missing(id_mes,key) Creazione, cancellazione, interrogazione e scorrimento iterator (scorre i valori
delle chiavi in un messaggio): grib_keys_iterator_new(id_mes,id_iterator,name_space) se name_sapace è lasciato vuoto scorre su tutti i tipi di chiavi grib_keys_iterator_delete(id_iterator) grib_keys_iterator_get_name(id_iterator,key_name) grib_keys_iterator_next(id_iterator) grib_keys_iterator_rewind(id_iterator)
Interfaccia FORTRAN 90 / Funzioni per la gestione di chiavi
Intent(in) Intent(out)
Slide 17/23
GRIB API / Interfaccia F90
![Page 23: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/23.jpg)
Conteggio valori distinti assunti da ciascuna chiave in un indice grib_index_get_size(id_index, key, size)
Cattura valore/valori di una chiave da un messaggio o da un indice grib_get(id_mes,key,value) grib_get(id_index,key,values) Modifica valore di una chiave in un messaggio grib_set(id_mes,key,new_value) Controllo dello stato di una chiave in un messaggio (se è missing o meno) grib_is_missing(id_mes,key,flag) flag: 0=not missing, 1=missing Settaggio stato missing per una chiave in un messaggio grib_set_missing(id_mes,key) Creazione, cancellazione, interrogazione e scorrimento iterator (scorre i valori
delle chiavi in un messaggio): grib_keys_iterator_new(id_mes,id_iterator,name_space) se name_sapace è lasciato vuoto scorre su tutti i tipi di chiavi grib_keys_iterator_delete(id_iterator) grib_keys_iterator_get_name(id_iterator,key_name) grib_keys_iterator_next(id_iterator) grib_keys_iterator_rewind(id_iterator)
Interfaccia FORTRAN 90 / Funzioni per la gestione di chiavi
Slide 17/23
GRIB API / Interfaccia F90
grib_get –p key1,key2,.. File.GRIB
grib_set –s key1=val1,key2=val2,.. in.GRIB out.GRIB
grib TOOLS
grib TOOLS
Intent(in) Intent(out)
![Page 24: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/24.jpg)
Cattura coordinate e valore di un messaggio su tutta la griglia grib_get_data(id_mes,lats,lons,values) Cattura il valore campo nel punto di griglia più vicino a una certa coordinata e della distanza di questo dal punto grib_find_nearest_single(id_index,ls_flag,inlat,inlon,outlat,outlon, value,distance,index) Cattura il valore campo nei 4 punti di griglia più vicini a una certa coordinata e della distanza di questi dal punto grib_find_nearest_four_single(id_index,ls_flag,inlat,inlon,outlats, outlons,values,distances,indexs) Cattura valori del campo del punto di griglia più vicino ad ogni coordinata di un array di coordinate e della distanza di questi grib_find_nearest_multiple(id_index,ls_flag,inlats,inlons,outlats, outlons,values,distances,indexs) ls_flag: true=considera solo punti di tipo land false=considera punti land/sea
Interfaccia FORTRAN 90 / Funzioni per la gestione di dati
Intent(in) Intent(out)
Slide 18/23
Latitudine Longitudine Valore
... ... ...
GRIB API / Interfaccia F90
![Page 25: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/25.jpg)
Interfaccia FORTRAN 90 / Gestione degli errori
Tutte le funzioni hanno un argomento opzionale per l’exit status
grib_...(arg1,arg2,…,ex) ex /= 0 : ERRORE nell’esecuzione • Errore associato al codice ex: grib_get_error_string(ex,error_str) • Trappola: esce dall’esecuzione se ex corrisponde ad error_string grib_check(ex,soubroutine_name,error_string)
Se NON si utilizza ex l’esecuzione viene interrotta appena ex/=0 Altro utilizzo di ex (per es. ciclo su tutti i record in un file GRIB):
grib_new_from_file(id_file,id_mes,ex) DO WHILE (ex/=GRIB_END_OF_FILE) …. grib_new_from_file(id_file,id_mes,ex) END DO
Intent(in) Intent(out)
Slide 19/23
GRIB API / Interfaccia F90
![Page 26: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/26.jpg)
GRIB API
INDICE della presentazione
1. Codice GRIB
• Struttura e caratteristiche
• Edizioni 1 e 2
2. Applicativi GRIB API
• Definizione
• Interfacce e Struttura
• Caratteristiche
• Logica di accesso ai GRIB
• Chiavi
‒ Caratteristiche
‒ Esempi
• Indici
3. Interfaccia FORTRAN 90
• Regole generali
• Struttura dei programmi
• Funzioni disponibili
• Gestione degli errori
4. Esempi
• Estrazione campo in un
punto lat/lon
• Estrazione su tutta la
griglia
• Creazione e conversione
file GRIB
5. Documentazione
![Page 27: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/27.jpg)
Interfaccia FORTRAN 90 / Esempi: 1) Estrazione in un punto lat/lon
PROGRAM point_extraction ! Modulo grib_api: USE grib_api IMPLICIT NONE INTEGER :: ex, id_filein,id_index,id_sel REAL(KIND=8) :: inlat=45.000, inlon=13.000 REAL(KIND=8) :: outlat, outlon, index, value, distance
! Apertura file.GRIB CALL grib_open_file(id_filein,’../data/file.GRIB’,’r’,ex)
! Creazione di un indice contenente le chiavi relative a nome, tipo e livello delle variabili CALL grib_index_create(id_index,file.GRIB,‘indicatorOfParameter,indicatorOfTypeOfLevel:l,level’,ex)
! Selezione del campo nell’indice in base a nome, tipo e livello della T2 CALL grib_index_select(id_index,’indicatorOfParameter’,167,ex) CALL grib_index_select(id_index,’indicatorOfTypeOfLevel’,100,ex) CALL grib_index_select(id_index,’level’,0,ex)
! Creo un nuovo indice che punti solo ai valori selezionati CALL grib_new_from_index(id_index,id_sel,ex)
! Lettura del valore del campo nel punto di griglia più vicino alle coordinate inlat/inlon e distanza da queste CALL grib_find_nearest_single(id_sel,.false.,inlat,inlon,outlat,outlon,value,distance,index,ex) WRITE(UNIT=*,FMT='(A,F7.3,A,F7.3,A,F9.3,A,F9.3)')’outlat=’,outlat,’outlon=’,outlon,’dist=’,distance,’val=’,value
! Chiusura indici creati CALL grib_index_release(id_index) CALL grib_index_release(id_sel)
! Chiusura file.GRIB CALL grib_close_file(id_filein) END PROGRAM point_extraction
Intent(in) Intent(out)
Slide 20/23
GRIB API / Esempi
![Page 28: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/28.jpg)
Interfaccia FORTRAN 90 / Esempi: 1) Estrazione in un punto lat/lon
PROGRAM point_extraction ! Modulo grib_api: USE grib_api IMPLICIT NONE INTEGER :: ex, id_filein,id_index,id_sel REAL(KIND=8) :: inlat=45.000, inlon=13.000 REAL(KIND=8) :: outlat, outlon, index, value, distance
! Apertura file.GRIB CALL grib_open_file(id_filein,’../data/file.GRIB’,’r’,ex)
! Creazione di un indice contenente le chiavi relative a nome, tipo e livello delle variabili CALL grib_index_create(id_index,file.GRIB,‘indicatorOfParameter,indicatorOfTypeOfLevel:l,level’,ex)
! Selezione del campo nell’indice in base a nome, tipo e livello della T2 CALL grib_index_select(id_index,’indicatorOfParameter’,167,ex) CALL grib_index_select(id_index,’indicatorOfTypeOfLevel’,100,ex) CALL grib_index_select(id_index,’level’,0,ex)
! Creo un nuovo indice che punti solo ai valori selezionati CALL grib_new_from_index(id_index,id_sel,ex)
! Lettura del valore del campo nel punto di griglia più vicino alle coordinate inlat/inlon e distanza da queste CALL grib_find_nearest_single(id_sel,.false.,inlat,inlon,outlat,outlon,value,distance,index,ex) WRITE(UNIT=*,FMT='(A,F7.3,A,F7.3,A,F9.3,A,F9.3)')’outlat=’,outlat,’outlon=’,outlon,’dist=’,distance,’val=’,value
! Chiusura indici creati CALL grib_index_release(id_index) CALL grib_index_release(id_sel)
! Chiusura file.GRIB CALL grib_close_file(id_filein) END PROGRAM point_extraction
Intent(in) Intent(out)
ATTENZIONE al tipo attribuito alle key
Slide 20/23
GRIB API / Esempi
![Page 29: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/29.jpg)
Interfaccia FORTRAN 90 / Esempi: 2) Estrazione su tutta la griglia
PROGRAM info ! Modulo grib_api: USE grib_api IMPLICIT NONE INTEGER :: ex, id_filein,id_index,id_se, gridpoints_num, data, ora REAL(KIND=8),DIMENSION(:),ALLOCATABLE :: lats,lons,values ….apertura file.GRIB… ….creazione indice var T2…
! Lettura di data e ora CALL grib_get(id_sel,’dataDate’,data,ex) CALL grib_get(id_sel,’dataTime’,ora,ex)
! Lettura numero dei punti di griglia CALL grib_get(id_sel,’numberOfPoints’,gridpoints_num,ex)
ALLOCATE(lats(gridpoints_num)) ALLOCATE(lons(gridpoints_num)) ALLOCATE(values(gridpoints_num))
! Lettura lat,lon e valori su tutta la griglia CALL grib_get_data(id_sel,lats,lons,values,ex)
! Ciclo su tutti i punti di griglia DO i=1,gridpoints_num WRITE(UNIT=*,FMT='(A,A,A,A,A,F7.3,A,F7.3,A,F9.3)')’data=’,data,’ora=’,ora,’lat=’,lats(i),’lon=‘,lons(i),’val=’,values(i) END DO …chiusura indici…. …chiusura file GRIB… END PROGRAM info
Intent(in) Intent(out)
Slide 21/23
GRIB API / Esempi
![Page 30: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/30.jpg)
Interfaccia FORTRAN 90 / Esempi: 2) Estrazione su tutta la griglia
PROGRAM info ! Modulo grib_api: USE grib_api IMPLICIT NONE INTEGER :: ex, id_filein,id_index,id_se, gridpoints_num, data, ora REAL(KIND=8),DIMENSION(:),ALLOCATABLE :: lats,lons,values ….apertura file.GRIB… ….creazione indice var T2…
! Lettura di data e ora CALL grib_get(id_sel,’dataDate’,data,ex) CALL grib_get(id_sel,’dataTime’,ora,ex)
! Lettura numero dei punti di griglia CALL grib_get(id_sel,’numberOfPoints’,gridpoints_num,ex)
ALLOCATE(lats(gridpoints_num)) ALLOCATE(lons(gridpoints_num)) ALLOCATE(values(gridpoints_num))
! Lettura lat,lon e valori su tutta la griglia CALL grib_get_data(id_sel,lats,lons,values,ex)
! Ciclo su tutti i punti di griglia DO i=1,gridpoints_num WRITE(UNIT=*,FMT='(A,A,A,A,A,F7.3,A,F7.3,A,F9.3)')’data=’,data,’ora=’,ora,’lat=’,lats(i),’lon=‘,lons(i),’val=’,values(i) END DO …chiusura indici…. …chiusura file GRIB… END PROGRAM info
Intent(in) Intent(out)
ATTENZIONE al verso di lettura della griglia
latitudeOfFirstGridPoint
latitudeOfLastGridPoint
jScansPositively=1
jScansPositively=0
NO
OK
Slide 21/23
GRIB API / Esempi
![Page 31: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/31.jpg)
Interfaccia FORTRAN 90 / Esempi: 3) Creazione e conversione GRIB
PROGRAM edition_conversion
! Modulo grib_api: USE grib_api IMPLICIT NONE INTEGER :: ex, id_filein,id_index,id_sel, id_fileout, id_newmes, mes_size CHARACTER(LEN=1),DIMENSION(:),ALLOCATABLE :: message
! Apro il file GRIB in lettura CALL grib_open_file(id_filein,’../data/file.GRIB’,'r',ex)
! Apro il file.grib2 in scrittura CALL grib_open_file(id_outfile,’../data/newfile.grib2’,'w',ex)
….creazione indice var T2…
! Leggo le dimensioni del record CALL grib_get_message_size(id_sel,mes_size, ex)
ALLOCATE(message(mes_size))
! Copio il record nell'array CALL grib_copy_message(id_sel,message,ex)
! Creo il nuovo record CALL grib_new_from_message(id_newmes,message,ex)
! Modifico il valore della key relativa all’edizione del GRIB (CONVERSIONE) CALL grib_set(id_newmes,‘editionNumber',2,ex)
! Scrivo il record nel nuovo file CALL grib_write(id_newmes,id_outfile,ex)
…chiusura indici…. …chiusura file GRIB…
END PROGRAM edition_conversion
Intent(in) Intent(out)
Slide 22/23
GRIB API / Esempi
![Page 32: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/32.jpg)
GRIB API
INDICE della presentazione
1. Codice GRIB
• Struttura e caratteristiche
• Edizioni 1 e 2
2. Applicativi GRIB API
• Definizione
• Interfacce e Struttura
• Caratteristiche
• Logica di accesso ai GRIB
• Chiavi
‒ Caratteristiche
‒ Esempi
• Indici
3. Interfaccia FORTRAN 90
• Regole generali
• Struttura dei programmi
• Funzioni disponibili
• Gestione degli errori
4. Esempi
• Estrazione campo in un
punto lat/lon
• Estrazione su tutta la griglia
• Creazione e conversione file
GRIB
5. Documentazione
![Page 33: Anna Chiara Goglio Palmanova, Gennaio 2017cmsarpa.regione.fvg.it/.../2017gen18_arpafvg_crma_goglio_grib_api10.pdf · GRIB API ARPA FVG – CRMA Centro Regionale di Modellistica Ambientale](https://reader033.vdocuments.net/reader033/viewer/2022052805/605758839c29522b711492e5/html5/thumbnails/33.jpg)
Documentazione
Guida GRIB API ECMWF (elenco funzioni, esempi): https://software.ecmwf.int/wiki/display/GRIB/Home Slide introduttive GRIB API: https://software.ecmwf.int/wiki/display/GRIB/Training+material Chiavi (elenco nomi, esempi): https://software.ecmwf.int/wiki/display/GRIB/GRIBEX+keys https://software.ecmwf.int/wiki/download/attachments/53515359/gribapi2_keys_201
5.pdf?api=v2 Guida GRIB WMO: http://www.wmo.int/pages/prog/www/WDM/Guides/Guide-binary-2.html
Slide 23/23
GRIB API / Documentazione