[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netCDF #YEC-124697]: NetCDF Data Types



Lee,

I can duplicate what you are seeing.  It looks like a bug.

If I use

  character (len = 5) :: ch = "abcde"
 ...
  call check(nf90_put_var(ncid, varid2, ch))

it works fine:
  ncdump CharTest.nc
 ...
  CH = "abcde" ;

but the F90 library seems to be treating

  character (len = 1), dimension (5) :: ch = (/'a', 'b', 'c', 'd', 'e' /)
 ...
  call check(nf90_put_var(ncid, varid2, ch))

as if it's a 2D array, becasue it ends up calling
  nf90_put_var_1d_text
which calls
  nf_put_vars_text(ncid, varid, localStart, localCount, localStride, values(1))
with
  localstart(1:2) =
    (1)    1
    (2)    1
  localcount(1:2) =
    (1)    1
    (2)    5
  localstride(1:2) =
    (1)    1
    (2)    1

as if it were an array of 5 strings, each of length 1, rather than an array
of 5 characters.  I didin't write this and don't know enough about F90 to be
sure of how to fix it without breaking how text strings are handled.  Is it
possible to do what you want with bytes, using the ichar() and char()
Fortran intrinsic functions?

Maybe Ed can see how to fix it when he gets back.  Or you could look at the
function nf90_put_var_1D_text() in f90/netcdf_text_variables.f90 and see if
you can suggest a fix.  The original author of the Fortran 90 interface,
Robert Pincus, may still work with the NOAA CIRES Climate Diagnostic Center
(or whatever it's called now).  We may try to get him to help with this if
we can't figure it out.

--Russ

--Russ





Russ Rew                                         UCAR Unidata Program
address@hidden                     http://www.unidata.ucar.edu



Ticket Details
===================
Ticket ID: YEC-124697
Department: Support netCDF
Priority: Normal
Status: Closed