/[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.17 by mlosch, Wed Jul 16 09:12:21 2008 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
75          filepathtemp=eachfile{:};          filepathtemp=eachfile{:};
76          indecies = find(filepathtemp=='/');          indecies = find(filepathtemp==filesep);
77          if ~isempty(indecies)          if ~isempty(indecies)
78          filepathtemp = filepathtemp(1:indecies(end));          filepathtemp = filepathtemp(1:indecies(end));
79          else          else
# Line 84  if isempty(iters) Line 98  if isempty(iters)
98          nc=netcdf(char(eachfile),'read');          nc=netcdf(char(eachfile),'read');
99          nciters = nc{'iter'}(:);          nciters = nc{'iter'}(:);
100          if isempty(nciters), nciters = nc{'T'}(:); end          if isempty(nciters), nciters = nc{'T'}(:); end
101          iters = [iters,nciters];          iters = [iters,nciters'];
102          close(nc);          close(nc);
103      end      end
104      iters = unique(iters);      iters = unique(iters');
105  end  end
106    
107  % Cycle through files for data extraction.  % Cycle through files for data extraction.
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        [pstr,netcdf_fname,ext] = fileparts(name(nc));
169        if strcmp(netcdf_fname(end-3:end),'glob')
170          % assume it is a global file produced by gluemnc and change some
171          % attributes
172          S.attributes.global.sNx = S.attributes.global.Nx;
173          S.attributes.global.sNy = S.attributes.global.Ny;
174          S.attributes.global.nPx = 1;
175          S.attributes.global.nSx = 1;
176          S.attributes.global.nPy = 1;
177          S.attributes.global.nSy = 1;
178          S.attributes.global.tile_number = 1;
179          S.attributes.global.nco_openmp_thread_number = 1;
180        end
181            
182          % Read variable data          % Read variable data
183          for ivar=1:size(varlist,2)          for ivar=1:size(varlist,2)
# Line 155  function [S] = rdmnc_local(nc,varlist,it Line 189  function [S] = rdmnc_local(nc,varlist,it
189          end          end
190                    
191          dims = ncnames(dim(nc{cvar}));        % Dimensions          dims = ncnames(dim(nc{cvar}));        % Dimensions
192          adj = 0;          sizVar = size(nc{cvar}); nDims=length(sizVar);
193          if dims{1} == 'T'          if dims{1} == 'T'
194              if isempty(find(fii)), return, end              if isempty(find(fii)), error('Iters not found'); end
195                            it = length(dims);
196              tmpdata = nc{cvar}(fii,:);              tmpdata = nc{cvar}(fii,:);
197              if ismember('Zd000001' ,dims), adj = adj - 1; end  %-      leading unity dimensions get lost; add them back:
198              if ismember('Zmd000001',dims), adj = adj - 1; end              tmpdata=reshape(tmpdata,[length(fii) sizVar(2:end)]);
             it = length(dims) + adj;  
199          else          else
             tmpdata = nc{cvar}(:);  
200              it = 0;              it = 0;
201                tmpdata = nc{cvar}(:);
202    %-      leading unity dimensions get lost; add them back:
203                tmpdata=reshape(tmpdata,sizVar);
204          end          end
205                    
206          tmpdata=squeeze(permute(tmpdata,[9:-1:1]));          if dBug > 1,
207              fprintf(['  var:',cvar,': nDims=%i ('],nDims);fprintf(' %i',size(nc{cvar}));
208              fprintf('):%i,nD=%i,it=%i ;',length(size(tmpdata)),length(dims),it);
209            end
210            if length(dims) > 1,
211              tmpdata=permute(tmpdata,[nDims:-1:1]);
212            end
213            if dBug > 1,
214    %         fprintf('(tmpdata:');fprintf(' %i',size(tmpdata)); fprintf(')');
215            end
216          [ni nj nk nm nn no np]=size(tmpdata);          [ni nj nk nm nn no np]=size(tmpdata);
217                    
218          [i0,j0,fn]=findTileOffset(S);          [i0,j0,fn]=findTileOffset(S);
# Line 179  function [S] = rdmnc_local(nc,varlist,it Line 223  function [S] = rdmnc_local(nc,varlist,it
223          else          else
224              j0=0;              j0=0;
225          end          end
226            if dBug > 1,
227              fprintf(' i0,ni= %i %i; j,nj= %i %i; nk=%i :',i0,ni,j0,nj,nk);
228            end
229                    
230          Sstr = '';          Sstr = '';
231          for istr = 1:7          for istr = 1:max(nDims,length(dims)),
232              if     istr == it,  Sstr = [Sstr,'dii,'];              if     istr == it,  Sstr = [Sstr,'dii,'];
233              elseif istr == 1,   Sstr = [Sstr,'i0+(1:ni),'];              elseif istr == 1,   Sstr = [Sstr,'i0+(1:ni),'];
234              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 240  function [S] = rdmnc_local(nc,varlist,it
240              else, error('Can''t handle this many dimensions!');              else, error('Can''t handle this many dimensions!');
241              end              end
242          end          end
           
243          eval(['S.(cvar)(',Sstr(1:end-1),')=tmpdata;'])          eval(['S.(cvar)(',Sstr(1:end-1),')=tmpdata;'])
244          %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;
245            if dBug > 1, fprintf(' %i',size(S.(cvar))); fprintf('\n'); end
246    
247          S.attributes.(cvar)=read_att(nc{cvar});          S.attributes.(cvar)=read_att(nc{cvar});
248          end          end
249    

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

  ViewVC Help
Powered by ViewVC 1.1.22