| 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; |