|
◆ volgrid6d_export_to_vapor()
subroutine volgrid6d_export_to_vapor |
( |
type(volgrid6d), intent(inout) |
this, |
|
|
logical, intent(in) |
normalize, |
|
|
logical, intent(in), optional |
rzscan, |
|
|
character(len=*), intent(in), optional |
filename, |
|
|
character(len=*), intent(out), optional |
filename_auto, |
|
|
logical, intent(in), optional |
reusevdf |
|
) |
| |
Write on file Volgrid6d volume in vdf format for vapor.
Write vg6d volume in wavelet vapor file. - Parametri
-
[in,out] | this | volume volgrid6d to write |
[in] | normalize | if true normalize variables to v7d (dballe) standard changing this in output |
[in] | rzscan | if true reverse Z (level) order in vdf export |
[in] | filename | file name to write |
[out] | filename_auto | generated file name if "filename" is missing |
[in] | reusevdf | if true reuse and modify an existing vdf file appendig data to a vapor data collection during export to vapor.') |
Definizione alla linea 102 del file volgrid6d_vapor_class.F90.
103 if (.not. exist) then
104 call l4f_category_log(this%category,l4f_error, "file do not exist; cannot reuse file: "//trim(lfilename))
108 call l4f_category_log(this%category,l4f_error, "file exist; cannot open new file: "//trim(lfilename))
112 call l4f_category_log(this%category,l4f_info, "writing on file: "//trim(lfilename))
114 if ( associated(this%time)) ntime= size(this%time)
115 if ( associated(this%timerange)) ntimerange= size(this%timerange)
116 if ( associated(this%level)) nlevel= size(this%level)
117 if ( associated(this%var)) nvar= size(this%var)
119 if (c_e(ntime) .and. c_e(ntimerange) .and. c_e(nlevel) .and. c_e(nvar)) then
121 allocate(varnames(nvar),vardescriptions(nvar),varbufr(nvar))
123 call get_val (this%griddim, nx=xyzdim(1) , ny=xyzdim(2) )
129 if ( associated(this%voldati)) then
131 if (optio_log(normalize)) then
132 CALL vargrib2varbufr(this%var, varbufr, c_func)
135 IF ( ASSOCIATED(c_func)) THEN
137 call l4f_category_log(this%category,l4f_info, "normalize is activated, so the volume data are changed in output")
139 this%voldati(:,:,:,:,:,ivar) = convert(c_func(ivar),this%voldati(:,:,:,:,:,ivar))
148 j=firsttrue(varbufr(ivar)%btable == dballevar(:)%btable)
151 varbufr(ivar)%description = dballevar(j)%description
152 varbufr(ivar)%unit = dballevar(j)%unit
153 varbufr(ivar)%scalefactor = dballevar(j)%scalefactor
155 varnames(ivar) = varbufr(ivar)%btable
156 vardescriptions(ivar) = trim(varbufr(ivar)%description)// "_"//trim(varbufr(ivar)%unit)
159 if (varnames(ivar) == "B10007") then
165 varnames(ivar) = "Vnotnormalized_"//t2c(ivar)
166 vardescriptions(ivar) = "None"
174 varnames(ivar) = "V"//trim(to_char(this%var(ivar)%number))
179 if (this%time_definition == 1 .OR. this%time_definition == 2) then
181 allocate(tsdescriptions(ntimera))
184 tsdescriptions(i)=to_char(this%time(i))
188 allocate(tsdescriptions(ntimera))
191 tsdescriptions(i)=to_char(this%timerange(i))
196 call get_val (this%griddim, xmin=extents(1),ymin=extents(2), xmax=extents(4) , ymax=extents(5))
201 call get_val (this%griddim, proj_type=proj_type)
213 select case (proj_type)
216 call l4f_category_log(this%category,l4f_info, "VDF: probably vapor do not support this projection ?: "//trim(proj_type))
217 mapprojection = "+proj=latlon +ellps=sphere"
219 extents(1)=extents(1)*111177.d0
220 extents(2)=extents(2)*111177.d0
221 extents(3)=extents(3)*100000.d0
222 extents(4)=extents(4)*111177.d0
223 extents(5)=extents(5)*111177.d0
224 extents(6)=extents(6)*100000.d0
231 call l4f_category_log(this%category,l4f_info, "VDF: vapor probably support this projection: "//trim(proj_type))
233 call get_val (this%griddim, longitude_south_pole=longitude_south_pole,&
234 latitude_south_pole=latitude_south_pole, angle_rotation=angle_rotation)
240 if (angle_rotation /= 0. ) then
241 call l4f_category_log(this%category,l4f_error, "angle_rotation /= 0 not supported in vapor (proj)")
245 mapprojection = "+proj=ob_tran +o_proj=latlong +o_lat_p="//t2c(-latitude_south_pole)//&
246 "d +o_lon_p=0d +lon_0="//t2c(longitude_south_pole)// "d +ellps=sphere"
248 extents(1)=extents(1)*111177.d0
249 extents(2)=extents(2)*111177.d0
250 extents(3)=extents(3)*100000.d0
251 extents(4)=extents(4)*111177.d0
252 extents(5)=extents(5)*111177.d0
253 extents(6)=extents(6)*100000.d0
257 call l4f_category_log(this%category,l4f_warn, "VDF: vapor do not support this projection: "//trim(proj_type))
258 call get_val (this%griddim, xmin=extents(1),ymin=extents(2), xmax=extents(4) , ymax=extents(5),&
259 zone=zone, xoff=xoff, yoff=yoff, ellips_smaj_axis=ellips_smaj_axis, ellips_flatt=ellips_flatt)
264 mapprojection = "+proj=utm +zone="//t2c(zone)
271 call l4f_category_log(this%category,l4f_warn,&
272 "VDF: proj or vdf (vapor) export do not support this projection: "//trim(proj_type))
273 mapprojection = cmiss
278 if(ier==0) call l4f_category_log(this%category,l4f_info, "VDF: projection parameter "//mapprojection)
281 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call create_metadata_from_file")
282 ier = vdf4f_create_metadata_from_file(lfilename)
284 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call create_metadata")
285 ier = vdf4f_create_metadata(xyzdim,vdctype=2)
287 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call set_missing_value")
288 if(ier==0) ier = vdf4f_set_missing_value(vdfmiss)
290 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call set_num_timesteps")
291 if(ier==0) ier = vdf4f_set_num_timesteps(ntimera)
293 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_set_comment")
294 if(ier==0) ier = vdf4f_set_comment( "vogrid6d exported")
296 if(ier==0) ier = vdf4f_set_coord_system_type(coordsystemtype= "cartesian")
298 if (c_e(indele)) then
299 if(ier==0) call l4f_category_log(this%category,l4f_info, "VDF: ELEVATION (B10007) found: setting gridtype to layered")
300 extents(6) = maxval(this%voldati(:,:,:,:,:,indele),c_e(this%voldati(:,:,:,:,:,indele)))
301 if(ier==0) ier = vdf4f_set_grid_type(gridtype= "layered")
303 if(ier==0) ier = vdf4f_set_grid_type(gridtype= "regular")
306 if(ier==0) ier = vdf4f_set_grid_extents(extents=extents)
307 if(ier==0) ier = vdf4f_set_map_projection(mapprojection=mapprojection)
315 if (c_e(indele)) varnames(indele) = "ELEVATION"
317 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call set_variables_names")
318 if(ier==0) ier = vdf4f_set_variables_names(nvar, varnames)
321 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call set_v_comment")
322 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call set_ts_comment")
325 if(ier==0) ier = vdf4f_set_ts_comment(i-1,tsdescriptions(i))
327 if(ier==0) ier = vdf4f_set_v_comment(i-1,varnames(j),vardescriptions(j))
334 varnames(ivar)= "XY_"//t2c(varnames(ivar))
337 if (c_e(indele)) varnames(indele) = "HGT"
339 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_set_variables_2d_xy")
340 if(ier==0) ier = vdf4f_set_variables_2d_xy(nvar, varnames)
344 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call write_metadata")
345 if(ier==0) ier = vdf4f_write_metadata(lfilename)
347 if(ier==0) ier = destroy_metadata_c()
352 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_create_writer")
353 if(ier==0) ier = vdf4f_create_writer(lfilename)
355 if (this%time_definition == 1) then
357 if (ntimerange /= 1) then
358 if(ier==0) call l4f_category_log(this%category,l4f_warn, "VDF: writing only first timerange, there are:"//t2c(ntimerange))
361 if (.not. c_e(indele)) call fill_underground_missing_values(this%voldati(:,:,:,:,1,:))
362 if(ier==0) call l4f_category_log(this%category,l4f_info, "scan VDF (vapor file) for times")
365 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_write")
366 if(ier==0) ier = vdf4f_write(this%voldati(:,:,:,:,1,:), xyzdim, ntime, nvar, varnames, irzscan)
368 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_write_2d_xy")
369 if(ier==0) ier = vdf4f_write_2d_xy(this%voldati(:,:,1,:,1,:), xyzdim(:2), ntime, nvar ,varnames)
376 if(ier==0) call l4f_category_log(this%category,l4f_warn, "VDF: writing only fisth time, there are:"//t2c(ntime))
379 if (.not. c_e(indele)) call fill_underground_missing_values(this%voldati(:,:,:,1,:,:))
380 if(ier==0) call l4f_category_log(this%category,l4f_info, "scan VDF (vapor file) for timeranges")
383 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_write")
384 if(ier==0) ier = vdf4f_write(this%voldati(:,:,:,1,:,:), xyzdim, ntimerange, nvar, varnames, irzscan)
386 if(ier==0) call l4f_category_log(this%category,l4f_debug, "VDF: call vdf4f_write_2d_xy")
387 if(ier==0) ier = vdf4f_write_2d_xy(this%voldati(:,:,1,1,:,:), xyzdim(:2), ntimerange, nvar, varnames)
393 if (ier /= 0) call l4f_category_log(this%category,l4f_error, "export to vdf: "//vdf4f_get_err_msg())
396 deallocate(varnames,vardescriptions,tsdescriptions,varbufr)
397 if (ier==0) ier = destroy_writer_c()
400 call l4f_category_log(this%category,l4f_error, "exporting to vdf")
401 CALL raise_fatal_error( "exporting to vdf")
406 call l4f_category_log(this%category,l4f_warn, "volume with voldati not associated: not exported to vdf")
412 call l4f_category_log(this%category,l4f_warn, "volume with some dimensions to 0: not exported to vdf")
429 subroutine fill_underground_missing_values(voldati)
430 real, intent(inout) :: voldati(:,:,:,:,:)
432 integer :: x,y,z,tim,var,zz
434 do x=1, size(voldati,1)
435 do y=1, size(voldati,2)
436 do tim=1, size(voldati,4)
437 do var=1, size(voldati,5)
438 do z=1, size(voldati,3)
440 if (.not. c_e(voldati(x,y,z,tim,var))) then
441 zz=firsttrue(c_e(voldati(x,y,:,tim,var)))
443 voldati(x,y,z,tim,var)=voldati(x,y,firsttrue(c_e(voldati(x,y,:,tim,var))),tim,var)
445 call l4f_log(l4f_warn, "fill_underground_missing_values: there are only missing values in the full coloumn")
459 end subroutine fill_underground_missing_values
461 end subroutine volgrid6d_export_to_vapor
463 end module volgrid6d_vapor_class
|