1 |
gforget |
1.1 |
function [fld]=read_bin(fileName,varargin); |
2 |
|
|
%usage: fld=read_bin(fileName); reads 3D field (N levels in 3rd dim) |
3 |
|
|
%usage: fld=read_bin(fileName,trec); reads 3D field, at trec (50 levels) |
4 |
|
|
%usage: fld=read_bin(fileName,trec,k); reads 2D field, at level k, at trec (50 levels) |
5 |
|
|
%usage: fld=read_bin(fileName,trec,0); reads 2D field, at trec (1 level) |
6 |
gforget |
1.2 |
%usage: fld=read_bin(fileName,trec,0,prec); prec can be set to 32 (default) or 64 (double precision) |
7 |
gforget |
1.1 |
|
8 |
|
|
global mygrid; |
9 |
|
|
|
10 |
|
|
n1=mygrid.ioSize(1); n2=mygrid.ioSize(2); n3=length(mygrid.RC); nF=mygrid.nFaces; |
11 |
|
|
|
12 |
|
|
if nargin==1; n3=dir(fileName); n3=n3.bytes/recl2D; recl3D=recl2D*n3; end; |
13 |
|
|
if nargin>1; tt=varargin{1}; else; tt=1; end; |
14 |
|
|
if nargin>2; kk=varargin{2}; else; kk=[]; end; |
15 |
gforget |
1.2 |
if nargin>3; prec=varargin{3}; else; prec=32; end; |
16 |
|
|
|
17 |
|
|
myprec=['float' num2str(prec)]; |
18 |
|
|
recl2D=n1*n2*(prec/8); recl3D=n1*n2*n3*(prec/8); |
19 |
gforget |
1.1 |
|
20 |
|
|
fid=fopen(fileName,'r','b'); |
21 |
|
|
if ~isempty(kk); |
22 |
|
|
if kk==0;%meaning the field is only two dimensional |
23 |
|
|
status=fseek(fid,(tt-1)*recl2D,'bof'); |
24 |
|
|
fld=reshape(fread(fid,n1*n2,myprec),[n1 n2]); |
25 |
|
|
else; |
26 |
|
|
status=fseek(fid,(tt-1)*recl3D+(kk-1)*recl2D,'bof'); |
27 |
|
|
fld=reshape(fread(fid,n1*n2,myprec),[n1 n2]); |
28 |
|
|
end; |
29 |
|
|
else; |
30 |
|
|
status=fseek(fid,(tt-1)*recl3D,'bof'); |
31 |
|
|
fld=reshape(fread(fid,n1*n2*n3,myprec),[n1 n2 n3]); |
32 |
|
|
end; |
33 |
|
|
fclose(fid); |
34 |
|
|
|
35 |
|
|
fld=convert2gcmfaces(fld); |
36 |
|
|
|