libsim  Versione7.2.6
example_vg6d_4.f90

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

1 ! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
2 ! authors:
3 ! Davide Cesari <dcesari@arpa.emr.it>
4 ! Paolo Patruno <ppatruno@arpa.emr.it>
5 
6 ! This program is free software; you can redistribute it and/or
7 ! modify it under the terms of the GNU General Public License as
8 ! published by the Free Software Foundation; either version 2 of
9 ! the License, or (at your option) any later version.
10 
11 ! This program is distributed in the hope that it will be useful,
12 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ! GNU General Public License for more details.
15 
16 ! You should have received a copy of the GNU General Public License
17 ! along with this program. If not, see <http://www.gnu.org/licenses/>.
18 program demo4
19 
21 use grid_class
23 use log4fortran
24 use grid_id_class
27 
28 implicit none
29 
30 integer :: category,ier
31 character(len=512):: a_name,infile='../data/in.grb',outfile='out.grb'
32 type(gridinfo_def) :: gridinfo
33 type(grid_file_id) :: ifile,ofile
34 type(grid_id) :: gaid
35 
36 doubleprecision :: ilon=0.,ilat=30.,flon=30.,flat=60.
37 REAL, ALLOCATABLE :: field(:,:,:),fieldz(:,:,:)
38 type(griddim_def) :: griddim_out
39 type(transform_def) :: trans
40 type(grid_transform) :: grid_trans
41 
42 integer :: nx=30,ny=30,component_flag=0
43 doubleprecision :: xmin=0., xmax=30., ymin=30., ymax=60.
44 doubleprecision :: latitude_south_pole=-32.5,longitude_south_pole=10.,angle_rotation=0.
45 character(len=80) :: type='regular_ll',trans_type='inter',sub_type='near'
46 
47 
48 !questa chiamata prende dal launcher il nome univoco
49 call l4f_launcher(a_name,a_name_force="demo4")
50 
51 !init di log4fortran
52 ier=l4f_init()
53 
54 !imposta a_name
55 category=l4f_category_get(a_name//".main")
56 
57 call l4f_category_log(category,l4f_info,"transforming from file:"//trim(infile))
58 call l4f_category_log(category,l4f_info,"transforming to file:"//trim(outfile))
59 if(trans_type == 'inter')then
60 
61  call init(griddim_out,&
62  proj_type=type,nx=nx,ny=ny, &
63  xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, component_flag=component_flag, &
64  latitude_south_pole=latitude_south_pole,longitude_south_pole=longitude_south_pole,angle_rotation=angle_rotation, &
65  categoryappend="regular_ll")
66 
67  call griddim_unproj(griddim_out)
68 
69  print*,'grid di interpolazione >>>>>>>>>>>>>>>>>>>>'
70  call display(griddim_out)
71 
72 end if
73 
74 call init(trans, trans_type=trans_type,sub_type=sub_type, &
75  ilon=ilon,ilat=ilat,flon=flon,flat=flat,&
76  categoryappend="trasformation")
77 
78 ifile = grid_file_id_new(trim(infile),'r')
79 ofile = grid_file_id_new(trim(outfile),'w')
80 
81 ! Loop on all the messages in a file.
82 DO WHILE (.true.)
83  gaid = grid_id_new(ifile)
84  IF (.NOT.c_e(gaid)) EXIT
85 
86  call l4f_category_log(category,l4f_info,"import gridinfo")
87 
88  call init (gridinfo,gaid=gaid,categoryappend="importato")
89  call import(gridinfo)
90 
91  call display(gridinfo,namespace="")
92 
93  call l4f_category_log(category,l4f_info,"import")
94 
95  ALLOCATE (field(gridinfo%griddim%dim%nx,gridinfo%griddim%dim%ny,1))
96 
97  field(:,:,1)=decode_gridinfo(gridinfo)
98 
99  call init(grid_trans, trans, in=gridinfo%griddim,out=griddim_out,categoryappend="gridtrasformato")
100 
101  call display(griddim_out)
102 
103  ALLOCATE (fieldz(griddim_out%dim%nx,griddim_out%dim%ny,1))
104 
105  call compute(grid_trans, field, fieldz)
106 
107  call delete(gridinfo%griddim)
108  call copy(griddim_out,gridinfo%griddim,categoryappend="clonato")
109 
110 ! oppure per mantenere il vecchio gridinfo
111 ! call clone(gridinfo , gridinfo_out)
112 ! call delete(gridinfo_out%griddim)
113 ! call copy(griddim_out,gridinfo_out%griddim)
114 
115  call encode_gridinfo(gridinfo,fieldz(:,:,1))
116  call export (gridinfo)
117  call display(gridinfo,namespace="")
118 
119  call export(gridinfo%gaid,ofile)
120 
121  call delete (grid_trans)
122  call delete (gridinfo)
123  deallocate (field,fieldz)
124 
125 end do
126 
127 call delete (trans)
128 call delete(griddim_out)
129 
130 call delete(ifile)
131 call delete(ofile)
132 
133 call l4f_category_log(category,l4f_info,"terminato")
134 
135 !chiudo il logger
136 call l4f_category_delete(category)
137 ier=l4f_fini()
138 
139 end program demo4
140 

Generated with Doxygen.