Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Source MatLab: http://ecco2.jpl.nasa.gov/data1/matlab/netcdf_toolbox/netcdf/@ncvar/resize.m

No Format

function theResult = resize(self, newSize)

...



% ncvar/resize - Resize variable dimensions.

...


% resize(self, newSize) resizes the dimensions of self,

...


% an "ncvar" object. All variables related to the

...


% changed dimensions are similarly affected. The

...


% newSize must have the same number of dimensions

...


% as the existing variable. The new self is returned.

...



% Copyright (C) 1998 Dr. Charles R. Denham, ZYDECO.

...


% All Rights Reserved.

...


% Disclosure without explicit written consent from the

...


% copyright owner does not constitute publication.

...



% Version of 03-Nov-1998 08:52:22.

...


% Updated 12-Aug-1999 09:42:01.

...



if nargin < 1, help(mfilename), return, end

...


if nargout > 0, theResult = self; end

...



% Check for no-change.

...



if isequal(ncsize(self), newSize)

...


result = self;

...


if nargout > 0

...


theResult = result;

...


else

...


ncans(result)

...


end

...


return

...


end

...



theItemName = name(self);

...



% Check for writeability.

...



f = parent(self);

...


thePermission = permission(f);

...


theSrcName = name(f);

...



if isequal(thePermission, 'nowrite')

...


disp([' ## NetCDF source file must be writeable.'])

...


return

...


end

...



% Check request.

...



d = dim(self);
for i = 1:length(d)
if \~isrecdim(d[i]) & newSize(i) <= 0
disp(\[' ## Dimension "' name(d[i]) '" size requires positive integer.'\])
return
end
end

...



% Create temporary file.

...



g = \[\];

...



i = 0;

...


while isempty(g)

...


i = i + 1;

...


theTmpName = ['tmp_' int2str(i) '.nc'|'tmp_' int2str(i) '.nc'];

...


if exist(theTmpName, 'file') \~= 2

...


g = netcdf(theTmpName, 'noclobber');

...


end

...


end

...



theTmpName = name(g);

...



% Copy affected dimensions first.

...



d = dim(self);
for i = 1:length(d)
if isrecdim(d[i])
g(name(d[i])) = 0;
elseif newSize(i) <= 0
error(\[' ## Dimension "' name(d[i]) '" requires positive integer.'\])
else
g(name(d[i])) = newSize(i) ;
end
end

...



% Copy other dimensions.

...



d = dim(f);

...


for i = 1:length(d)

...


g(name(d[i])) = ncsize(d[i]);

...


end

...



% Copy global attributes.

...



a = att(f);

...


for i = 1:length(a)

...


copy(a[i], g)

...


end

...



% Copy variable definitions and attributes.

...



v = var(f);

...


for i = 1:length(v)

...


copy(v[i], g, 0, 1)

...


end

...



% Copy variable data as minimal rectangular array.

...


% Note that the "()" operator is out-of-context

...


% inside this method, so we have to build our own

...


% calls to "ncvar/subsref" and "ncvar/subsasgn".

...


% It might be easier for us to use "virtual"

...


% variables instead, which could be transferred

...


% with the more intelligent "ncvar/copy" method.

...



v = var(f);

...


w = var(g);

...



for i = 1:length(v)

...


sv = ncsize(v[i]);

...


sw = ncsize(w[i]);

...


if \~isempty(sw)

...


d = dim(w[i]);

...


if isrecdim(d[1])

...


if sw(1) == 0

...


if isequal(name(d[1]), theItemName)

...


sw(1) = newSize;

...


else

...


sw(1) = sv(1);

...


end

...


end

...


end

...


end

...


theMinimalSize = min(sv, sw);

...


if prod(theMinimalSize) > 0

...


if isequal(sv, sw)

...


copy(v[i], g, 1)

...


else

...


theIndices = cell(size(theMinimalSize));

...


for j = 1:length(theIndices)

...


theIndices[j] = 1:theMinimalSize(j);

...


end

...


theStruct.type = '()';

...


theStruct.subs = theIndices;

...


theData = subsref(v[i], theStruct);

...


w[i] = subsasgn(w[i], theStruct, theData);

...


end

...


end

...


end

...



% Close both files.

...



f = close(f);

...


g = close(g);

...

% Delete old file.



{color:#ff0000}% Delete old file.{color}

{color:#ff0000}delete(theSrcName)

...

% Rename new file to old file name.

{color}

{color:#ff0000}% Rename new file to old file name.{color}

{color:#ff0000}fcopy(theTmpName, theSrcName)

...

{color}
{color:#ff0000}delete(theTmpName)

...

% Open the new file.

...

{color}

{color:#ff0000}% Open the new file.{color}

{color:#ff0000}g = netcdf(theSrcName, thePermission);

...

{color}

% Return the resized variable.

...



result = g[theItemName];

...



if nargout > 0

...


theResult = result;

...


else

...


ncans(result)

...


end