| 1 | 
edhill | 
1.1 | 
% | 
| 2 | 
  | 
  | 
%  Load M.I.T. GCM model data output files. | 
| 3 | 
  | 
  | 
% | 
| 4 | 
  | 
  | 
function array = Readmodel( fileName, dims, format ) | 
| 5 | 
  | 
  | 
if nargin  < 2 | 
| 6 | 
  | 
  | 
  fprintf(2,'**ERROR** Wrong number of arguments.\n') | 
| 7 | 
  | 
  | 
  fprintf(2,'Usage: Readmodel(''pathname'', [dim1 dim2 dim3 ...])\n') | 
| 8 | 
  | 
  | 
  return | 
| 9 | 
  | 
  | 
end | 
| 10 | 
  | 
  | 
if nargin == 2  | 
| 11 | 
  | 
  | 
  format = 'float32'; | 
| 12 | 
  | 
  | 
end | 
| 13 | 
  | 
  | 
if size(dims,1) ~= 1 | 
| 14 | 
  | 
  | 
  fprintf(2,'**ERROR** Array dimensions mis-specified.\n') | 
| 15 | 
  | 
  | 
  fprintf(2,'Usage: Readmodel(''pathname'', [dim1 dim2 dim3 ...])\n') | 
| 16 | 
  | 
  | 
  return | 
| 17 | 
  | 
  | 
end | 
| 18 | 
  | 
  | 
fid=fopen(fileName,'r','b'); | 
| 19 | 
  | 
  | 
if fid < 0  | 
| 20 | 
  | 
  | 
  fprintf(2,'**ERROR** Unable to open input file "%s".\n',fileName) | 
| 21 | 
  | 
  | 
  fprintf(2,'Usage: Readmodel(''pathname'', [dim1 dim2 dim3 ...])\n') | 
| 22 | 
  | 
  | 
  return | 
| 23 | 
  | 
  | 
end | 
| 24 | 
  | 
  | 
arraySize=1+size(dims,2)+prod(dims); | 
| 25 | 
  | 
  | 
array=zeros(1,arraySize); | 
| 26 | 
  | 
  | 
array(1)=size(dims,2); | 
| 27 | 
  | 
  | 
for i = 1 : size(dims,2); | 
| 28 | 
  | 
  | 
  array(i+1)=dims(1,i); | 
| 29 | 
  | 
  | 
end | 
| 30 | 
  | 
  | 
[dummy,cnt]=fread(fid,1,'int'); | 
| 31 | 
  | 
  | 
if cnt ~= 1  | 
| 32 | 
  | 
  | 
  fprintf(2,'**ERROR** Unable to read first byte of file "%s".\n',fileName) | 
| 33 | 
  | 
  | 
  fprintf(2,'Usage: Readmodel(''pathname'', [dim1 dim2 dim3 ...])\n') | 
| 34 | 
  | 
  | 
  fclose(fid) | 
| 35 | 
  | 
  | 
  return | 
| 36 | 
  | 
  | 
end | 
| 37 | 
  | 
  | 
[array(1+size(dims,2)+1:size(array,2)),cnt]=fread(fid,prod(dims),format); | 
| 38 | 
  | 
  | 
if cnt ~= prod(dims) | 
| 39 | 
  | 
  | 
  fprintf(2,'**ERROR** Unable to read field data from file "%s".\n',fileName) | 
| 40 | 
  | 
  | 
  fprintf(2,'Usage: Readmodel(''pathname'', [dim1 dim2 dim3 ...])\n') | 
| 41 | 
  | 
  | 
  fclose(fid) | 
| 42 | 
  | 
  | 
  return | 
| 43 | 
  | 
  | 
end | 
| 44 | 
  | 
  | 
return |