GRIB API oktatóanyag >> GRIB API Fortran interface >> Fájlban tárolt adatok megismerése

A GRIB fájlban tárolt mezők jellemzőit is ki tudjuk listázni. Ezek tárolják a rácshálózatra, az időlépcsőre, a benne tárolt állapotjelzőre vonatkozó információt. Külön ilyen egységben van tárolva minden időpont, minden magassági szint és minden állapotjelző. Pl. 100 időlépcső, 1 magassági szint és 2 tárolt változó esetén 200 darab olyen listát kapunk, mint a lent bemutatott.

Alapból egy ilyen tömböt kétféleképpen tudunk lekérni, aszerint, hogy a name_space-nek milyen értéket adunk (GRIB állomány: ecm.grib:

Kódrész (egyik lehetőség, ez a hagyományos kulcsokat használja):

name_space='ls'

Kimenet:

-- GRIB N.   1 --	sorszám
 edition:1		melyik GRIB verzió
 centre:ecmf		GRIB-et készítette
 typeOfLevel:surface	felszínre/magassági szintre/nyomási szintre
 level:0		szint magassága
 dataDate:20101101	futtatás dátuma
 stepRange:0		időlépcső sorszáma
 dataType:an		analízis/forecast
 shortName:z		állapotjelző rövid megnevezése
 packingType:grid_simpleaz adatok tárolásának módjára utal
 gridType:regular_ll	rácshálózat típusa

Kódrész (másik lehetőség, ez a MARS-féle ((Meteorological Archival and Retrieval System) kulcsokat használja):

name_space='mars'

Kimenet:

-- GRIB N.   1 --
 domain:g
 levtype:sfc	felszínre/magassági szintre/nyomási szintre
 date:20101101	dátum
 time:0000	időpont
 step:0		időlépcső sorszáma
 param:129.128	állapotjelző kódszáma
 class:ei
 type:an	analízis/forecast
 stream:oper
 expver:0001

A két variáció kb. ugyanazokat az információkat adja ki, csak kicsit másképp. A name_space a grib_keys_iterator_new(igrib,kiter,name_space) függvénynek bemenő paramétere. Az ls az alapértelmezett kimenetet adja, amit a grib_ls parancs is, míg a mars valamennyire más megnevezéseket használ (pl. typeOfLevel = levtype, stepRange = step, dataType = type, shortName = param).

A teljes forráskód:

mezok.f

program keys_iterator
include 'grib_api_f77.h'
character*20 name_space
integer kiter,ifile,igrib,iret
character*256 key, value
character*512 all
integer len,strlen
integer grib_count
len=256
open(10,file='output.txt') output fájl megnevezése
ifile=15
call grib_check(grib_open_file(ifile,'ecm.grib','r')) megnyitni kívánt GRIB állomány megnevezése

grib_count=0
10 iret=grib_new_from_file(ifile,igrib)
if (igrib .eq. -1 ) then
if (iret .ne.0) then
call grib_check(iret)
endif
stop
endif
grib_count=grib_count+1
write(10,'("-- GRIB N.",I4," --")') grib_count

name_space='ls' ! milyen formatumban szeretnenk
C name_space='mars'

call grib_check(grib_keys_iterator_new(igrib,kiter,name_space))
20 if (grib_keys_iterator_next(kiter) .ne. 1) goto 10

call grib_check(grib_keys_iterator_get_name(kiter,key))
call grib_check(grib_get_string(igrib,key,value))
all= trim(key)//':' // trim(value)
C betette a parameter megnevezeset es erteket is egy character tipusu valtozoba

write(10,*) trim(all)
goto 20

call grib_check(grib_keys_iterator_delete(kiter))
call grib_check(grib_release(igrib))
call grib_check(grib_close_file(ifile))
close(10)
end

Oldal tetejére >> Vissza a főoldalra