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={}; |
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 |
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 |
|
|
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 |
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); |
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),']; |
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 |
|
|