5 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
6 |
% Parse table file % |
% Parse table file % |
7 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
8 |
|
ShiftData = 0; |
9 |
format = 'NONSEQUENTIAL'; |
format = 'NONSEQUENTIAL'; |
10 |
|
|
11 |
tablfile = [dad,'/',Grads,'.tabl']; |
tablfile = [dad,'/',Grads]; |
12 |
file = textread(tablfile,'%s','delimiter','\n','whitespace',''); |
file = textread(tablfile,'%s','delimiter','\n','whitespace',''); |
13 |
|
|
14 |
for iline = 1:length(file) |
for iline = 1:length(file) |
27 |
inc = str2num(tokens{5}); |
inc = str2num(tokens{5}); |
28 |
xax = [ini:inc:ini+(num-1)*inc]; |
xax = [ini:inc:ini+(num-1)*inc]; |
29 |
if min(xax) >= 0 && max(xax) > 180 |
if min(xax) >= 0 && max(xax) > 180 |
30 |
xax = xax - 180; |
ShiftData = 1; |
31 |
end |
end |
32 |
nx = length(xax); |
nx = length(xax); |
33 |
end |
end |
66 |
end |
end |
67 |
if length(ini) == 13 |
if length(ini) == 13 |
68 |
monchar=ini(9:11); |
monchar=ini(9:11); |
69 |
|
elseif length(ini)==7 |
70 |
|
monchar=ini(1:3); |
71 |
|
else |
72 |
|
error('Cannot parse TDEF correctly'); |
73 |
end |
end |
74 |
if isequal(monchar,'JAN'), inimonth = 1; |
if isequal(monchar,'JAN'), inimonth = 1; |
75 |
elseif isequal(monchar,'FEB'), inimonth = 2; |
elseif isequal(monchar,'FEB'), inimonth = 2; |
103 |
end |
end |
104 |
|
|
105 |
if isequal(tokens{1},'FORMAT') |
if isequal(tokens{1},'FORMAT') |
106 |
if isequal(tokens{2},'SEQUENTIAL') |
if isequal(tokens{2},'SEQUENTIAL') | isequal(tokens{2},'sequential') |
107 |
format = 'SEQUENTIAL'; |
format = 'SEQUENTIAL'; |
108 |
else |
else |
109 |
disp(['Unrecognized grads FORMAT: ',tokens{2}]); |
disp(['Unrecognized grads FORMAT: ',tokens{2}]); |
143 |
fid=fopen(datafile,'r','b'); |
fid=fopen(datafile,'r','b'); |
144 |
data = fread(fid,'real*4'); |
data = fread(fid,'real*4'); |
145 |
fclose(fid); |
fclose(fid); |
146 |
if isequal(format,'SEQUENTIAL') |
if isequal(format,'SEQUENTIAL') | isequal(format,'sequential') |
147 |
index=true([nx*ny*nz*nv*nt+2*nv*nt,1]); |
index=true([nx*ny*nz*nv*nt+2*nv*nt,1]); |
148 |
index([1:nx*ny*nz+2:end])=false; |
index([1:nx*ny*nz+2:end])=false; |
149 |
index([2:nx*ny*nz+2:end])=false; |
index([2:nx*ny*nz+2:end])=false; |
151 |
end |
end |
152 |
data = reshape(data,[nx,ny,nz,nv,nt]); |
data = reshape(data,[nx,ny,nz,nv,nt]); |
153 |
data = squeeze(data(:,:,:,ivar,:)); |
data = squeeze(data(:,:,:,ivar,:)); |
|
data( abs((data-undef)/undef) < tol ) = NaN; |
|
154 |
|
data( abs((data-undef)/undef) < tol ) = NaN; |
155 |
|
if ShiftData |
156 |
|
indexWestHemi = xax>=180; |
157 |
|
indexEastHemi = xax<180; |
158 |
|
data = cat(1,data(indexWestHemi,:,:),data(indexEastHemi,:,:)); |
159 |
|
xax = cat(2,xax(indexWestHemi)-360,xax(indexEastHemi)); |
160 |
|
end |
161 |
|
datatmp(:,:,inimonth:num+inimonth-1) = data; |
162 |
|
data=datatmp; |