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.
Oops, forgot to CC: support-netcdf ... ------- Forwarded Message Date: Wed, 20 Nov 1996 10:27:54 -0700 From: Russ Rew <address@hidden> To: address@hidden (Mary Haley) Subject: Re: 961120: question about netCDF data files >To: address@hidden >From: address@hidden (Mary Haley) >Subject: question about netCDF data files >Organization: . >Keywords: 199611201626.AA17127 Hi Mary, > I wrote to you a few weeks ago asking about building a double precision > version of netCDF. By double precision, I'm talking about from the > Fortran end, using the "-r8" option with the Fortran compiler. > > Since netCDF is written in C, this doesn't really mean much, but I'm > wondering if I should be trying to convert the C code to double > precision, to satisfy the Fortran users who will be linking with > netCDF and using 8 byte reals. I hesitate to do this because I > don't know the netCDF code at all, and feel like I would be hacking > away blindly. > > I guess my question is if I buy myself anything by converting the > netCDF C code to double precision? No, the netCDF C code already handles single-precision floats (32-bit) and double-precision floats (64-bit) as separate types, and this distinction is also preserved in the FORTRAN interface. The netCDF library is an I/O library; it does no arithmetic on data values, so it's not really meaningful to "convert it to double precision". Fortran users can read and write 8-byte reals with the netCDF library by using NCDOUBLE netCDF variables. > A second question I have is how netCDF data files are different > between the Cray and 32-bit workstations? If I write a netCDF file on > the Cray, where floats are 8 bytes, how does it work that I'm able to > routines? There is no difference between netCDF data written on the Cray and the same data written on a 32-bit workstation. NetCDF variables are declared with an "external type", which for floating-point values may be either single-precision (NCFLOAT, 32 bits) or double-precision (NCDOUBLE, 64 bits). If you write a 64-bit float on the Cray into an NCFLOAT netCDF variable, you lose precision. The exact same thing occurs on a 32-bit workstation, if you choose to write 64-bit double-precision floats into a 32-bit representation. In other words, the user has control over whether all the precision is preserved or not by how they define their netCDF variables, independent of what platform they are on. The library handles all the details of conversion. > Sorry if these are newbie questions. I just want to make sure I > understand all this before I make a decision on how to build the > netCDF libraries for users who will be working with 8 byte floats. That's OK. NetCDF has already been used on 64-bit platforms such as the Cray, DEC Alpha, and SGI IRIX64 for some time, so we know the design works. - --Russ ------- End of Forwarded Message