[parallel-netcdf] #30: Action prohibited on NC_GLOBAL varid

Federico Carotenuto carotenuto.federico at gmail.com
Mon May 29 06:05:39 CDT 2017


Dear Wei-Keng,

Thanks to your suggestions I was finally able to understand what's causing
the issue.

I asked the model to print out the subtitle (one of the golbal attributes)
of the netcdf file that's being passed to nfmpi and, in fact, it seems that
the model is passing the wrong file to the function.

I didn't catch this issue before because if I simply renamed (or removed)
the correct file, the model broke with a consistent error (i.e.: stating
that the correct file was not there) and I therefore assumed that the
correct id was passed to the function.

It is, therefore, NOT a pnetcdf issue, but something within the model.

Thank you for your efficient and clear support and Best Regards,

Federico Carotenuto



2017-05-26 19:10 GMT+02:00 Wei-keng Liao <wkliao at eecs.northwestern.edu>:

> Hi, Federico
>
> Your code fragment looks fine with me. Based on your description,
> the value of lengttt2 should be 3.
>
> Please run command "ncdump -h file.nc" or "ncmpidump -h file.nc"
> which show the file header that include the current value of the
> unlimited dimension, "time". Its value should be 3.
>
> Please also check whether the same file is used by the ncdump command
> and your Fortran program.
>
> If the above are all checked out file, could you provide a shorten program
> that can reproduce the error, so I can take a look?
>
> Wei-keng
>
> On May 26, 2017, at 9:34 AM, Federico Carotenuto wrote:
>
> > Dear Wei-keng,
> >
> > Thanks to your suggestion I was able to work around the issue, just to
> be faced with a different error about "Index exceeds dimension bound".
> >
> > My code now looks like this:
> >
> > ncstat = nfmpi_inq_varid(emisa_nc%id, 'Times', emisa_times_varid);
> NCERR(__LINE__)
> > ncstat = nfmpi_inq_vardimid(emisa_nc%id,emisa_times_varid,dimidz);
> NCERR(__LINE__)
> > write(*,*) "EMISA_TIMES HAS DIMID(1) = ",dimidz(1)
> > write(*,*) "EMISA TIMES HAS DIMID(2) = ",dimidz(2)
> > ncstat = nfmpi_inq_dim(emisa_nc%id,dimidz(1),dimchar1,lengttt1);
> NCERR(__LINE__)
> > ncstat = nfmpi_inq_dim(emisa_nc%id,dimidz(2),dimchar2,lengttt2);
> NCERR(__LINE__)
> > write(*,*) "DIMID(1) LENGTH = ",lengttt1
> > write(*,*) "DIMID(1) NAME   = ",dimchar1
> > write(*,*) "DIMID(2) LENGTH = ",lengttt2
> > write(*,*) "DIMID(2) NAME = ",dimchar2
> > ncstat = nfmpi_get_vara_text_all(emisa_nc%id, emisa_times_varid, &
> >  &   (/i2offset(1), i2offset(ihourrun+1)/), (/i2offset(dlen),
> i2offset(1)/), datebuf)
> > NCERR(__LINE__)
> >
> > It appears that the correct varable id for "Times" was actually 4 from
> the Fortran point of view. "Times" have two dimensions: 1 to store the
> time itself in format "YYYY/MM/DD hh:mm:ss" (total length 19 characters),
> and 2 is the unlimited dimension time.
> >
> > Now while dimension one with name "DateStrLen" has a correct length of
> 19, the time dimension has apparently a length of 0, thus generating the
> aforementioned error.
> > By checking on the file with other tools that dimension is unlimited but
> should have length 3 in the file.
> >
> >
> >
> >
> >
> >
> > 2017-05-26 14:14 GMT+02:00 Federico Carotenuto <
> carotenuto.federico at gmail.com>:
> > Dear Wei-keng,
> >
> > Thank you for your quick reply! Sorry if I'm replying via email but I
> can't find an option to reply to the ticket directly.
> >
> > I followed your suggestion and modified the source code in the following
> way, in order to echo the value of emisa_times_varid before NCERR
> >
> > write(*,*) "EMISA_TIMES_VARID =",emisa_times_varid
> > ncstat = nfmpi_get_vara_text_all(emisa_
> > nc%id, emisa_times_varid, &
> >          &   (/i2offset(1), i2offset(ihourrun+1)/), (/i2offset(dlen),
> i2offset(1)/), datebuf)
> > write(*,*) "EMISA_TIMES_VARID AFTER =",emisa_times_varid
> >           NCERR(__LINE__)
> >
> >
> > In both cases, before and after the call to nfmpi, the value of
> emisa_times_varid is 0.
> >
> > As your links states that is effectively the NC_GLOBAL constant for
> Fortran.
> >
> >
> >
> >
> > 2017-05-25 18:46 GMT+02:00 parallel-netcdf <parallel-netcdf at mcs.anl.gov
> >:
> > #30: Action prohibited on NC_GLOBAL varid
> > ------------------------------------------------------------
> -----+----------
> >  Reporter:  Federico Carotenuto <carotenuto.federico@…>          |
>  Owner:  wkliao
> >      Type:  defect/bug                                           |
> Status:  assigned
> >  Priority:  major                                                |
>  Milestone:
> > Component:  parallel-netcdf                                      |
>  Version:  1.8.1
> >  Keywords:                                                       |
> > ------------------------------------------------------------
> -----+----------
> > Changes (by wkliao):
> >
> >   * owner:  robl => wkliao
> >   * status:  new => assigned
> >
> >
> > Comment:
> >
> >  Hi,
> >
> >  The Fortran constant NF_GLOBAL is defined in both NetCDF and PnetCDF as
> >  value 0.
> >  Its corresponding constant in C library NC_GLOBAL is defined as value
> -1.
> >  The variable ID returned from the Fortran nfmpi_def_var API should have
> a
> >  value larger than 0.
> >  You might want to check the value of emisa_times_varid right after the
> >  call to nfmpi_def_var.
> >  Do let me know if you got 0 for emisa_times_varid.
> >
> >  The MATLAB may return a value that is C based.
> >
> >  See definition of nf_global in the NetCDF Fortran header file from this
> >  URL[[br]]
> >  https://github.com/Unidata/netcdf-
> >  fortran/blob/master/fortran/netcdf3.inc#L96
> >
> >  and PnetCDF Fortran header files from[[br]]
> >  https://trac.mcs.anl.gov/projects/parallel-
> >  netcdf/browser/trunk/src/libf/pnetcdf.inc.in#L161
> >
> >  Wei-keng
> >
> > --
> > Ticket URL: <http://trac.mcs.anl.gov/projects/parallel-netcdf/
> ticket/30#comment:1>
> > parallel-netcdf <https://trac.mcs.anl.gov/projects/parallel-netcdf>
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/parallel-netcdf/attachments/20170529/7b3cf8b0/attachment-0001.html>


More information about the parallel-netcdf mailing list