Programma esempio semplice per la elaborazione di file grib. Programma che legge uno ad uno i grid contenuti in un file e li elabora producendo un file di output contenente ancora grib
31 type(l4f_handle) :: category
32 character(len=512):: a_name,infile=
'../data/in.grb',outfile=
'out.grb' 34 type(grid_file_id) :: ifile,ofile
37 doubleprecision :: ilon=0.,ilat=30.,flon=30.,flat=60.
38 REAL,
ALLOCATABLE :: field(:,:,:),fieldz(:,:,:)
39 type(griddim_def) :: griddim_out
40 type(transform_def) :: trans
41 type(grid_transform) :: grid_trans
43 integer :: nx=30,ny=30,component_flag=0
44 doubleprecision :: xmin=0., xmax=30., ymin=30., ymax=60.
45 doubleprecision :: latitude_south_pole=-32.5,longitude_south_pole=10.,angle_rotation=0.
46 character(len=80) :: type=
'regular_ll',trans_type=
'inter',sub_type=
'near' 50 call l4f_launcher(a_name,a_name_force=
"demo4")
56 category=l4f_category_get_handle(a_name//
".main")
58 call l4f_category_log(category,l4f_info,
"transforming from file:"//trim(infile))
59 call l4f_category_log(category,l4f_info,
"transforming to file:"//trim(outfile))
60 if(trans_type ==
'inter')
then 62 call init(griddim_out,&
63 proj_type=
type,nx=nx,ny=ny, &
64 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, component_flag=component_flag, &
65 latitude_south_pole=latitude_south_pole,longitude_south_pole=longitude_south_pole,angle_rotation=angle_rotation, &
66 categoryappend=
"regular_ll")
68 call griddim_unproj(griddim_out)
70 print*,
'grid di interpolazione >>>>>>>>>>>>>>>>>>>>' 75 call init(trans, trans_type=trans_type,sub_type=sub_type, &
76 ilon=ilon,ilat=ilat,flon=flon,flat=flat,&
77 categoryappend=
"trasformation")
79 ifile = grid_file_id_new(trim(infile),
'r')
80 ofile = grid_file_id_new(trim(outfile),
'w')
84 gaid = grid_id_new(ifile)
85 IF (.NOT.
c_e(gaid))
EXIT 89 call init (gridinfo,gaid=gaid,categoryappend=
"importato")
92 call display(gridinfo,namespace=
"")
96 ALLOCATE (field(gridinfo%griddim%dim%nx,gridinfo%griddim%dim%ny,1))
100 call init(grid_trans, trans, in=gridinfo%griddim,out=griddim_out,categoryappend=
"gridtrasformato")
104 ALLOCATE (fieldz(griddim_out%dim%nx,griddim_out%dim%ny,1))
106 call compute(grid_trans, field, fieldz)
108 call delete(gridinfo%griddim)
109 call copy(griddim_out,gridinfo%griddim,categoryappend=
"clonato")
118 call display(gridinfo,namespace=
"")
120 call export(gridinfo%gaid,ofile)
124 deallocate (field,fieldz)
137 call l4f_category_delete(category)