/[MITgcm]/MITgcm_contrib/shelfice_remeshing/MANUAL/input/Remeshing.m
ViewVC logotype

Annotation of /MITgcm_contrib/shelfice_remeshing/MANUAL/input/Remeshing.m

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


Revision 1.1 - (hide annotations) (download)
Thu Sep 10 14:56:38 2015 UTC (9 years, 10 months ago) by dgoldberg
Branch: MAIN
*** empty log message ***

1 dgoldberg 1.1 clear all
2     close all
3     clc
4    
5     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6     % Read in and reshape files
7     fid = fopen('pickup.OLD.data','r','b');
8     pickupold = fread(fid,inf,'real*8');
9     fclose(fid);
10    
11     fid = fopen('pload.OLD.jmd95z','r','b');
12     ploadold = fread(fid,inf,'real*8');
13     fclose(fid);
14    
15     fid = fopen('shelftopo.OLDPIG.bin','r','b');
16     stpigold=fread(fid,inf,'real*8');
17     fclose(fid);
18    
19     fid = fopen('shelftopo.OLDROUND.bin','r','b');
20     stroundold=fread(fid,inf,'real*8');
21     fclose(fid);
22    
23     nx=1;
24     ny=200;
25     nz=100;
26    
27     delz=10;
28    
29     dz = delz*ones(1,nz);
30     zgp1 = [0,cumsum(dz)];
31     zc = .5*(zgp1(1:end-1)+zgp1(2:end));
32     zg = zgp1(1:end-1);
33     dz = diff(zgp1);
34    
35     s3=nx*ny*nz;
36     s2=nx*ny;
37    
38     olduvel=reshape(pickupold(1:s3),[nx ny nz]);
39     oldvvel=reshape(pickupold(1+(1*s3):2*s3),[nx ny nz]);
40     oldtheta=reshape(pickupold(1+2*s3:3*s3),[nx ny nz]);
41     oldsalt=reshape(pickupold(1+3*s3:4*s3),[nx ny nz]);
42     oldgunm1=reshape(pickupold(1+4*s3:5*s3),[nx ny nz]);
43     oldgvnm1=reshape(pickupold(1+5*s3:6*s3),[nx ny nz]);
44     oldetan=reshape(pickupold(1+6*s3:(6*s3)+(1*s2)),[nx ny]);
45     olddetahdt=reshape(pickupold(1+6*s3+(1*s2):(6*s3)+(2*s2)),[nx ny]);
46     oldetah=reshape(pickupold(1+6*s3+(2*s2):(6*s3)+(3*s2)),[nx ny]);
47    
48     stroundold=reshape(stroundold,[nx ny]);
49     ploadold=reshape(ploadold,[nx ny]);
50     stpigold=reshape(stpigold,[nx ny]);
51     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52     %Find where eta indicates a change in ice shelf topo above threshold.
53     %Change eta, iceshelf topo and r0surfto reflect change in mesh
54    
55     splitthreshold=5;
56     mergethreshold=-6;
57    
58    
59     [splitx,splity] =find(oldetan>splitthreshold & stroundold<0);
60     [mergex,mergey] =find(oldetan<mergethreshold & stroundold<0);
61    
62     %[splitx,splity] =find(oldetan>splitthreshold);
63     %[mergex,mergey] =find(oldetan>mergethreshold);
64    
65     %Change single, not all cells >threshold
66     %etax=etax(3);
67     %etay=etay(3);
68    
69    
70    
71     for i = 1:length(splitx)
72     splitz(i)=((stroundold(splitx(i),splity(i)))/10*-1)+1;
73     end
74    
75     for i = 1:length(mergex)
76     mergez(i)=((stroundold(mergex(i),mergey(i)))/10*-1)+1;
77     end
78    
79    
80     OSPLITX=splitx;
81     OSPLITY=splity;
82     OSPLITZ=splitz;
83     NSPLITZ=splitz-1;
84    
85     OMERGEX=mergex;
86     OMERGEY=mergey;
87     OMERGEZ=mergez;
88     NMERGEZ=mergez+1;
89    
90     stroundnew=stroundold;
91     stpignew=stpigold;
92     stroundnew(splitx,splity)=stroundold(splitx,splity)+delz;
93     stpignew(splitx,splity)=stpigold(splitx,splity)+delz;
94     stroundnew(mergex,mergey)=stroundold(mergex,mergey)-delz;
95     stpignew(mergex,mergey)=stpigold(mergex,mergey)-delz;
96    
97     newetan=oldetan;
98     newetan(splitx,splity)=oldetan(splitx,splity)-delz;
99     newetan(mergex,mergey)=oldetan(mergex,mergey)+delz;
100    
101     newdetahdt=olddetahdt;
102     %%%%%%%%%%%%%%%%%%%%%%
103     %Etah=etan for now
104     newetah=newetan;
105    
106     ploadnew=ploadold;
107     rhoConst = 1030;
108     talpha = 2e-4;
109     sbeta = 7.4e-4;
110     gravity = 9.81;
111     k=1;
112     dzm = abs([zg(1)-zc(1) .5*diff(zc)]);
113     dzp = abs([.5*diff(zc) zc(end)-zg(end)]);
114     p = abs(zc)*gravity*rhoConst*1e-4;
115     dp = p;
116     kp = 0;
117     eos = 'jmd95z';
118     T_sfc = -1.9;
119     T_bottom = 2;
120     del_T = (T_bottom - T_sfc)/(59*delz);
121    
122     for iz = 1:nz;
123     tref(iz) = T_sfc + del_T*((iz-30)*delz);
124     if iz<=30;
125     tref(iz)=-1.9;
126     end
127     if iz>=90
128     tref(iz) =2;
129     end
130     end
131    
132     S_sfc = 34.2;
133     S_bottom = 34.7;
134     del_S = (S_bottom - S_sfc)/(59*delz);
135    
136     for iz = 1:nz;
137    
138    
139     sref(iz) = S_sfc + del_S*((iz-30)*delz);
140     if iz<=30;
141     sref(iz)=34.2;
142     end
143     if iz>=90
144     sref(iz) =34.7;
145     end
146     end
147    
148     t = tref;
149    
150     s = sref;
151    
152    
153     while rms(dp) > 1e-13
154     phiHydF(k) = 0;
155     p0 = p;
156     kp = kp+1;
157     for k = 1:nz
158     switch eos
159     case 'linear'
160     drho = rhoConst*(1-talpha*(t(k)-tref(k))+sbeta*(s(k)-sref(k)))-rhoConst;
161     case 'jmd95z'
162     drho = densjmd95(s(k),t(k),p(k))-rhoConst;
163     case 'mdjwf'
164     drho = densmdjwf(s(k),t(k),p(k))-rhoConst;
165     otherwise
166     error(sprintf('unknown EOS: %s',eos))
167     end
168     phiHydC(k) = phiHydF(k) + dzm(k)*gravity*drho/rhoConst;
169     phiHydF(k+1) = phiHydC(k) + dzp(k)*gravity*drho/rhoConst;
170     end
171     switch eos
172     case 'mdjwf'
173     p = (gravity*rhoConst*abs(zc) + phiHydC*rhoConst)/gravity/rhoConst;
174     end
175     dp = p-p0;
176     end
177    
178    
179     for ix=1:nx
180     for iy=1:ny
181     k=max(find(abs(zg)<abs(stpignew(ix,iy))));
182     if isempty(k)
183     k=0;
184     end
185     if k>0
186    
187     dr = -zg(k) - stpignew(ix,iy);
188    
189     if (dr>=delz/2)
190     ploadnew(ix,iy) = phiHydF(k) + (delz-dr) * (phiHydC(k)-phiHydF(k))/(delz/2);
191     else
192     ploadnew(ix,iy) = phiHydC(k) + (delz/2-dr) * (phiHydF(k+1)-phiHydC(k))/(delz/2);
193     end
194    
195     end
196     end
197     end
198    
199    
200    
201    
202     newsalt=oldsalt;
203     newtheta=oldtheta;
204     newuvel=olduvel;
205     newvvel=oldvvel;
206     newgunm1=oldgunm1;
207     newgvnm1=oldgvnm1;
208    
209     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
210     % Split cells, new cells take values of the cell they are split from
211    
212     for i=1:length(OSPLITX)
213     newsalt(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=oldsalt(OSPLITX(i),OSPLITY(i),OSPLITZ(i));
214     newtheta(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=oldtheta(OSPLITX(i),OSPLITY(i),OSPLITZ(i));
215    
216     newuvel(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=olduvel(OSPLITX(i),OSPLITY(i),OSPLITZ(i));
217     %newuvel(OLDX(i)+1,OLDY(i),NEWZ(i))=olduvel(OLDX(i)+1,OLDY(i),OLDZ(i));
218     newvvel(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=oldvvel(OSPLITX(i),OSPLITY(i),OSPLITZ(i));
219     newvvel(OSPLITX(i),OSPLITY(i)+1,NSPLITZ(i))=oldvvel(OSPLITX(i),OSPLITY(i)+1,OSPLITZ(i));
220    
221     newgunm1(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=0;
222     %newgunm1(OLDX(i)+1,OLDY(i),NEWZ(i))=0;
223     newgvnm1(OSPLITX(i),OSPLITY(i),NSPLITZ(i))=0;
224     newgvnm1(OSPLITX(i),OSPLITY(i)+1,NSPLITZ(i))=0;
225    
226     end
227    
228     for i=1:length(OMERGEX)
229     newsalt(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=((oldsalt(OMERGEX(i),OMERGEY(i),OMERGEZ(i))*(dz+oldetan(OMERGEX(i),OMERGEY(i))))...
230     +(dz*oldsalt(OMERGEX(i),OMERGEY(i),NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i),OMERGEY(i)));
231     newtheta(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=((oldtheta(OMERGEX(i),OMERGEY(i),OMERGEZ(i))*(dz+oldetan(OMERGEX(i),OMERGEY(i))))...
232     +(dz*oldtheta(OMERGEX(i),OMERGEY(i),NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i),OMERGEY(i)));
233    
234     newuvel(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=((olduvel(OMERGEX(i),OMERGEY(i),OMERGEZ(i))*(dz+oldetan(OMERGEX(i),OMERGEY(i))))...
235     +(dz*olduvel(OMERGEX(i),OMERGEY(i),NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i),OMERGEY(i)));
236     %newuvel(OMERGEX(i)+1,OMERGEY(i),NMERGEZ(i))=((olduvel(OMERGEX(i)+1,OMERGEY(i),OMERGEZ(i))*(dz+oldetan(OMERGEX(i)+1,OMERGEY(i))))...
237     % +(dz*olduvel(OMERGEX(i)+1,OMERGEY(i),NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i)+1,OMERGEY(i)));
238     newvvel(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=((oldvvel(OMERGEX(i),OMERGEY(i),OMERGEZ(i))*(dz+oldetan(OMERGEX(i),OMERGEY(i))))...
239     +(dz*oldvvel(OMERGEX(i),OMERGEY(i),NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i),OMERGEY(i)));
240     newvvel(OMERGEX(i),OMERGEY(i)+1,NMERGEZ(i))=((oldvvel(OMERGEX(i),OMERGEY(i)+1,OMERGEZ(i))*(dz+oldetan(OMERGEX(i),OMERGEY(i))))...
241     +(dz*oldvvel(OMERGEX(i),OMERGEY(i)+1,NMERGEZ(i))))/(2*dz+oldetan(OMERGEX(i),OMERGEY(i)));
242    
243     newgunm1(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=0;
244     %newgunm1(OMERGEX(i)+1,OMERGEY(i),NMERGEZ(i))=0;
245     newgvnm1(OMERGEX(i),OMERGEY(i),NMERGEZ(i))=0;
246     newgvnm1(OMERGEX(i),OMERGEY(i)+1,NMERGEZ(i))=0;
247    
248     end
249    
250    
251    
252     % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
253     % % %Write out pickup file
254     uvel=reshape(newuvel,[1 nx*ny*nz]);
255     vvel=reshape(newvvel,[1 nx*ny*nz]);
256     theta=reshape(newtheta,[1 nx*ny*nz]);
257     salt=reshape(newsalt,[1 nx*ny*nz]);
258     gunm1=reshape(newgunm1,[1 nx*ny*nz]);
259     gvnm1=reshape(newgvnm1,[1 nx*ny*nz]);
260     etan=reshape(newetan,[1 nx*ny]);
261     detahdt=reshape(newdetahdt,[1 nx*ny]);
262     etah=reshape(newetah,[1 nx*ny]);
263    
264     pickupnew=[uvel,vvel,theta,salt,gunm1,gvnm1,etan,detahdt,etah];
265     pickupnew=pickupnew';
266    
267     stroundnew=reshape(stroundnew,[nx*ny 1]);
268     ploadnew=reshape(ploadnew,[nx*ny 1]);
269    
270    
271     fid = fopen('pickup.0000012960.data','w','b'); fwrite(fid,pickupnew,'real*8'); fclose(fid);
272     fid = fopen('pload.pig.jmd95z','w','b'); fwrite(fid,ploadnew,'real*8'); fclose(fid)
273     fid = fopen('shelftopo.round.bin','w','b'); fwrite(fid,stroundnew,'real*8'); fclose(fid)
274    
275    
276    

  ViewVC Help
Powered by ViewVC 1.1.22