GRIB API oktatóanyag >> GRIB API Fortran interface >> Adatok kiolvasása

A grib_get segítségével sokféle információt megtudhatunk a GRIB állományról. Fontos tudni, hogy a többféle rendelkezésre álló grib_get közül melyiket szeretnénk meghívni, ez a kívánt információ típusától függ (grib_get_int, grib_get_string, grib_get_real8). A rendelkezésre álló információk "kulcsokban" vannak tárolva.

Meg kell adnunk a grib nevét, az adatokat, amiket szeretnénk kiíratni, valamint a kimenő adatfájl megnevezését (ezeket a kódban vastaggal jelöltem).

A GRIB fájlban tárolt adatokhoz a következőképpen tudunk hozzáférni:

it2.f

program iterator ! olvassunk ki egy mezot implicit none include 'grib_api_f77.h' integer ifile, iret,iter real*8 lat,lon,value,missingValue integer n,flags character*256 filename, error, nev integer date, date2, time, time2,step integer igrib,parid, level integer szum open(10,file='output.txt') ! kimeno adatok hova keruljenek ifile=15 call grib_check(grib_open_file(ifile,'uv500.grb','r')) ! vizsgalt GRIB allomany neve szum = 1 C --------------------------------------------------------------------------------- C Az egesz fajl vizsgalata C --------------------------------------------------------------------------------- 10 iret=grib_new_from_file(ifile,igrib) if (igrib .eq. -1 ) then if (iret .ne.0) then call grib_check(iret) endif call grib_check(grib_release(igrib))
call grib_check(grib_close_file(ifile))
close(10)
stop endif flags = 0 call grib_check(grib_iterator_new(igrib,iter,flags)) ! ciklust inditunk a mezokre C ------------------------------------------------------------ C Egy-egy mezo vizsgalata C ----------------------------------------------------------- call grib_check(grib_get_int(igrib,'dataDate',date)) ! futtatas datuma call grib_check(grib_get_int(igrib,'validityDate',date2)) ! ervenyesseg datuma call grib_check(grib_get_int(igrib,'dataTime',time)) ! futtatas idopontja call grib_check(grib_get_int(igrib,'stepRange',step)) ! hanyadik idolepcso call grib_check(grib_get_int(igrib,'validityTime',time2)) ! ervenyesseg idopontja call grib_check(grib_get_int(igrib,'indicatorOfParameter',parid)) ! parid megadja az adott parameter tablazatbeli sorszamat call grib_check(grib_get_int(igrib,'level',level)) ! magassag call grib_check(grib_get_string(igrib,'shortName',nev)) ! parameter megnevezese szum = szum+1 n = 0 C Egy mezo osszes racspontjara vonatkozo erteket irassuk ki 20 iret = grib_iterator_next(iter,lat,lon,value) if ( iret .eq. 0 ) goto 30 if ((nev.eq.'u').and.(level.eq.500)) then ! ki szeretnenk iratni az u-val jelolt x iranyu szelmezot az 500 hPa-s szintre vonatkozoan write(10,995) date,lat,lon,value ! irassuk ki: datum, koordinatak, ertekek endif n=n+1 goto 20 995 format(I8,2F7.1,F8.2,X,5A) C -------------------------------------------------------------- C Zarjunk be mindent, takaritsuk ki a memoriat 30 continue call grib_check(grib_iterator_delete(iter)) goto 10 call grib_check(grib_release(igrib)) call grib_check(grib_close_file(ifile)) close(10) stop end

Az output.txt file-ba kerülő kimenet (az egyes mezők részét képező elemek kiírása):

# datum | lat | lon | ertek | megnevezes
20050725 -25.5 277.5 5.88 v
20050725 -25.5 279.0 6.06 v
20050725 -25.5 280.5 6.21 v
20050725 -25.5 282.0 4.17 v
20050725 -25.5 283.5 0.81 v

Itt már sokféle lehetőségünk van, megválaszthatjuk, hogy mely adatokat szeretnénk kiíratni, vagy hogy a fájlba csak azok kerüljenek bele, amikor az egyik értéke adott (mondjuk csak a felszínközeli hőmérsékletet szeretnénk kiíratni):

if ((nev.eq.2t).and.(level.eq.2)) then
write(10,995) date,lat,lon,value
endif

Vagy ha az érvényesség dátumát és időpontját is szeretnénk beletenni:

if ((nev.eq.2t).and.(level.eq.2)) then
write(10,995) date2,time2,lat,lon,value
endif

Oldal tetejére >> Vissza a főoldalra