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.
Bill, > To: address@hidden > From: Bill Spotz <address@hidden> > Organization: UCAR/NCAR/SCD > Keywords: 199701102032.NAA01266 In the above message you wrote: > The netCDF library is not behaving the way I am expecting it to, and I > was hoping you could help. I have some two-dimensional data, and I am > trying to write a hyperslab which does not include the boundary. I > want to get the default missing value there so that an NCAR Graphics > contour plot of the data will leave the boundary data unplotted. > > I am using the FORTRAN interface and have included a short program > which recreates the problem. My intent is to write the variable > "info" such that the zero's get written and the minus one's do not. > But that is not the result I get. > > Thanks in advance, > Bill Spotz > > ===================================================================== > program junk > > integer IMAX > integer JMAX > parameter (IMAX=11, JMAX=11) > > double precision info(IMAX,JMAX) > integer i > integer j > > integer start(3) > integer count(3) > integer vdim(3) > integer infoid > > integer ncid > integer ier > > include 'netcdf.inc' > > do 20 i = 1, IMAX > do 10 j = 1, JMAX > if (i.eq.1 .or. i.eq.IMAX .or. j.eq.1 .or. j.eq.JMAX) then > info(i,j) = -1.0 > else > info(i,j) = 0.0 > end if > 10 continue > 20 continue > > start(1) = 2 > start(2) = 2 > start(3) = 1 > count(1) = IMAX-2 > count(2) = JMAX-2 > count(3) = 1 > > ncid = nccre("info.cdf",NCCLOB,ier) > vdim(1) = ncddef(ncid,'i',IMAX,ier) > vdim(2) = ncddef(ncid,'j',JMAX,ier) > vdim(3) = ncddef(ncid,'iterate',NCUNLIM,ier) > infoid = ncvdef(ncid,'info',NCDOUBLE,3,vdim,ier) > call ncendf(ncid,ier) > call ncvpt(ncid,infoid,start,count,info,ier) > call ncclos(ncid,ier) > > stop > end > > ------- End of Forwarded Message What you need to realize is that the `start' and `count' arrays refer to the external hyperslab and not the internal one. The netCDF library is going to start writing from the first element of the `info' array (i.e. info(1,1)) and not from where you think (i.e. info(2,2)). You should change the output code to something that writes the array one J-line at a time, e.g. start(1) = 2 start(3) = 1 count(1) = IMAX-2 count(2) = 1 count(3) = 1 do 30, j = 2, JMAX-1 start(2) = j call ncvpt(ncid,infoid,start,count,info(2,j),ier) 30 continue Please let me know if this helps. -------- Steve Emmerson <address@hidden>