/[MITgcm]/MITgcm/utils/matlab/rdmnc.m
ViewVC logotype

Diff of /MITgcm/utils/matlab/rdmnc.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.7 by enderton, Fri May 12 16:52:09 2006 UTC revision 1.14 by jmc, Mon Feb 19 22:38:52 2007 UTC
# Line 30  function [S] = rdmnc(varargin) Line 30  function [S] = rdmnc(varargin)
30  %  Author:  Alistair Adcroft  %  Author:  Alistair Adcroft
31  %  Modifications:  Daniel Enderton  %  Modifications:  Daniel Enderton
32    
33    % $Header$
34    % $Name$
35    
36  % Initializations  % Initializations
37    dBug=0;
38  file={};  file={};
39  filepaths={};  filepaths={};
40  files={};  files={};
# Line 51  for iarg=1:nargin; Line 55  for iarg=1:nargin;
55              iters=arg;              iters=arg;
56          else          else
57              error(['The only allowed numeric argument is iterations',...              error(['The only allowed numeric argument is iterations',...
58                     ' to read in as a vector for the last arguement']);                     ' to read in as a vector for the last argument']);
59          end          end
60      end      end
61  end  end
62    if isempty(file)
63        if isempty(varlist),
64           fprintf( 'No file name in argument list\n');
65        else
66           fprintf(['No file in argument list:\n ==> ',char(varlist(1))]);
67           for i=2:size(varlist,2), fprintf([' , ',char(varlist(i))]); end
68           fprintf(' <==\n');
69        end
70        error(' check argument list !!!');
71    end
72    
73  % Create list of filenames  % Create list of filenames
74  for eachfile=file  for eachfile=file
# Line 94  end Line 108  end
108  S.attributes=[];  S.attributes=[];
109  for ieachfile=1:length(files)  for ieachfile=1:length(files)
110      eachfile = [filepaths{ieachfile},files{ieachfile}];      eachfile = [filepaths{ieachfile},files{ieachfile}];
111        if dBug > 0, fprintf([' open: ',eachfile]); end
112      nc=netcdf(char(eachfile),'read');      nc=netcdf(char(eachfile),'read');
113      S=rdmnc_local(nc,varlist,iters,S);      S=rdmnc_local(nc,varlist,iters,S,dBug);
114      close(nc);      close(nc);
115  end  end
116    
# Line 131  function [i0,j0,fn] = findTileOffset(S); Line 146  function [i0,j0,fn] = findTileOffset(S);
146      end      end
147      %[snx,sny,nsx,nsy,npx,npy,ntx,nty,i0,j0,fn];      %[snx,sny,nsx,nsy,npx,npy,ntx,nty,i0,j0,fn];
148    
149  function [S] = rdmnc_local(nc,varlist,iters,S)  function [S] = rdmnc_local(nc,varlist,iters,S,dBug)
150    
151      fiter = nc{'iter'}(:);                               % File iterations present      fiter = nc{'iter'}(:);                               % File iterations present
152      if isempty(fiter), fiter = nc{'T'}(:); end      if isempty(fiter), fiter = nc{'T'}(:); end
153        if isinf(iters); iters = fiter(end); end
154        if isnan(iters); iters = fiter; end
155      [fii,dii] = ismember(fiter,iters);  fii = find(fii); % File iteration index      [fii,dii] = ismember(fiter,iters);  fii = find(fii); % File iteration index
156      dii = dii(find(dii ~= 0));                           % Data interation index      dii = dii(find(dii ~= 0));                           % Data interation index
157        if dBug > 0,
158          fprintf(' ; fii='); fprintf(' %i',fii);
159          fprintf(' ; dii='); fprintf(' %i',dii); fprintf(' \n');
160        end
161            
162      % No variables specified? Default to all      % No variables specified? Default to all
163      if isempty(varlist), varlist=ncnames(var(nc)); end      if isempty(varlist), varlist=ncnames(var(nc)); end
164            
165      % Attributes for structure      % Attributes for structure
166      if iters>0; S.iters_read_from_file=iters; end      if iters>0; S.iters_from_file=iters; end
167      S.attributes.global=read_att(nc);      S.attributes.global=read_att(nc);
168            
169          % Read variable data          % Read variable data
# Line 155  function [S] = rdmnc_local(nc,varlist,it Line 176  function [S] = rdmnc_local(nc,varlist,it
176          end          end
177                    
178          dims = ncnames(dim(nc{cvar}));        % Dimensions          dims = ncnames(dim(nc{cvar}));        % Dimensions
179          adj = 0;          sizVar = size(nc{cvar}); nDims=length(sizVar);
180          if dims{1} == 'T'          if dims{1} == 'T'
181              if isempty(find(fii)), return, end              if isempty(find(fii)), error('Iters not found'); end
182                            it = length(dims);
183              tmpdata = nc{cvar}(fii,:);              tmpdata = nc{cvar}(fii,:);
184              if ismember('Zd000001' ,dims), adj = adj - 1; end  %-      leading unity dimensions get lost; add them back:
185              if ismember('Zmd000001',dims), adj = adj - 1; end              tmpdata=reshape(tmpdata,[length(fii) sizVar(2:end)]);
             it = length(dims) + adj;  
186          else          else
             tmpdata = nc{cvar}(:);  
187              it = 0;              it = 0;
188                tmpdata = nc{cvar}(:);
189    %-      leading unity dimensions get lost; add them back:
190                tmpdata=reshape(tmpdata,sizVar);
191          end          end
192                    
193          tmpdata=squeeze(permute(tmpdata,[9:-1:1]));          if dBug > 1,
194              fprintf(['  var:',cvar,': nDims=%i ('],nDims);fprintf(' %i',size(nc{cvar}));
195              fprintf('):%i,nD=%i,it=%i ;',length(size(tmpdata)),length(dims),it);
196            end
197            if length(dims) > 1,
198              tmpdata=permute(tmpdata,[nDims:-1:1]);
199            end
200            if dBug > 1,
201    %         fprintf('(tmpdata:');fprintf(' %i',size(tmpdata)); fprintf(')');
202            end
203          [ni nj nk nm nn no np]=size(tmpdata);          [ni nj nk nm nn no np]=size(tmpdata);
204                    
205          [i0,j0,fn]=findTileOffset(S);          [i0,j0,fn]=findTileOffset(S);
# Line 179  function [S] = rdmnc_local(nc,varlist,it Line 210  function [S] = rdmnc_local(nc,varlist,it
210          else          else
211              j0=0;              j0=0;
212          end          end
213            if dBug > 1,
214              fprintf(' i0,ni= %i %i; j,nj= %i %i; nk=%i :',i0,ni,j0,nj,nk);
215            end
216                    
217          Sstr = '';          Sstr = '';
218          for istr = 1:7          for istr = 1:max(nDims,length(dims)),
219              if     istr == it,  Sstr = [Sstr,'dii,'];              if     istr == it,  Sstr = [Sstr,'dii,'];
220              elseif istr == 1,   Sstr = [Sstr,'i0+(1:ni),'];              elseif istr == 1,   Sstr = [Sstr,'i0+(1:ni),'];
221              elseif istr == 2,   Sstr = [Sstr,'j0+(1:nj),'];              elseif istr == 2,   Sstr = [Sstr,'j0+(1:nj),'];
# Line 193  function [S] = rdmnc_local(nc,varlist,it Line 227  function [S] = rdmnc_local(nc,varlist,it
227              else, error('Can''t handle this many dimensions!');              else, error('Can''t handle this many dimensions!');
228              end              end
229          end          end
           
230          eval(['S.(cvar)(',Sstr(1:end-1),')=tmpdata;'])          eval(['S.(cvar)(',Sstr(1:end-1),')=tmpdata;'])
231          %S.(cvar)(i0+(1:ni),j0+(1:nj),(1:nk),(1:nm),(1:nn),(1:no),(1:np))=tmpdata;          %S.(cvar)(i0+(1:ni),j0+(1:nj),(1:nk),(1:nm),(1:nn),(1:no),(1:np))=tmpdata;
232            if dBug > 1, fprintf(' %i',size(S.(cvar))); fprintf('\n'); end
233    
234          S.attributes.(cvar)=read_att(nc{cvar});          S.attributes.(cvar)=read_att(nc{cvar});
235          end          end
236    

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.22