MATLAB Answers

Error using netcdflib, error in netcdf.open

49 views (last 30 days)
Barbara Bentz
Barbara Bentz on 3 May 2021
Commented: 金龙 张 on 13 May 2021
My code to open and download files from a OPeNDAP URL is no longer working. It was working great, then all of a sudden I get errors. I am using Matlab R2020a. Thanks for the help. Barbara
*******
The NetCDF library encountered an error during execution of 'open' function - 'Malformed or inaccessible DAP DDS
(NC_EDDS)'. If the data source was an OPeNDAP URL, see the OPeNDAP Troubleshooting section in the Users Guide.
Error in netcdf.open (line 67)
[varargout{:}] = netcdflib ( 'open', filename, varargin{1} );
Error in internal.matlab.imagesci.nc/openToRead (line 1278)
this.ncRootid = netcdf.open(this.Filename,'NOWRITE');
Error in internal.matlab.imagesci.nc (line 121)
this.openToRead();
Error in ncread (line 61)
ncObj = internal.matlab.imagesci.nc(ncFile);
********
Code:
myVar = 'tmin';
myURL = ['http://thredds.northwestknowledge.net:8080/thredds/dodsC/agg_terraclimate_',myVar,'_1958_CurrentYear_GLOBE.nc'];
latList=[41 44 45 41]; %list of north latitudes for each point location
lonList=[-110 -100 -101 -95]; %list of East longitudes for each point location
NUM_POINTS = length(latList');
year_start = 1980;
month_start=1;
year_end = 2019;
month_end=12;
%===================================================
timebounds_start =datenum(year_start,month_start,1)-datenum(1900,1,1);
timebounds_end = datenum(year_end,month_end,1)-datenum(1900,1,1);
timebounds = [timebounds_start timebounds_end];
lat=ncread(myURL,'lat');
lon=ncread(myURL,'lon');
time=ncread(myURL,'time');
[Y,M,D]=datevec(time+datenum(1900,1,1));
ftimei=find(time>=timebounds(1) & time<=timebounds(2));
time = time(ftimei);
NUM_TIME= length(time);
myData = NaN(NUM_POINTS,NUM_TIME);
myLat = NaN(NUM_POINTS,1);
myLon = NaN(NUM_POINTS,1);
for i= 1:NUM_POINTS;
[dist,flati]=min(abs(lat-latList(i)));
[dist,floni]=min(abs(lon-lonList(i)));
myLat(i)=lat(flati);
myLon(i)=lon(floni);
myData(i,:)=ncread(myURL,myVar,[floni(1) flati(1) ftimei(1)],[length(floni) length(flati) length(ftimei)],[1 1 1]);
end;

Answers (1)

Prabhan Purwar
Prabhan Purwar on 11 May 2021
Hi Barbara,
This is a known issue with the NetCDF library in R2020a and is now fixed in R2020b and further releases.
The easiest workaround is to upgrade to R2020b or R2021a.
Please let me know if you are still having any concerns.
Thanks
  1 Comment
金龙 张
金龙 张 on 13 May 2021
I met the same problem with the moderator.
This error is still exist when I use R2021a. And the error will happen only when I want to read the data of uo.
size uo is : uo(lon,lat,lev,time)
I hope I won't disturb you.
--------------------
my code:
lon=ncread(filename,'longitude');
lat=ncread(filename,'latitude');
lev=ncread(filename,'lev');
uo=ncread(filename,'uo');
---------------------
error code:
错误使用 matlab.internal.imagesci.netcdflib
NetCDF 库在执行 'getVarFloat' 函数期间遇到错误 - 'HDF error (NC_EHDFERR)'。
出错 netcdf.getVar (第 182 行)
data = matlab.internal.imagesci.netcdflib(funcstr,ncid,varid,varargin{:});
出错 internal.matlab.imagesci.nc/read (第 607 行)
data = netcdf.getVar(gid, varid);
出错 ncread (第 66 行)
vardata = ncObj.read(varName, varargin{:});

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!