/[MITgcm]/MITgcm_contrib/shelfice_remeshing/DIG/input/gendata_vero.m
ViewVC logotype

Contents of /MITgcm_contrib/shelfice_remeshing/DIG/input/gendata_vero.m

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


Revision 1.1 - (show annotations) (download)
Fri Apr 1 10:19:38 2016 UTC (9 years, 3 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Added rough code to dig ice shelf to make continuous ocean

1 %Verion of gendata.m modified by Vero
2 %This is a matlab script that generates the input data
3
4
5 % the configuation approximately the ISOMIP experiment no. 1
6 % require matlab functions for equation of state
7
8
9 % Dimensions of grid
10 nx=3;
11 ny=400;
12 nz=210;
13 delz = 10;
14
15 hfacMin = 0.2;
16
17 dlat = 0.125/32; dy=dlat;
18 dlon = 0.125/4; dx=dlon;
19
20 %eos = 'linear';
21 eos = 'jmd95z';
22 % eos = 'mdjwf';
23
24 acc = 'real*8';
25
26 long = [-105.5:dlon:-105.5];
27 lonc = long+dlon/2;
28 latg = [-75.4457:dlat:-73.8809-dlat];
29 latc = latg+dlat/2;
30 size(latc)
31
32 % Nominal depth of model (meters)
33 H = -1000; %water depth in the ice shelf cavity
34 Hmin = -900; % deepest point of cavern
35 Hmax = -300; % shallowest point of cavern
36 dHdy = (Hmax-Hmin)/(max(latc)-min(latc)); %Slope of ice shelf: if denominator = nx, shelf will cover the whole domain
37
38 %bathy = ones(nx,ny)*H; %For flat bathymetry: bathy = ones(nx,ny)*H;
39 %bathy(1,:) = 0;
40 %bathy(2,:) = 0;
41 %bathy(nx,:) = 0;
42 %bathy(nx-1,:) = 0;
43 %bathy(:,1) = 0;
44 %bathy(:,ny) = 0;
45
46 fid = fopen('bathysteep.box','r','b');
47 bathy = fread(fid,inf,'real*8');
48 fclose(fid);
49 bathy=reshape(bathy, [nx ny]);
50 fid=fopen('bathy.pig.bin','w','b'); fwrite(fid,bathy,acc);fclose(fid);
51
52
53 dz = delz*ones(1,nz);
54 zgp1 = [0,cumsum(dz)];
55 zc = .5*(zgp1(1:end-1)+zgp1(2:end));
56 zg = zgp1(1:end-1);
57 dz = diff(zgp1);
58 sprintf('delZ = %d * %7.6g,',nz,dz)
59
60
61 T_sfc = -1.9;
62 T_bottom = 2;
63 del_T = (T_bottom - T_sfc)/(59*delz);
64
65 for iz = 1:nz;
66
67
68 tref(iz) = T_sfc + del_T*((iz-30)*delz);
69 if iz<=30;
70 tref(iz)=-1.9;
71 end
72 if iz>=90
73 tref(iz) =2;
74 end
75 end
76
77 S_sfc = 34.2;
78 S_bottom = 34.7;
79 del_S = (S_bottom - S_sfc)/(59*delz);
80
81 for iz = 1:nz;
82
83
84 sref(iz) = S_sfc + del_S*((iz-30)*delz);
85 if iz<=30;
86 sref(iz)=34.2;
87 end
88 if iz>=90
89 sref(iz) =34.7;
90 end
91 end
92
93 % Gravity
94 gravity=9.81;
95 rhoConst = 1030;
96 % compute potential field underneath ice shelf
97 talpha = 2e-4;
98 sbeta = 7.4e-4;
99 % tref = -1.9*ones(nz,1);
100 t = tref;
101 % sref = 34.4*ones(nz,1);
102 s = sref;
103 gravity = 9.81;
104 k=1;
105 dzm = abs([zg(1)-zc(1) .5*diff(zc)]);
106 dzp = abs([.5*diff(zc) zc(end)-zg(end)]);
107 p = abs(zc)*gravity*rhoConst*1e-4;
108 dp = p;
109 kp = 0;
110
111
112
113 while rms(dp) > 1e-13
114 phiHydF(k) = 0;
115 p0 = p;
116 kp = kp+1;
117 for k = 1:nz
118 switch eos
119 case 'linear'
120 drho = rhoConst*(1-talpha*(t(k)-tref(k))+sbeta*(s(k)-sref(k)))-rhoConst;
121 case 'jmd95z'
122 drho = densjmd95(s(k),t(k),p(k))-rhoConst;
123 case 'mdjwf'
124 drho = densmdjwf(s(k),t(k),p(k))-rhoConst;
125 otherwise
126 error(sprintf('unknown EOS: %s',eos))
127 end
128 phiHydC(k) = phiHydF(k) + dzm(k)*gravity*drho/rhoConst;
129 phiHydF(k+1) = phiHydC(k) + dzp(k)*gravity*drho/rhoConst;
130 end
131 switch eos
132 case 'mdjwf'
133 p = (gravity*rhoConst*abs(zc) + phiHydC*rhoConst)/gravity/rhoConst;
134 end
135 dp = p-p0;
136 end
137
138
139 %Modify icetopo (shape of ice shelf cavity)
140
141 %icetopo = ones(ny,1)*min(Hmin + 2*dHdy*(lonc(nx)-long),Hmax);
142 B=min(Hmin + 2*dHdy*(latc(ny)-latg),Hmax);
143 B=fliplr(B);
144
145 icetopo = ones(nx,1)*B;
146 %icetopo = icetopo';
147 icetopo(:,101:end)=0;
148
149 % use streamice generated thickness
150 fid = fopen('hinitsteep3.box','r','b'); hinit=fread(fid,[3 400],'real*8'); fclose(fid);
151 %hinit(:,1:5)=550;
152 % load hinit
153 %hinit(:,1)=1740;
154 icetopo = -917/1028*hinit;
155
156 for i =1:3
157 for j=1:400
158 if icetopo(i,j)<bathy(i,j)
159 icetopo(i,j)=bathy(i,j)+3;
160
161 end
162 end
163 end
164
165 for i =1:3
166 for j=1:400
167 if icetopo(i,j)-bathy(i,j)<3;
168 icetopo(i,j)=bathy(i,j)+3;
169
170 end
171 end
172 end
173 % adjust topo so that no hfac is smaller than hfacMin
174
175 % for ix=1:nx
176 % for iy=1:ny
177 % k=max(find(abs(zg)<abs(icetopo(ix,iy))));
178 % %
179 % if(~isempty(k))
180 % %
181 % %
182 % hfacTemp = (icetopo(ix,iy) - (-zg(k+1)))/delz;
183 % %
184 % if (hfacTemp < hfacMin)
185 % if (hfacTemp < hfacMin/2)
186 % hfacTemp = 0;
187 % else
188 % hfacTemp = hfacMin;
189 % end
190 % end
191 %
192 % else
193 %
194 % hfacTemp = 0;
195 %
196 % end
197 %
198 % icetopo(ix,iy) = icetopo(ix,iy) + hfacTemp;
199 %
200 % end
201 % end
202 for i =1:3
203 for j=1:400
204 if icetopo(i,j)<bathy(i,j)
205 % icetopo(i,j)=bathy(i,j)+6;
206
207 end
208 end
209 end
210
211 for i =1:3
212 for j=1:400
213 if icetopo(i,j)-bathy(i,j)<10
214 % icetopo(i,j)=bathy(i,j)+delz;
215
216 end
217 end
218 end
219 % phi anomaly (relative to hydrostatic with rho_const) at icetopo
220
221 phi0surf = zeros(nx,ny);
222
223 for ix=1:nx
224 for iy=1:ny
225 k=max(find(abs(zg)<abs(icetopo(ix,iy))));
226 if isempty(k)
227 k=0;
228 end
229 if k>0
230
231 dr = -zg(k) - icetopo(ix,iy);
232
233 if (dr>=delz/2)
234 phi0surf(ix,iy) = phiHydF(k) + (delz-dr) * (phiHydC(k)-phiHydF(k))/(delz/2);
235 else
236 phi0surf(ix,iy) = phiHydC(k) + (delz/2-dr) * (phiHydF(k+1)-phiHydC(k))/(delz/2);
237 end
238
239 end
240 end
241 end
242
243 mass = phi0surf / gravity - rhoConst * icetopo;
244
245 %use streamicegenerated thickness
246
247 %mass = hinit * 917;
248 %icetopo(:,1)=-1000;
249 fid = fopen('shelftopo.pig.bin','w','b'); fwrite(fid,icetopo,'real*8'); fclose(fid);
250 fid = fopen('shelficemassinit.bin','w','b'); fwrite(fid,mass,'real*8'); fclose(fid);
251 fid = fopen('pload.pig.jmd95z','w','b'); fwrite(fid,phi0surf,'real*8'); fclose(fid);
252
253 etainit = zeros(size(phi0surf));
254
255 % new topography: icetopo rounded to the nearest k * deltaZ
256 % eta_init set to make difference
257
258 icetopo2 = icetopo;
259
260 for ix=1:nx
261 for iy=1:ny
262 k=max(find(abs(zg)<abs(icetopo2(ix,iy))));
263 if isempty(k)
264 k=0;
265 else
266
267 dr = 1-(-zg(k) - icetopo2(ix,iy))/delz;
268 if (dr > .25)
269 % bring Ro_surf *up* to closest grid face & make etainit negative
270 % to compensate
271 icetopo2(ix,iy) = -zg(k);
272 etainit(ix,iy) = (dr-1)*delz;
273 else
274 % bring Ro_surf *down* to closest grid face & make etainit pos
275 % to compensate
276 icetopo2(ix,iy) = -zg(k+1);
277 etainit(ix,iy) = (dr)*delz;
278 end
279
280 end
281 end
282 end
283
284 etainit(:,1)=0;
285 icetopo2(:,1)=-2100;
286 fid = fopen('shelftopo.round.bin','w','b'); fwrite(fid,icetopo2,'real*8'); fclose(fid);
287 fid = fopen('etainit.round.bin','w','b'); fwrite(fid,etainit,'real*8'); fclose(fid);

  ViewVC Help
Powered by ViewVC 1.1.22