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

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

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


Revision 1.1 - (show annotations) (download)
Mon Nov 13 16:02:32 2000 UTC (23 years, 5 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 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