function self = ncdim(theDimname, theDimsize, theNetcdf) % ncdim/ncdim -- Constructor for ncdim class. % ncdim(theDimname, theDimsize, theNetcdf) defines a new ncdim % object with theDimname and theDimsize in theNetcdf, a netcdf % object. The equivalent redirection syntax is % theNetcdf < ncdim(theDimname, theDimsize). The result is % assigned silently to 'ans" if no output argument is given. % ncdim(theDimname, theNetcdf) returns a new ncdim object % corresponding to theDimname in theNetcdf, a netcdf or % ncvar object. % ncdim (no argument) returns a raw "ncdim" object. % Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO. % All Rights Reserved. % Disclosure without explicit written consent from the % copyright owner does not constitute publication. % Version of 07-Aug-1997 15:45:48. if nargin < 1 & nargout < 1, help(mfilename), return, end if nargout > 0, self = []; end % Basic structure. theStruct.itsDimsize = []; % Raw object. if nargin < 1 & nargout > 0 self = class(theStruct, 'ncdim', ncitem); return end if nargin == 2 & ... (isa(theDimsize, 'netcdf') | isa(theDimsize, 'ncvar')) result = []; theNetcdf = theDimsize; theNCid = ncid(theNetcdf); theDimsize = -1; switch class(theDimname) case 'char' [theDimid, status] = ncmex('dimid', theNCid, theDimname); case 'double' theDimid = theDimname - 1; status = 0; otherwise status = -1; ncillegal end if status >= 0 [theDimname, theDimsize, status] = ncmex('diminq', theNCid, theDimid); if status >= 0 theStruct.itsDimsize = theDimsize; result = class(theStruct, 'ncdim', ncitem(theDimname, theNCid, theDimid)); end end if nargout > 0 self = result; else ncans(result) end return end theNCid = -1; if nargin > 2, theNCid = ncid(theNetcdf); end if ~finite(theDimsize), theDimsize = 0; end status = 0; theDimid = -1; if theNCid ~= -1 switch class(theDimname) case 'char' [theDimid, status] = ncmex('dimid', theNCid, theDimname); otherwise status = -1; warning(' ## Illegal syntax.') end if status < 0 theTempname = theDimname; theTempname(:) = '-'; [theDimid, status] = ncmex('dimdef', theNCid, theTempname, theDimsize); if status < 0 status = ncmex('redef', theNCid); if status >= 0 [theDimid, status] = ... ncmex('dimdef', theNCid, theTempname, theDimsize); end end if status >= 0 status = ncmex('dimrename', theNCid, theDimid, theDimname); end end if status >= 0 [theDimname, theDimsize, status] = ncmex('diminq', theNCid, theDimid); end end if status >= 0 theStruct.itsDimsize = theDimsize; result = class(theStruct, 'ncdim', ncitem(theDimname, theNCid, theDimid)); else result = []; end if nargout > 0 self = result; else ncans(result) end