This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
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