31 MODULE vol7d_netcdf_class
44 character (len=255),
parameter:: subcategory=
"vol7d_netcdf_class"
53 MODULE PROCEDURE vol7d_netcdf_export
62 subroutine vol7d_netcdf_export (this,ncconventions,ncunit,description,filename)
64 TYPE(vol7d),
INTENT(IN) :: this
65 integer,
optional,
intent(inout) :: ncunit
66 character(len=*),
intent(in) :: ncconventions
67 character(len=*),
intent(inout),
optional :: filename
68 character(len=*),
INTENT(IN),
optional :: description
71 character(len=254) :: ldescription,arg,lfilename
72 integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
73 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
74 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
75 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
76 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
77 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
78 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
81 logical :: opened,exist
83 integer :: ana_ident_varid,ana_dimid,ana_lon_varid,ana_lat_varid &
84 ,ident_len_dimid,var_len_dimid &
85 ,level_dimid,level_vdim_dimid,level_vect_varid,network_dimid,network_name_varid &
86 ,network_name_len_dimid,timerange_vdim_dimid &
87 ,time_iminuti_varid,time_dimid,timerange_dimid,timerange_vect_varid,var_vdim_dimid &
88 ,dativard_dimid,dativarr_dimid,dativari_dimid,dativarb_dimid,dativarc_len_dimid,dativarc_dimid &
89 ,voldativarr_varid ,voldativari_varid ,voldativard_varid ,voldativarb_varid ,voldativarc_varid &
90 ,anavard_dimid,anavarr_dimid,anavari_dimid,anavarb_dimid,anavarc_len_dimid,anavarc_dimid &
91 ,volanavarr_varid ,volanavari_varid ,volanavard_varid ,volanavarb_varid ,volanavarc_varid &
92 ,anavarr_varid,anavari_varid,anavard_varid,anavarb_varid,anavarc_varid &
93 ,dativarr_varid,dativari_varid,dativard_varid,dativarb_varid,dativarc_varid
98 type(datetime
) :: timeref
99 character (len=23) :: isodate
103 character(len=512):: a_name
105 character(len=65):: varchar(3)
107 call l4f_launcher(a_name,a_name_append=subcategory)
108 category=l4f_category_get(a_name)
111 if (ncconventions ==
"CF-1.1")
then
112 call vol7d_netcdf_export_cf(this,ncconventions,ncunit,description,filename)
113 else if (ncconventions /=
"CF-1.1 vol7d")
then
115 call
l4f_category_log(category,l4f_fatal,
"ncconventions not supported: "// &
117 call raise_fatal_error()
120 call date_and_time(values=tarray)
123 if (present(description))
then
124 ldescription=description
126 ldescription=
"NETCDF generated by: "//trim(arg)
130 lfilename=trim(arg)//
".nc"
131 if (
index(arg,
'/',back=.true.) > 0) lfilename=lfilename(
index(arg,
'/',back=.true.)+1 : )
133 if (present(filename))
then
134 if (filename ==
"")
then
141 IF (present(ncunit))
THEN
149 INQUIRE(file=lfilename,exist=exist)
152 "file exists, cannot open file "//trim(lfilename))
153 CALL raise_fatal_error()
156 CALL nccheck(
"0",nf90_create(lfilename, nf90_clobber, lunit) )
160 IF (present(ncunit)) ncunit = lunit
162 call
init(timeref,year=1,month=1,day=1,hour=00,minute=00)
163 call
getval(timeref,isodate=isodate)
166 ntime=
size(this%time)
167 ntimerange=
size(this%timerange)
168 nlevel=
size(this%level)
169 nnetwork=
size(this%network)
177 if (
associated(this%dativar%r)) ndativarr=
size(this%dativar%r)
178 if (
associated(this%dativar%i)) ndativari=
size(this%dativar%i)
179 if (
associated(this%dativar%b)) ndativarb=
size(this%dativar%b)
180 if (
associated(this%dativar%d)) ndativard=
size(this%dativar%d)
181 if (
associated(this%dativar%c)) ndativarc=
size(this%dativar%c)
183 ndatiattrr=
size(this%datiattr%r)
184 ndatiattri=
size(this%datiattr%i)
185 ndatiattrb=
size(this%datiattr%b)
186 ndatiattrd=
size(this%datiattr%d)
187 ndatiattrc=
size(this%datiattr%c)
189 ndativarattrr=
size(this%dativarattr%r)
190 ndativarattri=
size(this%dativarattr%i)
191 ndativarattrb=
size(this%dativarattr%b)
192 ndativarattrd=
size(this%dativarattr%d)
193 ndativarattrc=
size(this%dativarattr%c)
201 if (
associated(this%anavar%r)) nanavarr=
size(this%anavar%r)
202 if (
associated(this%anavar%i)) nanavari=
size(this%anavar%i)
203 if (
associated(this%anavar%b)) nanavarb=
size(this%anavar%b)
204 if (
associated(this%anavar%d)) nanavard=
size(this%anavar%d)
205 if (
associated(this%anavar%c)) nanavarc=
size(this%anavar%c)
207 nanaattrr=
size(this%anaattr%r)
208 nanaattri=
size(this%anaattr%i)
209 nanaattrb=
size(this%anaattr%b)
210 nanaattrd=
size(this%anaattr%d)
211 nanaattrc=
size(this%anaattr%c)
213 nanavarattrr=
size(this%anavarattr%r)
214 nanavarattri=
size(this%anavarattr%i)
215 nanavarattrb=
size(this%anavarattr%b)
216 nanavarattrd=
size(this%anavarattr%d)
217 nanavarattrc=
size(this%anavarattr%c)
224 call nccheck(
"0Conventions",nf90_put_att(lunit, nf90_global ,
"Conventions",
"CF-1.1"))
225 call nccheck(
"0title",nf90_put_att(lunit, nf90_global ,
"title", ldescription))
228 call nccheck(
"1",nf90_def_dim(lunit,
"ana", nana, ana_dimid) )
229 call nccheck(
"2",nf90_def_dim(lunit,
"ident_len",vol7d_ana_lenident , ident_len_dimid) )
231 call nccheck(
"3",nf90_def_dim(lunit,
"time", ntime, time_dimid) )
233 call nccheck(
"4",nf90_def_dim(lunit,
"timerange", ntimerange, timerange_dimid) )
234 call nccheck(
"5",nf90_def_dim(lunit,
"timerange_vdim", 3, timerange_vdim_dimid) )
236 call nccheck(
"6",nf90_def_dim(lunit,
"level", nlevel, level_dimid) )
237 call nccheck(
"7",nf90_def_dim(lunit,
"level_vdim", 4, level_vdim_dimid) )
239 call nccheck(
"8",nf90_def_dim(lunit,
"network_name", nnetwork, network_dimid) )
240 call nccheck(
"9",nf90_def_dim(lunit,
"network_name_len",network_name_len, network_name_len_dimid) )
242 call nccheck(
"10",nf90_def_dim(lunit,
"var_vdim",3, var_vdim_dimid) )
243 call nccheck(
"11",nf90_def_dim(lunit,
"var_len",65, var_len_dimid) )
246 if (nanavarr > 0) call nccheck(
"a1",nf90_def_dim(lunit,
"anavarr", nanavarr, anavarr_dimid) )
247 if (nanavari > 0) call nccheck(
"a2",nf90_def_dim(lunit,
"anavari", nanavari, anavari_dimid) )
248 if (nanavarb > 0) call nccheck(
"a3",nf90_def_dim(lunit,
"anavarb", nanavarb, anavarb_dimid) )
249 if (nanavard > 0) call nccheck(
"a4",nf90_def_dim(lunit,
"anavard", nanavard, anavard_dimid) )
250 if (nanavarc > 0) call nccheck(
"a5",nf90_def_dim(lunit,
"anavarc", nanavarc, anavarc_dimid) )
251 call nccheck(
"a6",nf90_def_dim(lunit,
"anavarc_len",vol7d_cdatalen, anavarc_len_dimid) )
254 if (ndativarr > 0) call nccheck(
"d1",nf90_def_dim(lunit,
"dativarr", ndativarr, dativarr_dimid) )
255 if (ndativari > 0) call nccheck(
"d2",nf90_def_dim(lunit,
"dativari", ndativari, dativari_dimid) )
256 if (ndativarb > 0) call nccheck(
"d3",nf90_def_dim(lunit,
"dativarb", ndativarb, dativarb_dimid) )
257 if (ndativard > 0) call nccheck(
"d4",nf90_def_dim(lunit,
"dativard", ndativard, dativard_dimid) )
258 if (ndativarc > 0) call nccheck(
"d5",nf90_def_dim(lunit,
"dativarc", ndativarc, dativarc_dimid) )
259 call nccheck(
"d6",nf90_def_dim(lunit,
"dativarc_len",vol7d_cdatalen, dativarc_len_dimid) )
264 call nccheck(
"10",nf90_def_var(lunit,
"ana_lat", nf90_double, ana_dimid, ana_lat_varid) )
265 call nccheck(
"10long_name",nf90_put_att(lunit,ana_lat_varid ,
"long_name",
"latitude") )
266 call nccheck(
"10units",nf90_put_att(lunit,ana_lat_varid ,
"units",
"degrees_north") )
267 call nccheck(
"10standard_name",nf90_put_att(lunit,ana_lat_varid ,
"standard_name",
"latitude") )
268 call nccheck(
"10fillvalue",nf90_put_att(lunit,ana_lat_varid ,
"_FillValue",dmiss) )
269 call nccheck(
"10missing_value",nf90_put_att(lunit,ana_lat_varid ,
"missing_value",dmiss) )
271 call nccheck(
"11",nf90_def_var(lunit,
"ana_lon", nf90_double, ana_dimid, ana_lon_varid) )
272 call nccheck(
"11long_name",nf90_put_att(lunit,ana_lon_varid ,
"long_name",
"longitude") )
273 call nccheck(
"11units",nf90_put_att(lunit,ana_lon_varid ,
"units",
"degrees_east") )
274 call nccheck(
"11standard_name",nf90_put_att(lunit,ana_lon_varid ,
"standard_name",
"longitude") )
275 call nccheck(
"11fillvalue",nf90_put_att(lunit,ana_lon_varid ,
"_FillValue",dmiss) )
276 call nccheck(
"11missing_value",nf90_put_att(lunit,ana_lon_varid ,
"missing_value",dmiss) )
278 call nccheck(
"12",nf90_def_var(lunit,
"ana_ident", nf90_char, (/ ident_len_dimid,ana_dimid/), ana_ident_varid) )
280 call nccheck(
"12fillvalue",nf90_put_att(lunit,ana_ident_varid ,
"_FillValue",cmiss) )
281 call nccheck(
"12missing_value",nf90_put_att(lunit,ana_ident_varid ,
"missing_value",cmiss) )
283 call nccheck(
"13",nf90_def_var(lunit,
"time", nf90_int, time_dimid, time_iminuti_varid) )
284 call nccheck(
"1313",nf90_put_att(lunit,time_iminuti_varid,
"units",
"minute since "//isodate) )
285 call nccheck(
"13fillvalue",nf90_put_att(lunit,time_iminuti_varid ,
"_FillValue",imiss) )
286 call nccheck(
"13missing_value",nf90_put_att(lunit,time_iminuti_varid ,
"missing_value",imiss) )
288 call nccheck(
"14",nf90_def_var(lunit,
"timerange", nf90_int, (/timerange_vdim_dimid,timerange_dimid/), timerange_vect_varid) )
289 call nccheck(
"14fillvalue",nf90_put_att(lunit, timerange_vect_varid ,
"_FillValue",imiss) )
290 call nccheck(
"14missing_value",nf90_put_att(lunit, timerange_vect_varid ,
"missing_value",imiss) )
292 call nccheck(
"15",nf90_def_var(lunit,
"level", nf90_int, (/level_vdim_dimid,level_dimid/), level_vect_varid) )
293 call nccheck(
"15fillvalue",nf90_put_att(lunit,level_vect_varid ,
"_FillValue",imiss) )
294 call nccheck(
"15missing_value",nf90_put_att(lunit,level_vect_varid ,
"missing_value",imiss) )
296 call nccheck(
"16",nf90_def_var(lunit,
"network_name", nf90_char,(/ network_name_len_dimid,network_dimid/), network_name_varid) )
297 call nccheck(
"16fillvalue",nf90_put_att(lunit,network_name_varid ,
"_FillValue",cmiss) )
298 call nccheck(
"16missing_value",nf90_put_att(lunit,network_name_varid ,
"missing_value",cmiss) )
303 if (nanavarr > 0)
then
304 call nccheck(
"a81" ,nf90_def_var(lunit,
"anavarr",nf90_char,&
305 (/var_len_dimid ,var_vdim_dimid,anavarr_dimid/),anavarr_varid ))
306 call nccheck(
"a81fillvalue",nf90_put_att(lunit,anavarr_varid ,
"_FillValue",cmiss) )
307 call nccheck(
"a81missing_value",nf90_put_att(lunit,anavarr_varid ,
"missing_value",cmiss) )
309 call nccheck(
"a82" ,nf90_def_var(lunit,
"volanavarr",nf90_real,&
310 (/ana_dimid,anavarr_dimid,network_dimid/),volanavarr_varid ))
311 call nccheck(
"a82fillvalue",nf90_put_att(lunit,volanavarr_varid ,
"_FillValue",rmiss) )
312 call nccheck(
"a82missing_value",nf90_put_att(lunit,volanavarr_varid ,
"missing_value",rmiss) )
314 if (nanavari > 0)
then
315 call nccheck(
"a83" ,nf90_def_var(lunit,
"anavari",nf90_char,&
316 (/var_len_dimid,var_vdim_dimid ,anavari_dimid/),anavari_varid ))
317 call nccheck(
"a83fillvalue",nf90_put_att(lunit,anavari_varid ,
"_FillValue",cmiss) )
318 call nccheck(
"a83missing_value",nf90_put_att(lunit,anavari_varid ,
"missing_value",cmiss) )
320 call nccheck(
"a84" ,nf90_def_var(lunit,
"volanavari",nf90_int,&
321 (/ana_dimid,anavari_dimid,network_dimid/),volanavari_varid ))
322 call nccheck(
"a84fillvalue",nf90_put_att(lunit,volanavari_varid ,
"_FillValue",imiss) )
323 call nccheck(
"a84missing_value",nf90_put_att(lunit,volanavari_varid ,
"missing_value",imiss) )
325 if (nanavard > 0)
then
326 call nccheck(
"a85" ,nf90_def_var(lunit,
"anavard",nf90_char,&
327 (/var_len_dimid,var_vdim_dimid ,anavard_dimid/),anavard_varid ))
328 call nccheck(
"a85fillvalue",nf90_put_att(lunit,anavard_varid ,
"_FillValue",cmiss) )
329 call nccheck(
"a85missing_value",nf90_put_att(lunit,anavard_varid ,
"missing_value",cmiss) )
331 call nccheck(
"a86" ,nf90_def_var(lunit,
"volanavard",nf90_double,&
332 (/ana_dimid,anavard_dimid,network_dimid/),volanavard_varid ))
333 call nccheck(
"a86fillvalue",nf90_put_att(lunit,volanavard_varid ,
"_FillValue",dmiss) )
334 call nccheck(
"a86missing_value",nf90_put_att(lunit,volanavard_varid ,
"missing_value",dmiss) )
336 if (nanavarb > 0)
then
337 call nccheck(
"a87" ,nf90_def_var(lunit,
"anavarb",nf90_char,&
338 (/var_len_dimid,var_vdim_dimid ,anavarb_dimid/),anavarb_varid ))
339 call nccheck(
"a87fillvalue",nf90_put_att(lunit,anavarb_varid ,
"_FillValue",cmiss) )
340 call nccheck(
"a87missing_value",nf90_put_att(lunit,anavarb_varid ,
"missing_value",cmiss) )
342 call nccheck(
"a88" ,nf90_def_var(lunit,
"volanavarb",nf90_byte,&
343 (/ana_dimid,anavarb_dimid,network_dimid/),volanavarb_varid ))
344 call nccheck(
"a88fillvalue",nf90_put_att(lunit,volanavarb_varid ,
"_FillValue",ibmiss) )
345 call nccheck(
"a88missing_value",nf90_put_att(lunit,volanavarb_varid ,
"missing_value",ibmiss) )
347 if (nanavarc > 0)
then
348 call nccheck(
"a89" ,nf90_def_var(lunit,
"anavarc",nf90_char,&
349 (/var_len_dimid,var_vdim_dimid ,anavarc_dimid/),anavarc_varid ))
350 call nccheck(
"a89fillvalue",nf90_put_att(lunit,anavarc_varid ,
"_FillValue",cmiss) )
351 call nccheck(
"a89missing_value",nf90_put_att(lunit,anavarc_varid ,
"missing_value",cmiss) )
353 call nccheck(
"a90" ,nf90_def_var(lunit,
"volanavarc",nf90_char,&
354 (/anavarc_len_dimid,ana_dimid,anavarc_dimid,network_dimid/),volanavarc_varid ))
355 call nccheck(
"a90fillvalue",nf90_put_att(lunit,volanavarc_varid ,
"_FillValue",cmiss) )
356 call nccheck(
"a90missing_value",nf90_put_att(lunit,volanavarc_varid ,
"missing_value",cmiss) )
363 if (ndativarr > 0)
then
364 call nccheck(
"d81" ,nf90_def_var(lunit,
"dativarr",nf90_char,&
365 (/var_len_dimid,var_vdim_dimid ,dativarr_dimid/),dativarr_varid ))
366 call nccheck(
"d8fillvalue",nf90_put_att(lunit,dativarr_varid,
"_FillValue",cmiss) )
367 call nccheck(
"d8missing_value",nf90_put_att(lunit,dativarr_varid,
"missing_value",cmiss) )
369 call nccheck(
"d82" ,nf90_def_var(lunit,
"voldativarr",nf90_real,&
370 (/ana_dimid,time_dimid,level_dimid,timerange_dimid,dativarr_dimid,network_dimid/),voldativarr_varid ))
371 call nccheck(
"d82fillvalue",nf90_put_att(lunit,voldativarr_varid ,
"_FillValue",rmiss) )
372 call nccheck(
"d82missing_value",nf90_put_att(lunit,voldativarr_varid ,
"missing_value",rmiss) )
374 if (ndativari > 0)
then
375 call nccheck(
"d83" ,nf90_def_var(lunit,
"dativari",nf90_char,&
376 (/var_len_dimid,var_vdim_dimid ,dativari_dimid/),dativari_varid ))
377 call nccheck(
"d83fillvalue",nf90_put_att(lunit,dativari_varid,
"_FillValue",cmiss) )
378 call nccheck(
"d83missing_value",nf90_put_att(lunit,dativari_varid,
"missing_value",cmiss) )
380 call nccheck(
"d84" ,nf90_def_var(lunit,
"voldativari",nf90_int,&
381 (/ana_dimid,time_dimid,level_dimid,timerange_dimid,dativari_dimid,network_dimid/),voldativari_varid ))
382 call nccheck(
"d84fillvalue",nf90_put_att(lunit,voldativari_varid ,
"_FillValue",imiss) )
383 call nccheck(
"d84missing_value",nf90_put_att(lunit,voldativari_varid ,
"missing_value",imiss) )
385 if (ndativard > 0)
then
386 call nccheck(
"d85" ,nf90_def_var(lunit,
"dativard",nf90_char,&
387 (/var_len_dimid,var_vdim_dimid ,dativard_dimid/),dativard_varid ))
388 call nccheck(
"d85fillvalue",nf90_put_att(lunit,dativard_varid,
"_FillValue",cmiss) )
389 call nccheck(
"d85missing_value",nf90_put_att(lunit,dativard_varid,
"missing_value",cmiss) )
391 call nccheck(
"d86" ,nf90_def_var(lunit,
"voldativard",nf90_double,&
392 (/ana_dimid,time_dimid,level_dimid,timerange_dimid,dativard_dimid,network_dimid/),voldativard_varid ))
393 call nccheck(
"d86fillvalue",nf90_put_att(lunit,voldativard_varid ,
"_FillValue",dmiss) )
394 call nccheck(
"d86missing_value",nf90_put_att(lunit,voldativard_varid ,
"missing_value",dmiss) )
396 if (ndativarb > 0)
then
397 call nccheck(
"d87" ,nf90_def_var(lunit,
"dativarb",nf90_char,&
398 (/var_len_dimid,var_vdim_dimid ,dativarb_dimid/),dativarb_varid ))
399 call nccheck(
"d87fillvalue",nf90_put_att(lunit,dativarb_varid,
"_FillValue",cmiss) )
400 call nccheck(
"d87missing_value",nf90_put_att(lunit,dativarb_varid,
"missing_value",cmiss) )
402 call nccheck(
"d88" ,nf90_def_var(lunit,
"voldativarb",nf90_byte,&
403 (/ana_dimid,time_dimid,level_dimid,timerange_dimid,dativarb_dimid,network_dimid/),voldativarb_varid ))
404 call nccheck(
"d88fillvalue",nf90_put_att(lunit,voldativarb_varid ,
"_FillValue",ibmiss) )
405 call nccheck(
"d88missing_value",nf90_put_att(lunit,voldativarb_varid ,
"missing_value",ibmiss) )
407 if (ndativarc > 0)
then
408 call nccheck(
"d89" ,nf90_def_var(lunit,
"dativarc",nf90_char,&
409 (/var_len_dimid,var_vdim_dimid ,dativarc_dimid/),dativarc_varid ))
410 call nccheck(
"d89fillvalue",nf90_put_att(lunit,dativarc_varid,
"_FillValue",cmiss) )
411 call nccheck(
"d89missing_value",nf90_put_att(lunit,dativarc_varid,
"missing_value",cmiss) )
413 call nccheck(
"d90" ,nf90_def_var(lunit,
"voldativarc",nf90_char,&
414 (/dativarc_len_dimid,ana_dimid,time_dimid,level_dimid,timerange_dimid,dativarc_dimid,network_dimid/),voldativarc_varid ))
415 call nccheck(
"d90fillvalue",nf90_put_att(lunit,voldativarc_varid ,
"_FillValue",cmiss) )
416 call nccheck(
"d90missing_value",nf90_put_att(lunit,voldativarc_varid ,
"missing_value",cmiss) )
420 call nccheck(
"22", nf90_enddef(lunit) )
423 if (
associated(this%ana)) call nccheck(
"23", nf90_put_var(lunit, ana_lat_varid, getlat(this%ana(:)%coord)))
424 if (
associated(this%ana)) call nccheck(
"24", nf90_put_var(lunit, ana_lon_varid, getlon(this%ana(:)%coord)))
426 if (
associated(this%ana)) call nccheck(
"25", nf90_put_var(lunit, ana_ident_varid, this%ana(:)%ident))
428 if (
associated(this%time)) call nccheck(
"26", nf90_put_var(lunit, time_iminuti_varid , &
429 int(timedelta_getamsec(this%time-timeref)/60000)))
431 if (
associated(this%level))
then
434 call nccheck(
"27", nf90_put_var(lunit, level_vect_varid,&
435 (/this%level(i)%level1,&
437 this%level(i)%level2,&
439 start=(/1,i/),count=(/4,1/)))
443 if (
associated(this%timerange))
then
445 call nccheck(
"28",nf90_put_var(lunit, timerange_vect_varid,&
446 (/this%timerange(i)%timerange,&
447 this%timerange(i)%p1,&
448 this%timerange(i)%p2/),&
449 start=(/1,i/),count=(/3,1/)))
453 if (
associated(this%network))
then
454 call nccheck(
"29",nf90_put_var(lunit, network_name_varid,this%network(:)%name))
461 if (
associated(this%anavar%r))
then
462 varchar(1)= this%anavar%r(i)%description
463 varchar(2)= this%anavar%r(i)%unit
464 varchar(3)= this%anavar%r(i)%btable
465 call nccheck(
"a291",nf90_put_var(lunit, anavarr_varid,&
467 ,start=(/1,1,i/),count=(/65,3,1/)))
472 if (
associated(this%anavar%i))
then
473 varchar(1)= this%anavar%i(i)%description
474 varchar(2)= this%anavar%i(i)%unit
475 varchar(3)= this%anavar%i(i)%btable
476 call nccheck(
"a292",nf90_put_var(lunit, anavari_varid,&
478 ,start=(/1,1,i/),count=(/65,3,1/)))
483 if (
associated(this%anavar%d))
then
484 varchar(1)= this%anavar%d(i)%description
485 varchar(2)= this%anavar%d(i)%unit
486 varchar(3)= this%anavar%d(i)%btable
487 call nccheck(
"a293",nf90_put_var(lunit, anavard_varid,&
489 ,start=(/1,1,i/),count=(/65,3,1/)))
494 if (
associated(this%anavar%b))
then
495 varchar(1)= this%anavar%b(i)%description
496 varchar(2)= this%anavar%b(i)%unit
497 varchar(3)= this%anavar%b(i)%btable
498 call nccheck(
"a294",nf90_put_var(lunit, anavarb_varid,&
500 ,start=(/1,1,i/),count=(/65,3,1/)))
505 if (
associated(this%anavar%c))
then
506 varchar(1)= this%anavar%c(i)%description
507 varchar(2)= this%anavar%c(i)%unit
508 varchar(3)= this%anavar%c(i)%btable
509 call nccheck(
"a295",nf90_put_var(lunit, anavarc_varid,&
511 ,start=(/1,1,i/),count=(/65,3,1/)))
520 if (
associated(this%dativar%r))
then
521 varchar(1)=this%dativar%r(i)%description
522 varchar(2)=this%dativar%r(i)%unit
523 varchar(3)=this%dativar%r(i)%btable
524 call nccheck(
"a291",nf90_put_var(lunit, dativarr_varid,&
526 ,start=(/1,1,i/),count=(/65,3,1/)))
531 if (
associated(this%dativar%i))
then
532 varchar(1)=this%dativar%i(i)%description
533 varchar(2)=this%dativar%i(i)%unit
534 varchar(3)=this%dativar%i(i)%btable
535 call nccheck(
"a292",nf90_put_var(lunit, dativari_varid,&
537 ,start=(/1,1,i/),count=(/65,3,1/)))
542 if (
associated(this%dativar%d))
then
543 varchar(1)=this%dativar%d(i)%description
544 varchar(2)=this%dativar%d(i)%unit
545 varchar(3)=this%dativar%d(i)%btable
546 call nccheck(
"a293",nf90_put_var(lunit, dativard_varid,&
548 ,start=(/1,1,i/),count=(/65,3,1/)))
553 if (
associated(this%dativar%b))
then
554 varchar(1)=this%dativar%b(i)%description
555 varchar(2)=this%dativar%b(i)%unit
556 varchar(3)=this%dativar%b(i)%btable
557 call nccheck(
"a294",nf90_put_var(lunit, dativarb_varid,&
559 ,start=(/1,1,i/),count=(/65,3,1/)))
564 if (
associated(this%dativar%c))
then
565 varchar(1)=this%dativar%c(i)%description
566 varchar(2)=this%dativar%c(i)%unit
567 varchar(3)=this%dativar%c(i)%btable
568 call nccheck(
"a295",nf90_put_var(lunit, dativarc_varid,&
570 ,start=(/1,1,i/),count=(/65,3,1/)))
576 if (
associated(this%volanar))call nccheck(
"a231", nf90_put_var(lunit,volanavarr_varid,this%volanar))
577 if (
associated(this%volanai))call nccheck(
"a232", nf90_put_var(lunit,volanavari_varid,this%volanai))
578 if (
associated(this%volanad))call nccheck(
"a233", nf90_put_var(lunit,volanavard_varid,this%volanad))
579 if (
associated(this%volanab))call nccheck(
"a234", nf90_put_var(lunit,volanavarb_varid,this%volanab))
580 if (
associated(this%volanac))call nccheck(
"a235", nf90_put_var(lunit,volanavarc_varid,this%volanac))
583 if (
associated(this%voldatir))call nccheck(
"d231", nf90_put_var(lunit,voldativarr_varid,this%voldatir))
584 if (
associated(this%voldatii))call nccheck(
"d232", nf90_put_var(lunit,voldativari_varid,this%voldatii))
585 if (
associated(this%voldatid))call nccheck(
"d233", nf90_put_var(lunit,voldativard_varid,this%voldatid))
586 if (
associated(this%voldatib))call nccheck(
"d234", nf90_put_var(lunit,voldativarb_varid,this%voldatib))
587 if (
associated(this%voldatic))call nccheck(
"d235", nf90_put_var(lunit,voldativarc_varid,this%voldatic))
589 if (.not. present(ncunit)) call nccheck(
"90", nf90_close(lunit) )
591 end subroutine vol7d_netcdf_export
595 subroutine vol7d_netcdf_export_cf (this,ncconventions,ncunit,description,filename)
597 TYPE(vol7d),
INTENT(IN) :: this
598 integer,
optional,
intent(inout) :: ncunit
599 character(len=*),
intent(in) :: ncconventions
600 character(len=*),
intent(inout),
optional :: filename
601 character(len=*),
INTENT(IN),
optional :: description
604 character(len=254) :: ldescription,arg,lfilename
605 integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
606 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
607 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
608 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
609 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
610 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
611 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
614 logical :: opened,exist
616 integer :: ana_ident_varid,ana_dimid,ana_lon_varid,ana_lat_varid &
617 ,ident_len_dimid,var_len_dimid &
618 ,level_dimid,level_vdim_dimid,level_vect_varid,network_dimid,network_id_varid,timerange_vdim_dimid &
619 ,time_iminuti_varid,time_dimid,timerange_dimid,timerange_vect_varid &
620 ,dativard_dimid,dativarr_dimid,dativari_dimid,dativarb_dimid,dativarc_len_dimid,dativarc_dimid &
621 ,dativarr_varid ,dativari_varid ,dativard_varid ,dativarb_varid ,dativarc_varid &
622 ,anavard_dimid,anavarr_dimid,anavari_dimid,anavarb_dimid,anavarc_len_dimid,anavarc_dimid &
623 ,anavarr_varid ,anavari_varid ,anavard_varid ,anavarb_varid ,anavarc_varid &
624 ,anavarr_btable_varid,anavari_btable_varid,anavard_btable_varid,anavarb_btable_varid,anavarc_btable_varid &
625 ,dativarr_btable_varid,dativari_btable_varid,dativard_btable_varid,dativarb_btable_varid,dativarc_btable_varid
630 type(datetime
) :: timeref
633 character(len=512):: a_name
636 call l4f_launcher(a_name,a_name_append=subcategory)
637 category=l4f_category_get(a_name)
640 if (ncconventions /=
"CF-1.1")
then
642 call
l4f_category_log(category,l4f_info,
"ncconventions not supported: "//trim(ncconventions))
647 end subroutine vol7d_netcdf_export_cf
651 subroutine nccheck(stringa,status)
652 integer,
intent ( in) :: status
653 character (len=*) :: stringa
655 if(status /= nf90_noerr)
then
657 print *, trim(nf90_strerror(status))
660 end subroutine nccheck
663 end MODULE vol7d_netcdf_class
Classi per la gestione delle coordinate temporali.
Import one or more geo_coordvect objects from a plain text file or for a file in ESRI/Shapefile forma...
Classes for handling georeferenced sparse points in geographical corodinates.
Classe per la gestione di un volume completo di dati osservati.
Restituiscono il valore dell'oggetto nella forma desiderata.
Definisce un oggetto contenente i volumi anagrafica e dati e tutti i descrittori delle loro dimension...
Costruttori per le classi datetime e timedelta.
classe per la gestione del logging
Utilities for CHARACTER variables.
Emit log message for a category with specific priority.