/[MITgcm]/MITgcm/verification/so_box_biogeo/inp_global/mk_box_input.m
ViewVC logotype

Contents of /MITgcm/verification/so_box_biogeo/inp_global/mk_box_input.m

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


Revision 1.1 - (show annotations) (download)
Wed Aug 27 21:36:34 2014 UTC (9 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
add model parameter files to use to run tutorial_global_oce_biogeo
 and from this run, to extract initial conditions and OBCs files
for this Southern-Ocean Box experiment (using script: mk_box_input.m)

1 % Generate input files for MITgcm/verification/so_box_biogeo/
2 % ( Southern-Ocean box with Biochemistry, using OBCs )
3 % by a) extracting bathy and forcing from ../run_glob/ where files have been
4 % linked from verification/tutorial_global_oce_biogeo/input/
5 % b) extracting initial conditions and OBCs from a 2-years run
6 % (done here in ../run_glob/) using model parameters from ../inp_global.
7
8 % $Header: $
9 % $Name: $
10
11 %- kwr(1) = 2 : write Region mask to get matching Stat-Diags in Global Ocean run
12 %- kwr(2) = 2 : write forcing files for S.Ocean box
13 %- kwr(3) = 2 : write initial State for S.Ocean box
14 %- kwr(4) = 2 : write OBCS files for S.Ocean box
15 kwr=[1 2 2 2]; prec='real*4';
16
17 rDir='../run_glob/'; %- output dir of global ocean 2 yrs run
18 iDir='../run_glob/'; %- input dir of global ocean 2 yrs run
19
20 G=load_grid(rDir);
21 nx=G.dims(1); ny=G.dims(2); nr=G.dims(3);
22 xax=G.xAxC; yax=G.yAxC;
23 xaf=G.xAxU; yaf=G.yAxV;
24
25 it0=5184000;
26 itMon=60; %- nb of iter in 1 month
27
28 nbx=42; nby=20;
29 i1=85; i2=i1+nbx; %- box egdes indices
30 j1=4; j2=j1+nby; %- box egdes indices
31 xl=[xaf(i1) xaf(i1) xaf(i2) xaf(i2) xaf(i1)];
32 yl=[yaf(j1) yaf(j2) yaf(j2) yaf(j1) yaf(j1)];
33 ib1=i1; ib2=i2-1; jb1=j1; jb2=j2-1; %- box limit for grid-pts center
34
35 %-- OB location: tracer pts:
36 iobW=ib1; iobE=ib2; jobN=jb2;
37 %-- OB location: velocity, normal component:
38 iuW=iobW+1 ; iuE=iobE ; jvN=jobN ;
39 xob=[xaf(iuW) xaf(iuW) xaf(iuE) xaf(iuE)];
40 yob=[yaf(j1) yaf(jvN) yaf(jvN) yaf(j1) ];
41
42 h=G.depth;
43
44 %- Create a Region mask (corresponding to S.Ocean Box interior)
45 % to get matching Stat-Diags in Global Ocean run
46 if kwr(1) > 0,
47 % regional mask: 3 lat. band (=1,2,3) (y-boundary=-/+ 23) + S.Ocean Box (=0):
48 maskDiag=ones(nx,ny);
49 maskDiag(iobW+1:iobE-1,jb1:jobN-1)=0.;
50 maskDiag(find(G.yC > -23.))=2.;
51 maskDiag(find(G.yC > +23.))=3.;
52 namfb='regMask_SOceanBox.bin';
53 if kwr(1) > 1,
54 vv2=maskDiag;
55 fprintf(' write file: %-25s (%i %i)',namfb,size(vv2));
56 fid=fopen(namfb,'w','b'); fwrite(fid,var,prec); fclose(fid);
57 fprintf('\n');
58 end
59 end %- if kwr(1) > 0
60
61 figure(1);clf;
62 var=-h; var(find(var==0))=NaN; ccB=[-54 1]*100;
63 if kwr(1) > 0,
64 var=maskDiag; var(find(h==0))=NaN; ccB=[-1 4];
65 end
66 imagesc(xax,yax,var');set(gca,'YDir','normal');
67 caxis(ccB);
68 change_colmap(-1);
69 colorbar
70 Lbx=line(xl,yl); set(Lbx,'Color',[0 0 0],'LineWidth',2);
71 Lob=line(xob,yob); set(Lob,'Color',[1 0 0],'LineWidth',2);
72 grid;
73
74 %---------
75 %- extract box part from 2-D & 3-D fields
76 % a) forcing (2-D bin file, sng or 12 Rec):
77 namInpF={'bathy','lev_monthly_salt','lev_monthly_temp', ...
78 'shi_empmr_year','shi_qnet','tren_taux','tren_tauy', ...
79 'tren_speed','fice','sillev1'};
80 if kwr(2) > 0
81 fprintf('==== Processing Forcing Files ====\n');
82
83 for n=1:length(namInpF),
84 namfg=[char(namInpF(n)),'.bin'];
85 namfb=[char(namInpF(n)),'_box.bin'];
86 fprintf(' process file: %-21s',namfg);
87 nRec=12; if n ==1, nRec=1; end
88 vv1=rdda([iDir,namfg],[nx ny nRec],1,prec,'b');
89 vv2=vv1(ib1:ib2,jb1:jb2,:);
90 %size(vv1),size(vv2)
91 if kwr(2) > 1,
92 if nRec == 1,
93 fprintf(' --> %-25s (%i %i)',namfb,size(vv2));
94 else
95 fprintf(' --> %-25s (%i %i %i)',namfb,size(vv2));
96 end
97 fid=fopen(namfb,'w','b'); fwrite(fid,vv2,prec); fclose(fid);
98 end
99 fprintf('\n');
100 end
101 end %- if kwr(2) > 0
102
103 % b) initial state
104 % take snap-shot after 1 yr run:
105 it1=it0+12*itMon;
106 namState={'Eta','T','S','U','V'};
107 if kwr(3) > 0
108 fprintf('==== Processing Initial State ====\n');
109
110 for n=1:length(namState)+5,
111 if n <= length(namState),
112 namfg=[char(namState(n))];
113 namfb=[char(namState(n)),'_ini.bin'];
114 else
115 itr= n-length(namState);
116 namfg=sprintf('%s%2.2i','PTRACER',itr);
117 namfb=sprintf('%s%2.2i%s','Trac',itr,'_ini.bin');
118 end
119 fprintf(' process file: %-21s',namfg);
120 vv1=rdmds([rDir,namfg],it1);
121 if length(size(vv1)) == 2,
122 vv2=vv1(ib1:ib2,jb1:jb2);
123 else
124 vv2=vv1(ib1:ib2,jb1:jb2,:);
125 end
126 if kwr(3) > 1,
127 fprintf(' --> %-25s',namfb);
128 fid=fopen(namfb,'w','b'); fwrite(fid,vv2,prec); fclose(fid);
129 end
130 fprintf('\n');
131 end
132 end %- if kwr(3) > 0
133
134 %---------
135 %- extract OB fields from 3-D output fields
136 % take 1rst yr Dec aver as 1rst Rec ; then continue on to 2nd yr: Jan -> Nov
137 iters=it0+([0:11]+12)*itMon;
138
139 if kwr(4) > 0,
140 fprintf('==== Processing OB Fields ====\n');
141 [vv4,itrs,M]=rdmds([rDir,'dynDiag'],iters);
142 eval(M);
143
144 Nit=length(iters);
145 rhFacW=G.hFacW; rhFacS=G.hFacS;
146 rhFacW(find(rhFacW==0))=-1; rhFacW=1./rhFacW; rhFacW=max(rhFacW,0.);
147 rhFacS(find(rhFacS==0))=-1; rhFacS=1./rhFacS; rhFacS=max(rhFacS,0.);
148 rhFacW=reshape(rhFacW,[nx*ny*nr 1]);
149 rhFacS=reshape(rhFacS,[nx*ny*nr 1]);
150
151 for n=2:length(namState)+5,
152 if n > length(namState),
153 itr= n-length(namState);
154 namVs=sprintf('%s%2.2i','Trac',itr);
155 namV=sprintf('%s%2.2i%s','TRAC',itr,' ');
156 else
157 namVs =[char(namState(n))];
158 if strcmp(namVs,'U') || strcmp(namVs,'V'),
159 namV=[namVs,'VELMASS'];
160 elseif strcmp(namVs,'T'),
161 namV=[namVs,'HETA '];
162 elseif strcmp(namVs,'S'),
163 namV=[namVs,'ALT '];
164 %namV='WVELMASS';
165 else
166 fprintf(' unknow State Var: %s\n',namVs);
167 end
168 end
169 jv=strmatch(namV,fldList);
170 if isempty(jv),
171 fprintf('not found in fldList: "%s" for Var: "%s"',namV,namVs);
172 else
173 fprintf(' process OB for: %-6s from %-8s (jv=%2i)',namVs,char(fldList(jv)),jv);
174 vv1=squeeze(vv4(:,:,:,jv,:));
175 if strcmp(namVs,'U'),
176 vv1=reshape(vv1,[nx*ny*nr Nit]);
177 vv1=vv1.*(rhFacW*ones(1,Nit));
178 vv1=reshape(vv1,[nx ny nr Nit]);
179 %-- extract OB values:
180 vvW=vv1(iuW,jb1:jb2,:,:);
181 vvE=vv1(iuE,jb1:jb2,:,:);
182 vvN=vv1(ib1:ib2,jobN,:,:);
183 elseif strcmp(namVs,'V'),
184 vv1=reshape(vv1,[nx*ny*nr Nit]);
185 vv1=vv1.*(rhFacS*ones(1,Nit));
186 vv1=reshape(vv1,[nx ny nr Nit]);
187 %-- extract OB values:
188 vvW=vv1(iobW,jb1:jb2,:,:);
189 vvE=vv1(iobE,jb1:jb2,:,:);
190 vvN=vv1(ib1:ib2,jvN,:,:);
191 else
192 vv2=vv1(ib1:ib2,jb1:jb2,:);
193 %-- extract Western OB values:
194 vvW=vv1(iobW,jb1:jb2,:,:);
195 %-- extract Eastern OB values:
196 vvE=vv1(iobE,jb1:jb2,:,:);
197 %-- extract Nortern OB values:
198 vvN=vv1(ib1:ib2,jobN,:,:);
199 end
200 %--
201 end
202 if kwr(4) > 1,
203 namfb=[namVs,'_obW.bin'];
204 fprintf(' --> %s',namfb);
205 fid=fopen(namfb,'w','b'); fwrite(fid,vvW,prec); fclose(fid);
206 namfb=[namVs,'_obE.bin'];
207 fprintf(' , %s',namfb);
208 fid=fopen(namfb,'w','b'); fwrite(fid,vvE,prec); fclose(fid);
209 namfb=[namVs,'_obN.bin'];
210 fprintf(' , %s',namfb);
211 fid=fopen(namfb,'w','b'); fwrite(fid,vvN,prec); fclose(fid);
212 end
213 fprintf('\n');
214 end
215 end %- if kwr(4) > 0
216

  ViewVC Help
Powered by ViewVC 1.1.22