libsim  Versione7.2.1
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 :: category,ier
64 character(len=512):: a_name
65 !questa chiamata prende dal launcher il nome univoco
66 call l4f_launcher(a_name,a_name_force="qc_convert")
67 
68 !init di log4fortran
69 ier=l4f_init()
70 
71 !imposta a_name
72 category=l4f_category_get(a_name//".main")
73 
74 call l4f_category_log(category,l4f_info,"inizio")
75 
76 
77 CALL init(v7d)
78 
79 nana=nperc*cli_nsuperarea
80 ntime=12
81 
82 nlevel=cli_nlevel
83 nnetwork=1
84 ndativarr=1
85 !nanavari=1
86 
87 call vol7d_alloc (v7d, &
88  nana=nana, ntime=ntime, ntimerange=ntimerange, &
89  nlevel=nlevel, nnetwork=nnetwork, &
90  ndativarr=ndativarr)
91 !, nanavari=nanavari)
92 
93 call vol7d_alloc_vol (v7d,ini=.true.)
94 
95 
96 area(1)="e"
97 area(2)="c"
98 area(3)="o"
99 minuti(1)="15"
100 minuti(2)="30"
101 minuti(3)="60"
102 
103 
104 inetwork=1
105 idativarr=1
106 
107 call init(v7d%network(inetwork), 'climat')
108 call init(v7d%dativar%r(idativarr), btable="B13011")
109 !call init(v7d%anavar%i(1), btable="B07001")
110 call cli_level_generate(v7d%level)
111 
112 
113 do iarea = 1, cli_nsuperarea
114  do ilevel = 1,cli_nlevel
115  do itimerange=1,ntimerange
116 
117  call init(v7d%timerange(itimerange), 1, 0,scadenze(itimerange))
118 
119  filename = "pctl_prec_"//minuti(itimerange)//"m_all_"//area(iarea)
120  write (filename(20:) ,"(i1.1)")ilevel-1
121  filename =filename(:20)//".txt"
122  filename="/autofs/nethomes/pavan/cq_emr/percentili/"//filename
123 
124  print *, "apro file=",filename
125  open (unit=iunit,file=filename)
126 
127  do itime = 1,ntime
128 
129  call init(v7d%time(itime), year=1001, month=itime, day=1, hour=0, minute=0)
130 
131  do iper = 1,nperc
132 
133 !!$ lat=cli_superarea_lat(iarea)
134 !!$ lon=cli_superarea_lon(iarea)
135 
136  lat=0.d0
137  lon=0.d0
138 
139  write(ident,'("BOX-",2i2.2)')iarea,iper*10
140  iana=iper+(iarea-1)*nperc
141 ! iana=iarea+(iper-1)*cli_nsuperarea
142  call init(v7d%ana(iana),lat=lat,lon=lon,ident=ident)
143 
144  read (iunit,"(10x,f7.0)") dato
145  if (dato == -999.9) dato=rmiss
146 
147 ! v7d%voldatir(iana,itime,ilevel,itimerange,idativarr,inetwork) = dato
148  v7d%voldatir(iana,itime,ilevel,itimerange,idativarr,inetwork) = ilevel
149 
150  end do
151  end do
152 
153  close(unit=iunit)
154  end do
155  end do
156 end do
157 
158 open (unit=iunit,file="climaprec.v7d", form='UNFORMATTED', access='STREAM')
159 
160 call export(v7d,unit=iunit)
161 
162 close (unit=iunit)
163 
164 filename="climaprec.bufr"
165 call init(v7d_dballe,file=.true.,wipe=.true.,write=.true.,filename=filename,categoryappend="esporto",template="generic")
166 call copy(v7d,v7d_dballe%vol7d)
167 call export(v7d_dballe)
168 call delete(v7d_dballe)
169 
170 call delete(v7d)
171 
172 !chiudo il logger
173 call l4f_category_delete(category)
174 ier=l4f_fini()
175 
176 end program leggi

Generated with Doxygen.