[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[netCDF #ZMF-465105]: can not append data to an exist NETCDF file on cygwin platform
- Subject: [netCDF #ZMF-465105]: can not append data to an exist NETCDF file on cygwin platform
- Date: Thu, 22 Aug 2013 10:34:57 -0600
Hi Xueming Zhu,
> I tried to write data to an exist netCDF file with record variables
> on cygwin platform. My fortran codes as follow,
>
> clm =trim(direc)//trim(casename)//'_monthly_'//year//'.nc'
> ierr=nf90_open(trim(clm),nf90_write,ncid)
> CALL HANDLE_ERR(ierr)
> do m=1,12
> ierr=nf90_inq_varid(ncid,'ocean_time',varid)
> CALL HANDLE_ERR(ierr)
> ierr=nf90_put_var(ncid,varid,dnum,start=(/ m /))
> CALL HANDLE_ERR(ierr)
> enddo
>
> the variable ocean_time's dimension is ocean_time, which is an
> unlimited dimension. At beginning, ocean_time's dimension is 1. But
> after the loop, it is 1 still. Some ncdump results as follow,
>
> $ ncdump.exe -v ocean_time np8_monthly_2002.nc
> netcdf np8_monthly_2002 {
> dimensions:
> tracer = 2 ;
> boundary = 4 ;
> s_rho = 22 ;
> s_w = 23 ;
> ocean_time = UNLIMITED ; // (1 currently)
> eta_rho = 633 ;
> xi_rho = 1545 ;
> eta_u = 633 ;
> xi_u = 1544 ;
> eta_v = 632 ;
> xi_v = 1545 ;
> variables:
>
> double ocean_time(ocean_time) ;
> ocean_time:long_name = "averaged time since
> initialization" ;
> ocean_time:units = "seconds since 1990-01-01 00:00:00" ;
> ocean_time:calendar = "gregorian" ;
> ocean_time:field = "time, scalar, series" ;
>
> I found the file size changed, but had not got any error when run the
> fortran code. It is weird for me.
>
> Can you give me any suggestions to fix the problem? Thanks a lot.
I think the problem is that you should be using nf90_put_vara
instead of nf90_put_var. For an explanation why, see this section
of the nf90_put_var documentation:
http://www.unidata.ucar.edu/netcdf/docs/netcdf-f90.html#NF90_005fPUT_005fVAR
where it says:
Take care when using the simplest forms of this interface with
record variables (variables that use the NF90_UNLIMITED dimension)
when you don't specify how many records are to be written. If you
try to write all the values of a record variable into a netCDF file
that has no record data yet (hence has 0 records), nothing will be
written. Similarly, if you try to write all the values of a record
variable from an array but there are more records in the file than
you assume, more in-memory data will be accessed than you expect,
which may cause a segmentation violation. To avoid such problems, it
is better to specify start and count arguments for variables that
use the NF90_UNLIMITED dimension.
--Russ
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu
Ticket Details
===================
Ticket ID: ZMF-465105
Department: Support netCDF
Priority: Normal
Status: Closed