libsim  Versione8.0.0
esempio_qc_convert.f90

Programma esempio semplice per la scrittura su file di un volume vol7d Programma che scrive su file un volume vol7d letto da una serie di file ASCII. Questo programma scrive i dati del clima che poi verranno letti da modqccli

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 leggi
19 
20 !legge i dati alla Pavan e li mette unformatted
21 
22 
23 USE vol7d_class
25 USE modqccli
26 USE io_units
27 
28 IMPLICIT NONE
29 
30 !INTEGER(kind=int_b) :: clima(area,altezza,mese,per)
31 
32 !real :: clima(9,12,10,3,3,1)
33 
34 integer,parameter :: cli_nsuperarea=3
35 
36 character(len=2) :: minuti(3)
37 character(len=1) :: area(3)
38 integer :: iarea,iper
39 character(len=80) ::filename
40 !REAL, PARAMETER :: rmiss = HUGE(1.0)
41 
42 
43 integer :: nana, ntime ,nlevel, ndativarr, nnetwork !,nanavari
44 integer :: iana, itime, ilevel, itimerange, idativarr, inetwork
45 integer,parameter :: ntimerange=3 ,nperc=9
46 TYPE(vol7d) :: v7d
47 TYPE(vol7d_dballe) :: v7d_dballe
48 !TYPE(vol7d_ana) :: ana(cli_nsuperarea)
49 TYPE(datetime) :: time
50 TYPE(vol7d_level) :: level(cli_nlevel)
51 TYPE(vol7d_timerange) :: timerange(ntimerange)
52 TYPE(vol7d_network) :: network
53 TYPE(vol7d_var) :: dativar,anavar
54 CHARACTER(len=vol7d_ana_lenident) :: ident
55 REAL(kind=fp_geo) :: lat,lon
56 !integer :: thres_quota(11) = (/-100,100,250,500,750,1000,1250,1500,1750,2000,2250/)
57 !integer :: livello(10) = (/50,175,375,625,875,1125,1375,1625,1875,2125/)
58 !integer :: livello1(10) = (/-100,100,250,500,750,1000,1250,1500,1750,2000/)
59 !integer :: livello2(10) = (/100,250,500,750,1000,1250,1500,1750,2000,2250/)
60 integer :: scadenze(ntimerange) = (/900,1800,3600/)
61 real :: dato
62 integer :: iunit=1
63 integer :: ier
64 type(l4f_handle) :: category
65 character(len=512):: a_name
66 !questa chiamata prende dal launcher il nome univoco
67 call l4f_launcher(a_name,a_name_force="qc_convert")
68 
69 !init di log4fortran
70 ier=l4f_init()
71 
72 !imposta a_name
73 category=l4f_category_get_handle(a_name//".main")
74 
75 call l4f_category_log(category,l4f_info,"inizio")
76 
77 
78 CALL init(v7d)
79 
80 nana=nperc*cli_nsuperarea
81 ntime=12
82 
83 nlevel=cli_nlevel
84 nnetwork=1
85 ndativarr=1
86 !nanavari=1
87 
88 call vol7d_alloc (v7d, &
89  nana=nana, ntime=ntime, ntimerange=ntimerange, &
90  nlevel=nlevel, nnetwork=nnetwork, &
91  ndativarr=ndativarr)
92 !, nanavari=nanavari)
93 
94 call vol7d_alloc_vol (v7d,ini=.true.)
95 
96 
97 area(1)="e"
98 area(2)="c"
99 area(3)="o"
100 minuti(1)="15"
101 minuti(2)="30"
102 minuti(3)="60"
103 
104 
105 inetwork=1
106 idativarr=1
107 
108 call init(v7d%network(inetwork), 'climat')
109 call init(v7d%dativar%r(idativarr), btable="B13011")
110 !call init(v7d%anavar%i(1), btable="B07001")
111 call cli_level_generate(v7d%level)
112 
113 
114 do iarea = 1, cli_nsuperarea
115  do ilevel = 1,cli_nlevel
116  do itimerange=1,ntimerange
117 
118  call init(v7d%timerange(itimerange), 1, 0,scadenze(itimerange))
119 
120  filename = "pctl_prec_"//minuti(itimerange)//"m_all_"//area(iarea)
121  write (filename(20:) ,"(i1.1)")ilevel-1
122  filename =filename(:20)//".txt"
123  filename="/autofs/nethomes/pavan/cq_emr/percentili/"//filename
124 
125  print *, "apro file=",filename
126  open (unit=iunit,file=filename)
127 
128  do itime = 1,ntime
129 
130  call init(v7d%time(itime), year=1001, month=itime, day=1, hour=0, minute=0)
131 
132  do iper = 1,nperc
133 
134 !!$ lat=cli_superarea_lat(iarea)
135 !!$ lon=cli_superarea_lon(iarea)
136 
137  lat=0.d0
138  lon=0.d0
139 
140  write(ident,'("BOX-",2i2.2)')iarea,iper*10
141  iana=iper+(iarea-1)*nperc
142 ! iana=iarea+(iper-1)*cli_nsuperarea
143  call init(v7d%ana(iana),lat=lat,lon=lon,ident=ident)
144 
145  read (iunit,"(10x,f7.0)") dato
146  if (dato == -999.9) dato=rmiss
147 
148 ! v7d%voldatir(iana,itime,ilevel,itimerange,idativarr,inetwork) = dato
149  v7d%voldatir(iana,itime,ilevel,itimerange,idativarr,inetwork) = ilevel
150 
151  end do
152  end do
153 
154  close(unit=iunit)
155  end do
156  end do
157 end do
158 
159 open (unit=iunit,file="climaprec.v7d", form='UNFORMATTED', access='STREAM')
160 
161 call export(v7d,unit=iunit)
162 
163 close (unit=iunit)
164 
165 filename="climaprec.bufr"
166 call init(v7d_dballe,file=.true.,wipe=.true.,write=.true.,filename=filename,categoryappend="esporto",template="generic")
167 call copy(v7d,v7d_dballe%vol7d)
168 call export(v7d_dballe)
169 call delete(v7d_dballe)
170 
171 call delete(v7d)
172 
173 !chiudo il logger
174 call l4f_category_delete(category)
175 ier=l4f_fini()
176 
177 end program leggi

Generated with Doxygen.