/[MITgcm]/MITgcm/verification/natl_box/matlab/readgcm.m
ViewVC logotype

Annotation of /MITgcm/verification/natl_box/matlab/readgcm.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Mon Nov 13 16:02:32 2000 UTC (23 years, 6 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint51k_post, checkpoint47e_post, checkpoint57m_post, checkpoint52l_pre, checkpoint46l_post, checkpoint57g_pre, checkpoint46g_pre, checkpoint47c_post, release1_p13_pre, checkpoint50c_post, checkpoint57s_post, checkpoint58b_post, checkpoint57b_post, checkpoint46f_post, checkpoint57g_post, checkpoint48e_post, checkpoint56b_post, checkpoint50c_pre, checkpoint57y_post, checkpoint44f_post, checkpoint46b_post, checkpoint52j_pre, checkpoint43a-release1mods, checkpoint51o_pre, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint54d_post, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint54e_post, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, release1_p13, checkpoint40pre3, checkpoint62c, checkpoint40pre1, checkpoint51l_post, checkpoint40pre7, checkpoint40pre6, checkpoint48i_post, checkpoint57r_post, checkpoint40pre9, checkpoint40pre8, checkpoint46l_pre, checkpoint57d_post, checkpoint57i_post, checkpoint50d_pre, checkpoint52k_post, chkpt44d_post, checkpoint59, checkpoint58, checkpoint55, checkpoint54, checkpoint57, checkpoint56, checkpoint51, checkpoint50, checkpoint53, checkpoint52, release1_p8, release1_p9, checkpoint50d_post, release1_p1, release1_p2, release1_p3, release1_p4, release1_p5, release1_p6, release1_p7, checkpoint58f_post, checkpoint52f_post, checkpoint58d_post, checkpoint58a_post, checkpoint50b_pre, checkpoint44e_pre, checkpoint57z_post, checkpoint54f_post, checkpoint51f_post, checkpoint62a, release1_b1, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint58y_post, checkpoint48b_post, checkpoint43, checkpoint51d_post, checkpoint48c_pre, checkpoint47d_pre, checkpoint51t_post, checkpoint58t_post, checkpoint38, checkpoint51n_post, release1_chkpt44d_post, checkpoint55i_post, checkpoint58m_post, checkpoint57l_post, checkpoint52i_pre, checkpoint51s_post, checkpoint47a_post, checkpoint57t_post, checkpoint55c_post, checkpoint48d_pre, checkpoint51j_post, checkpoint47i_post, checkpoint52e_pre, checkpoint57v_post, branch-atmos-merge-shapiro, checkpoint57f_post, checkpoint52e_post, checkpoint51n_pre, checkpoint47d_post, checkpoint53d_post, checkpoint46d_pre, checkpoint40pre2, checkpoint64, checkpoint65, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint57a_post, checkpoint48d_post, release1-branch_tutorials, checkpoint57h_pre, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint48f_post, checkpoint45d_post, checkpoint52b_pre, checkpoint54b_post, checkpoint46j_pre, checkpoint58w_post, checkpoint57h_post, checkpoint51l_pre, checkpoint52m_post, checkpoint57y_pre, chkpt44a_post, checkpoint55g_post, checkpoint44h_pre, checkpoint48h_post, checkpoint51q_post, checkpoint40pre4, checkpoint51b_pre, checkpoint46a_post, checkpoint47g_post, checkpoint52b_post, checkpoint52c_post, checkpoint46j_post, checkpoint51h_pre, checkpoint46k_post, checkpoint46b_pre, chkpt44c_pre, checkpoint58o_post, checkpoint48a_post, checkpoint45a_post, checkpoint57c_post, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, checkpoint58p_post, checkpoint58q_post, branch-atmos-merge-freeze, branch-atmos-merge-start, checkpoint52f_pre, checkpoint55d_post, checkpoint44e_post, release1_p12, checkpoint58e_post, release1_p10, release1_p11, release1_p16, release1_p17, release1_p14, release1_p15, checkpoint47j_post, pre38tag1, checkpoint54a_pre, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint53c_post, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint55d_pre, checkpoint57c_pre, checkpoint58r_post, checkpoint55j_post, branch-exfmods-tag, checkpoint44g_post, branchpoint-genmake2, checkpoint54a_post, checkpoint46e_pre, checkpoint55h_post, checkpoint58n_post, checkpoint51r_post, checkpoint48c_post, checkpoint45b_post, checkpoint51i_post, checkpoint57e_post, release1-branch-end, c37_adj, release1_final_v1, checkpoint55b_post, checkpoint51b_post, checkpoint51c_post, checkpoint46c_pre, checkpoint53a_post, checkpoint46, checkpoint65o, checkpoint47b_post, checkpoint44b_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint55f_post, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint46h_pre, checkpoint52d_post, checkpoint53g_post, checkpoint46m_post, checkpoint57p_post, checkpint57u_post, checkpoint46a_pre, checkpoint50g_post, checkpoint45c_post, checkpoint57q_post, checkpoint44h_post, pre38-close, eckpoint57e_pre, checkpoint46g_post, release1_p12_pre, checkpoint58k_post, checkpoint39, checkpoint52a_pre, checkpoint33, checkpoint32, checkpoint37, checkpoint36, checkpoint35, checkpoint34, checkpoint62b, checkpoint58v_post, checkpoint50h_post, checkpoint52i_post, checkpoint50e_pre, checkpoint50i_post, checkpoint51i_pre, checkpoint52h_pre, checkpoint56a_post, checkpoint64y, checkpoint64x, checkpoint58l_post, checkpoint64z, checkpoint53f_post, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint40pre5, checkpoint57h_done, checkpoint52j_post, checkpoint47f_post, checkpoint50e_post, chkpt44a_pre, checkpoint46i_post, checkpoint57j_post, checkpoint57f_pre, checkpoint61f, checkpoint46c_post, checkpoint58g_post, branch-netcdf, checkpoint52l_post, checkpoint58x_post, branch-atmos-merge-zonalfilt, checkpoint61n, checkpoint52n_post, checkpoint53b_pre, checkpoint46e_post, release1_beta1, checkpoint58h_post, checkpoint56c_post, checkpoint58j_post, checkpoint51e_post, checkpoint44b_pre, checkpoint42, checkpoint57a_pre, checkpoint40, checkpoint41, checkpoint55a_post, checkpoint47, checkpoint44, checkpoint45, checkpoint48, checkpoint49, checkpoint57o_post, checkpoint46h_post, checkpoint51o_post, checkpoint61q, checkpoint57k_post, checkpoint51f_pre, chkpt44c_post, checkpoint61z, checkpoint53b_post, checkpoint47h_post, checkpoint52a_post, checkpoint57w_post, checkpoint61e, checkpoint44f_pre, branch-atmos-merge-phase5, branch-atmos-merge-phase4, branch-atmos-merge-phase7, branch-atmos-merge-phase6, branch-atmos-merge-phase1, checkpoint58i_post, branch-atmos-merge-phase3, branch-atmos-merge-phase2, checkpoint51g_post, ecco_c52_e35, checkpoint57x_post, checkpoint46d_post, checkpoint50b_post, checkpoint58c_post, checkpoint58u_post, release1-branch_branchpoint, checkpoint51m_post, checkpoint53d_pre, checkpoint58s_post, checkpoint55e_post, checkpoint61g, checkpoint61d, checkpoint54c_post, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint51a_post, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint51p_post, checkpoint48g_post, checkpoint61x, checkpoint61y, checkpoint51u_post, HEAD
Branch point for: branch-exfmods-curt, release1_final, release1-branch, branch-genmake2, release1, branch-nonh, tg2-branch, release1_50yr, netcdf-sm0, checkpoint51n_branch, branch-atmos-merge, pre38, release1_coupled
Adding verification experiment for KPP.

1 heimbach 1.1 function [fld,tme,nPx,nPy]=readgcm(fnam,t,Nx,Ny,Nz,Ix,Iy,Iz,prec,nPx,nPy)
2    
3     % Function [fld,tme,nPx,nPy]=readgcm(fnam,t,Nx,Ny,Nz,Ix,Iy,Iz,prec,nPx,nPy)
4     % read and output model field from file fnam time step t
5     %
6     % INPUTS
7     % fnam input path and file name
8     % t indices of time steps to read (0 means read all, the default)
9     % Nx*Ny*Nz grid dimension (default 360*224*46)
10     % Ix,Iy,Iz subsample indices (default Ix=1:Nx, Iy=1:Ny, and Iz=1:Nz)
11     % prec numeric precision (default 'real*4')
12     %
13     % INPUT/OUTPUT
14     % nPx, nPy number of processes in x and y direction;
15     % when not specified as INPUTS, nPx and nPy are determined based
16     % on the following file naming convention:
17     % U_06_04.00060_00120_10 is
18     % U for nPx=6, nPy=4, hour 60 to 120 at 10-hour intervals
19     % (defaults to 1 when filename contains no underscores)
20     %
21     % OUTPUTS
22     % fld Nx*Ny*Nz*Nt output array
23     % e.g., to contour level k, use "contourf(fld(:,:,k,1)'), colorbar"
24     % tme model integration times in days
25     %
26     % The following are valid calling forms:
27     % readgcm(fnam,t,Nx,Ny,Nz,Ix,Iy,Iz,prec,nPx,nPy)
28     % readgcm(fnam, ... )
29     % readgcm(fnam, ... ,prec, ... )
30     % where "..." represents 0 or more ordered arguments.
31     %
32     % SEE ALSO
33     % writegcm
34    
35     % "prec" is set to value of second string argument if it exists
36     nprec=9;
37     if exist('t') , if ischar(t)
38     prec=t; nprec=2;
39     if exist('Nx'), nPx=Nx; end
40     if exist('Ny'), nPy=Ny; end
41     end, end
42     if exist('Nx'), if ischar(Nx)
43     prec=Nx; nprec=3;
44     if exist('Ny'), nPx=Ny; end
45     if exist('Nz'), nPy=Nz; end
46     end, end
47     if exist('Ny'), if ischar(Ny)
48     prec=Ny; nprec=4;
49     if exist('Nz'), nPx=Nz; end
50     if exist('Ix'), nPy=Ix; end
51     end, end
52     if exist('Nz'), if ischar(Nz)
53     prec=Nz; nprec=5;
54     if exist('Ix'), nPx=Ix; end
55     if exist('Iy'), nPy=Iy; end
56     end, end
57     if exist('Ix'), if ischar(Ix)
58     prec=Ix; nprec=6;
59     if exist('Iy'), nPx=Iy; end
60     if exist('Iz'), nPy=Iz; end
61     end, end
62     if exist('Iy'), if ischar(Iy)
63     prec=Iy; nprec=7;
64     if exist('Iz'), nPx=Iz; end
65     if exist('prec'), nPy=prec; end
66     end, end
67     if exist('Iz'), if ischar(Iz)
68     prec=Iz; nprec=8;
69     if exist('prec'), nPx=prec; end
70     if exist('nPx'), nPy=nPx; end
71     end, end
72    
73     % set default argument values
74     if nargin < 9 & nprec==9, prec='real*4'; end
75     if nargin < 5 | nprec <= 5
76     if isempty(findstr(fnam,'KPPhbl')) & ...
77     isempty(findstr(fnam,'H')) & ...
78     isempty(findstr(fnam,'SF')) & ...
79     isempty(findstr(fnam,'Pbottom')) & ...
80     isempty(findstr(fnam,'Pbottom')) & ...
81     isempty(findstr(fnam,'BU')) & ...
82     isempty(findstr(fnam,'BV'))
83     Nz=46;
84     else
85     Nz=1;
86     end
87     end
88     if nargin < 4 | nprec <= 4, Ny=224; end
89     if nargin < 3 | nprec <= 3, Nx=360; end
90     if nargin < 8 | nprec <= 8, Iz=1:Nz; end
91     if nargin < 7 | nprec <= 7, Iy=1:Ny; end
92     if nargin < 6 | nprec <= 6, Ix=1:Nx; end
93     if nargin < 2 | nprec <= 2, t=0; end
94     if nargin < 1, error('please specify input file name'); end
95     if nargin < nprec+1
96     % locate beginning filename character in path
97     slash_loc=findstr('/',fnam);
98     if isempty(slash_loc), slash_loc=0; end
99     slash_loc=max(slash_loc);
100     bar_loc=findstr('_',fnam((slash_loc+1):length(fnam)));
101     bar_loc=min(bar_loc);
102     if isempty(bar_loc)
103     nPx=1; nPy=1;
104     elseif length(fnam)<slash_loc+bar_loc+5
105     nPx=1; nPy=1;
106     else
107     nPx=str2num(fnam(slash_loc+bar_loc+(1:2))); % number of processes in X
108     nPy=str2num(fnam(slash_loc+bar_loc+(4:5))); % number of processes in Y
109     if isempty(nPx) | isempty(nPy), nPx=1; nPy=1; end
110     end
111     elseif nargin < nprec+2
112     nPy=nPx; % number of processes in X and Y
113     end
114    
115     % compute number of sub-grids
116     sNx=Nx/nPx; % number of X points in sub-grid
117     sNy=Ny/nPy; % number of Y points in sub-grid
118     if (sNx-floor(sNx))~=0 | (sNy-floor(sNy))~=0
119     error('Nx/nPx and Ny/nPy must be integer')
120     end
121    
122     % compute file record length
123     switch prec
124     case {'float32', 'real*4'}
125     rlength=(sNx*sNy*Nz+1)*4;
126     case {'float64', 'real*8'}
127     rlength=(sNx*sNy*Nz+1)*8;
128     end
129    
130     % compute total number of time steps
131     fid=fopen(fnam,'r','ieee-be');
132     tmp=fseek(fid,0,'eof');
133     tmp=ftell(fid);
134     tmp=tmp/(rlength*nPx*nPy);
135     if t==0 | tmp<max(t)
136     t=1:tmp;
137     end
138    
139     % read model file
140     fld=zeros(length(Ix),length(Iy),length(Iz),length(t));
141     tme=zeros(1,length(t));
142     disp(['Reading ' int2str(length(t)) ' time steps:'])
143    
144     if length(Ix)==Nx & length(Iy)==Ny & length(Iz)==Nz
145    
146     for k=1:length(t)
147     fprintf(1,'\b\b\b%0.0f',k)
148     tmp=fseek(fid,nPx*nPy*(t(k)-1)*rlength,'bof');
149     for j=1:nPy
150     jx=((j-1)*sNy+1):(j*sNy);
151     for i=1:nPx
152     ix=((i-1)*sNx+1):(i*sNx);
153     tm=fread(fid,1,prec);
154     [tmp count]=fread(fid,[sNx,sNy*Nz],prec);
155     tme(k)=tm;
156     fld(ix,jx,:,k)=reshape(tmp,sNx,sNy,Nz);
157     end
158     end
159     end
160    
161     elseif length(Ix)<Nx | length(Iy)<Ny
162    
163     % If only part of the file needs to be read, determine
164     % which tiles contain the desired data.
165     nPx_id=zeros(Nx,Ny);
166     nPy_id=zeros(Nx,Ny);
167     for j=1:nPy
168     jx=((j-1)*sNy+1):(j*sNy);
169     for i=1:nPx
170     ix=((i-1)*sNx+1):(i*sNx);
171     nPx_id(ix,jx)=i;
172     nPy_id(ix,jx)=j;
173     end
174     end
175     nPx_id=nPx_id(Ix,Iy);
176     nPy_id=nPy_id(Ix,Iy);
177     nPxy_id=[nPx_id(:) nPy_id(:)];
178     if length(nPx_id)>1
179     nPxy_id=sortrows(nPxy_id);
180     nPxy_id(find(sum(abs(diff(nPxy_id)'))'==0)+1,:)=[];
181     end
182    
183     fld_tmp=zeros(Nx,Ny,Nz);
184     for k=1:length(t)
185     fprintf(1,'\b\b\b%0.0f',k)
186     for l=1:size(nPxy_id,1)
187     i=nPxy_id(l,1);
188     j=nPxy_id(l,2);
189     rnumber=nPx*nPy*(t(k)-1)+(j-1)*nPx+i-1;
190     tmp=fseek(fid,rnumber*rlength,'bof');
191     ix=((i-1)*sNx+1):(i*sNx);
192     jx=((j-1)*sNy+1):(j*sNy);
193     tm=fread(fid,1,prec);
194     [tmp count]=fread(fid,[sNx,sNy*Nz],prec);
195     tme(k)=tm;
196     fld_tmp(ix,jx,:)=reshape(tmp,sNx,sNy,Nz);
197     end
198     fld(:,:,:,k)=fld_tmp(Ix,Iy,Iz);
199     end
200    
201     elseif length(Iz)<Nz
202    
203     fld_tmp=zeros(Nx,Ny,Nz);
204     for k=1:length(t)
205     fprintf(1,'\b\b\b%0.0f',k)
206     tmp=fseek(fid,nPx*nPy*(t(k)-1)*rlength,'bof');
207     for j=1:nPy
208     jx=((j-1)*sNy+1):(j*sNy);
209     for i=1:nPx
210     ix=((i-1)*sNx+1):(i*sNx);
211     tm=fread(fid,1,prec);
212     [tmp count]=fread(fid,[sNx,sNy*Nz],prec);
213     tme(k)=tm;
214     fld_tmp(ix,jx,:)=reshape(tmp,sNx,sNy,Nz);
215     end
216     end
217     fld(:,:,:,k)=fld_tmp(:,:,Iz);
218     end
219    
220     end
221    
222     fid=fclose(fid);
223     fprintf(1,'\b\b\b',k)
224    

  ViewVC Help
Powered by ViewVC 1.1.22