GRIB-et nem csak olvasni, hanem írni is tudunk. A legegyszerűbb eset, ha csak másolatot készítünk a GRIB-ről:
program set
implicit none
include 'grib_api_f77.h'
integer err
integer infile,outfile, igrib,iret
character*256 error
infile=15
outfile=16
call grib_check(grib_open_file(infile,'
uv500.grb','r'))
call grib_check(grib_open_file(outfile,'out.GRIB','w'))
call grib_check(grib_new_from_file(infile,igrib))
call grib_check(grib_write(igrib,outfile))
! kiiras
call grib_check(grib_release(igrib))
call grib_check(grib_close_file(infile))
call grib_check(grib_close_file(outfile))
stop
end
Bizonyos jellemzőket módosítani is tudunk. Például a GRIB tartalmazza a létrehozó meteorológiai központ nevét és azonosítószámát (részletes lista).
program set
implicit none
include 'grib_api_f77.h'
integer err
integer*4 centre, int_value
character*10 string_value
integer infile,outfile, igrib,iret
character*256 error
infile=15
outfile=16
call grib_check(grib_open_file(infile,'1.GRIB','r'))
call grib_check(grib_open_file(outfile,'out.GRIB','w'))
call grib_check(grib_new_from_file(infile,igrib))
call grib_check(grib_get_int(igrib,'centre',int_value))
call grib_check(grib_get_string(igrib,'centre',string_value))
write(*,*) int_value, string_value
centre=80
! beallitjuk az uj erteket
call grib_check(grib_set_int(igrib,'centre',centre))
call grib_check(grib_get_int(igrib,'centre',int_value))
call grib_check(grib_get_string(igrib,'centre',string_value))
write(*,*) int_value, string_value
call grib_check(grib_write(igrib,outfile))
! kiiras
call grib_check(grib_release(igrib))
call grib_check(grib_close_file(infile))
call grib_check(grib_close_file(outfile))
end
A futtatás eredménye:
nimbus:~/GRIBapi/example3$ ./a.out
7 kwbc ! eredeti kozpont
80 cnmc ! modositott kozpont
Tudunk olyat is, hogy valamilyen szempont szerint szűrjük a GRIB-et, így csak egy részét tesszük be az új file-ba. Például az uv500.grb tartalmaz x és y irányú szél adatot is, de ebből csak az egyiket szeretnénk megtartani:
program iterator
implicit none
include 'grib_api_f77.h'
integer ifile,outfile
integer iret,iter
real*8 lat,lon,value,missingValue
integer n,flags
character*256 filename,error,nev,nev0
integer igrib
integer szum
open(10,file='output.txt')
ifile=15
outfile=10
nev0='u'
! csak az x iranyu szelkomponensre vagyunk kivancsiak
call grib_check(grib_open_file(ifile,'
uv500.grb','r'))
! input
call grib_check(grib_open_file(outfile,'out.grib','w'))
! output
szum = 1
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
call grib_check(grib_get_real8(igrib,'missingValue',missingValue))
flags = 0
call grib_check(grib_iterator_new(igrib,iter,flags))
call grib_check(grib_get_string(igrib,'shortName',nev))
if (nev.eq.nev0) then
! ha a parameter neve az altalunk meghatarozott
call grib_check(grib_write(igrib,outfile))
! akkor kiirjuk a GRIB-be
endif
30 continue
call grib_check(grib_iterator_delete(iter))
goto 10
call grib_check(grib_release(igrib))
call grib_check(grib_close_file(ifile))
call grib_check(grib_close_file(outfile))
close(10)
end
Az így készített új GRIB-et jellemző kontroll fájl:
out.GRIB
* produced by GRIB2ctl v0.9.12.5p33d
dtype GRIB 255
options yrev
ydef 121 linear -90.000000 1.5
xdef 240 linear 0.000000 1.500000
tdef 1 linear 12Z25jul2005 1mo
zdef 1 linear 1 1
vars 1
Uprs 0 131,100,500 ** U velocity [m s**-1]
ENDVARS
Oldal tetejére >> Vissza a főoldalra