📄 mexcdf.m
字号:
function [varargout] = mexcdf(varargin)
% mexcdf -- Driver for Matlab-5/NetCDF C-Language interface.
% mexcdf('action', ...) performs the specified NetCDF action.
% When writing or reading a NetCDF variable, the dimensional
% sequence of the targetted Matlab array must be reversed,
% either BEFORE using 'varput' or 'varputg', or AFTER using
% 'varget' or 'vargetg'. This preserves the left-to-right
% dimensional arrangement that is defined by 'vardef' and
% retrieved by 'varinq'. Data output from a variable are
% returned as a Matlab matrix (two-dimensional), in keeping
% with the behavior of mexcdf under Matlab-4. The base-index
% for slabs is zero (0), and -1 can be used to specify the
% remaining count along any variable direction from the
% starting point. NOTE: a vector (an array with no more
% than one non-unity dimension) is always returned as
% a column, by mexcdf convention.
%
% To process multi-dimensional arrays under Matlab-5,
% use "ncmex", rather than "mexcdf".
%
% mexcdf('USAGE')
% [cdfid, rcode] = mexcdf('CREATE', 'path', cmode)
% cdfid = mexcdf('OPEN', 'path', mode)
% status = mexcdf('REDEF', cdfid)
% status = mexcdf('ENDEF', cdfid)
% [ndims, nvars, natts, recdim, status] = mexcdf('INQUIRE', cdfid)
% status = mexcdf('SYNC', cdfid)
% status = mexcdf('ABORT', cdfid)
% status = mexcdf('CLOSE', cdfid)
%
% status = mexcdf('DIMDEF', cdfid, 'name', length)
% [dimid, rcode] = mexcdf('DIMID', cdfid, 'name')
% ['name', length, status] = mexcdf('DIMINQ', cdfid, dimid)
% status = mexcdf('DIMRENAME', cdfid, 'name')
%
% status = mexcdf('VARDEF', cdfid, 'name', datatype, ndims, [dim])
% [varid, rcode] = mexcdf('VARID', cdfid, 'name')
% ['name', datatype, ndims, [dim], natts, status] = mexcdf('VARINQ', cdfid, varid)
% status = mexcdf('VARPUT1', cdfid, varid, coords, value, autoscale)
% [value, status] = mexcdf('VARGET1', cdfid, varid, coords, autoscale)
% status = mexcdf('VARPUT', cdfid, varid, start, count, value, autoscale)
% [value, status] = mexcdf('VARGET', cdfid, varid, start, count, autoscale)
% status = mexcdf('VARPUTG', cdfid, varid, start, count, stride, [], value, autoscale)
% [value, status] = mexcdf('VARGETG', cdfid, varid, start, count, stride, [], autoscale)
% status = mexcdf('VARRENAME', cdfid, varid, 'name')
%
% status = mexcdf('ATTPUT', cdfid, varid, 'name', datatype, len, value)
% [datatype, len, status] = mexcdf('ATTINQ', cdfid, varid, 'name')
% [value, status] = mexcdf('ATTGET', cdfid, varid, 'name')
% status = mexcdf('ATTCOPY', incdf, invar, 'name', outcdf, outvar)
% ['name', status] = mexcdf('ATTNAME', cdfid, varid, attnum)
% status = mexcdf('ATTRENAME', cdfid, varid, 'name', 'newname')
% status = mexcdf('ATTDEL', cdfid, varid, 'name')
%
% status = mexcdf('RECPUT', cdfid, recnum, [data], autoscale, recdim)
% [[data], status] = mexcdf('RECGET', cdfid, recnum, autoscale, recdim)
% [[recvarids], [recsizes], status] = mexcdf('RECINQ', cdfid, recdim)
%
% len = mexcdf('TYPELEN', datatype)
% old_fillmode = mexcdf('SETFILL', cdfid, fillmode)
%
% old_ncopts = mexcdf('SETOPTS', ncopts)
% ncerr = mexcdf('ERR')
% code = mexcdf('PARAMETER', 'NC_...')
%
% Notes:
% 1. The rcode is always zero.
% 2. The dimid can be number or name.
% 3. The varid can be number or name.
% 4. The attname can be name or number.
% 5. The operation and parameter names are not case-sensitive.
% 6. The cmode defaults to 'NC_NOCLOBBER'.
% 7. The mode defaults to 'NC_NOWRITE'.
% 8. The value -1 determines length automatically.
% 9. The operation names can prepend 'nc'.
% 10. The parameter names can drop 'NC_' prefix.
% 11. Dimensions: Matlab (i, j, ...) <==> [..., j, i] NetCDF.
% 12. Indices and identifiers are zero-based.
% 13. One-dimensional slabs are returned as column-vectors.
% 14. Attributes are returned as row-vectors.
% 15. Scaling can be automated via 'scale_factor' and 'add_offset'.
% Copyright (C) 1992-1997 Dr. Charles R. Denham, ZYDECO.
% All Rights Reserved.
% Version of 16-May-96 at 10:17:47.75.
% Version of 06-Jan-97 at 14:04:00.
% Version of 20-Mar-97 at 14:46:00.
% Version of 15-Jul-1997 07:52:23.
% Updated 07-Dec-2000 14:50:39.
if nargin < 1, help(mfilename), return, end
% Mex-file gateway.
v = version;
if eval(v(1)) > 4
fcn = 'mexcdf53'; % Matlab-5 or 6.
elseif eval(v(1)) == 4
fcn = 'mexcdf4'; % Matlab-4 only.
else
error(' ## Unrecognized Matlab version.')
end
% The "record" routines are emulated.
op = lower(varargin{1});
if any(findstr(op, 'rec'))
fcn = op;
if ~strcmp(fcn(1:2), 'nc')
fcn = ['nc' fcn];
end
varargin{1} = [];
end
% Matlab-5 comma-list syntax.
if nargout > 0
varargout = cell(1, nargout);
[varargout{:}] = feval(fcn, varargin{:});
else
feval(fcn, varargin{:});
end
% Collapse to two-dimensions.
if nargout > 0
switch op
case {'varget', 'vargetg', 'ncvarget', 'ncvargetg'}
theSize = size(varargout{1});
f = find(theSize > 1);
if ~any(f), f = 1; end
if length(theSize) > 1 % Always true in Matlab.
m = theSize(f(1));
n = prod(theSize) ./ m;
if m == 1, m = n; n = 1; end
varargout{1} = reshape(varargout{1}, [m n]);
end
otherwise
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -