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.
Verena, >Date: Wed, 10 Jul 2002 15:34:31 +0200 >From: Verena Cals <address@hidden> >Organization: ICG I: Stratosphäre >To: Steve Emmerson <address@hidden> >Subject: two more questions >Keywords: 200207101334.g6ADYca23737 The above message contained the following: ... > rcode=nf90_inquire_variable(ncid,varid,dimids=dim_array) ... > In our Linux-cluster it works (and using the old version of netcdf it > works on cray too), but using our tinkered-netcdf-3.5.0-cray-version on > the cray the sequence of the above netcdf-statements doesn't work. Up to > inclusive the statement > rcode=nf90_inquire_variable(ncid,varid,dimids=dim_array) it works, but > the values read on text_len and dim_len are wrong. There is a bug in the Fortran-90 function nf90_inquire_variable(...) in the current release: the dimension identifier vector isn't handled correctly. The enclosed replacement for file f90/netcdf_variables.f90 should fix this problem. > My second question applys to the cray too. > In one of our programs we want to open an file, which can be an > ascii-file or an netcdf-file. Up to now we did the following: > > rcode=nf90_open(o3dat, nf90_nowrite, ncid) > if (rcode == 0) then > ! o3dat is a Netcdf file > ... > rcode = nf90_close(ncid) > else > ! no Netcdf file, read in ascii O3 profile data > > ! open the data file. > open(1, file=o3dat, status="old", position="asis") > ... > > In our Linux-cluster this way works, but if the file is an ascii-file on > the cray the program crashes on opening the ascii-file with the normal > fortran 90 open-statement. The following error occurs: > > lib-1069 chem: UNRECOVERABLE library error > The file cannot be opened for FORMATTED I/O. > > Encountered during an OPEN of unit 1 > Fortran unit 1 is not connected > Error initiated at line 761 in routine '_f_open'. > Abort > > Beginning of Traceback: > Interrupt at address 577463a in routine '_lwp_killm'. > Called from line 32 (address 574152a) in routine 'raise'. > Called from line 127 (address 502263d) in routine 'abort'. > Called from line 59 (address 1112533c) in routine '_ferr'. > Called from line 761 (address 1142421b) in routine '_f_open'. > Called from line 380 (address 1144425c) in routine '__OPN'. > Called from line 417 (address 1144617b) in routine '_OPEN'. > Called from line 3691 (address 101027a) in routine 'READO3_in_DISSOC'. > Called from line 3514 (address 74524d) in routine > 'INIPHOTO_in_DISSOC'. > Called from line 103 (address 121614d) in routine 'DISSOC'. > Called from line 130 (address 207250a) in routine 'PHOTOL'. > Called from line 196 (address 47175c) in routine 'CDRIVE'. > Called from line 339 (address 2100c) in routine 'CHEM'. > Called from line 350 (address 524115c) in routine '$START$'. > End of Traceback. > boxtest_fam.job[77]: 97936 Abort(coredump) > > The error has to do something with the temporary .assign file, in which > an entry occurs by using the nf90_open statement. The path and the name > of the file opened by nf90_open is recorded in .assign. During the > failed nf90_open the name of the ascii-file is recorded in .assign, > whereby normal fortran 90 open is not able to open this ascii-file. > Using the old netcdf on the cray this failure doesn't occured. Du you > know, why this failure occurs now? I'm afraid that I don't know enough about Fortran I/0 on the Cray to know what the problem is. I can tell you that, on a Cray, the nf90_open(...) function eventually calls the function ncio_create(...) in the file libsrc/ffio.c. This function calls ncio_ffio_assign(char*) in the same file to perform the assignment, which calls Cray routine ASNQFILE. When closing a netCDF file, the function nf90_close(...) eventually calls the function ncio_close(...) in the same file and that function doesn't appear to perform any deassignment. If you can tell us what to do to deassign the file (i.e. the logical reverse of ASNQFILE) then we could add it to ncio_close(...). ... > Regards, > Verena Cals > > > -- > > Verena Cals > > ICG I: Stratosphäre > Forschungszentrum Jülich GmbH > EMail: address@hidden Regards, Steve Emmerson <http://www.unidata.ucar.edu> ! ----- ! Variable definitions and inquiry ! ----- function nf90_def_var_Scalar(ncid, name, xtype, varid) integer, intent( in) :: ncid character (len = *), intent( in) :: name integer, intent( in) :: xtype integer, intent(out) :: varid integer :: nf90_def_var_Scalar ! Dummy - shouldn't get used integer, dimension(1) :: dimids nf90_def_var_Scalar = nf_def_var(ncid, name, xtype, 0, dimids, varid) end function nf90_def_var_Scalar ! ----- function nf90_def_var_oneDim(ncid, name, xtype, dimids, varid) integer, intent( in) :: ncid character (len = *), intent( in) :: name integer, intent( in) :: xtype integer, intent( in) :: dimids integer, intent(out) :: varid integer :: nf90_def_var_oneDim nf90_def_var_oneDim = nf_def_var(ncid, name, xtype, 1, dimids, varid) end function nf90_def_var_oneDim ! ----- function nf90_def_var_ManyDims(ncid, name, xtype, dimids, varid) integer, intent( in) :: ncid character (len = *), intent( in) :: name integer, intent( in) :: xtype integer, dimension(:), intent( in) :: dimids integer, intent(out) :: varid integer :: nf90_def_var_ManyDims nf90_def_var_ManyDims = nf_def_var(ncid, name, xtype, size(dimids), dimids, varid) end function nf90_def_var_ManyDims ! ----- function nf90_inq_varid(ncid, name, varid) integer, intent( in) :: ncid character (len = *), intent( in) :: name integer, intent(out) :: varid integer :: nf90_inq_varid nf90_inq_varid = nf_inq_varid(ncid, name, varid) end function nf90_inq_varid ! ----- function nf90_Inquire_Variable(ncid, varid, name, xtype, ndims, dimids, nAtts) integer, intent( in) :: ncid, varid character (len = *), optional, intent(out) :: name integer, optional, intent(out) :: xtype, ndims integer, dimension(:), optional, intent(out) :: dimids integer, optional, intent(out) :: nAtts integer :: nf90_Inquire_Variable ! Local variables character (len = nf90_max_name) :: varName integer :: externalType, numDimensions integer, dimension(nf90_max_var_dims) :: dimensionIDs integer :: numAttributes nf90_Inquire_Variable = nf_inq_var(ncid, varid, varName, externalType, & numDimensions, dimensionIDs, numAttributes) if (nf90_Inquire_Variable == nf90_noerr) then if(present(name)) name = trim(varName) if(present(xtype)) xtype = externalType if(present(ndims)) ndims = numDimensions if(present(dimids)) then if (size(dimids) .ge. numDimensions) then dimids(:numDimensions) = dimensionIDs(:numDimensions) else nf90_Inquire_Variable = nf90_einval endif endif if(present(nAtts)) nAtts = numAttributes endif end function nf90_Inquire_Variable ! ----- function nf90_rename_var(ncid, varid, newname) integer, intent( in) :: ncid, varid character (len = *), intent( in) :: newname integer :: nf90_rename_var nf90_rename_var = nf_rename_var(ncid, varid, newname) end function nf90_rename_var ! -----