/[MITgcm]/MITgcm_contrib/mlosch/interp_llc/addshelfice.m
ViewVC logotype

Contents of /MITgcm_contrib/mlosch/interp_llc/addshelfice.m

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


Revision 1.3 - (show annotations) (download)
Wed May 16 16:09:06 2007 UTC (16 years, 11 months ago) by mlosch
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +30 -25 lines
improve solution for hydrostatic pressure to get more accurate initial
field for potential and thus smaller initial adjustment with ice shelves

1 %clear all
2
3 new = 'input.shelfice';
4 input = 'input';
5 eostype = 'mdjwf';
6
7 nx = 45;
8 ny = nx*18;
9 nz = 23;
10 nt = 12;
11
12 load MASKS
13 hf = msk;
14 load FMT
15 load HN
16 load ZN
17 % $$$ hn = mit_readfield(fullfile(input,'bathy_llc_p90.bin'),[nx ny],fmt);
18 % $$$ hnz = mit_readfield(fullfile(input,'shelfice_bath.bin'),[nx ny],fmt);
19 % $$$ zn = mit_readfield(fullfile(input,'shelfice_topo.bin'),[nx ny],fmt);
20
21 h = hn+hnz;
22 mit_writefield(fullfile(new,'bathy_llc_p90.bin'),mdsiocompact(hn),fmt);
23 mit_writefield(fullfile(new,'bathy_llc_p90.shice'),mdsiocompact(h),fmt);
24 mit_writefield(fullfile(new,'shelfice_topo.bin'),mdsiocompact(zn),fmt);
25
26 % create hydrographic fields
27 levt = mit_readfield(fullfile(input,'lev_t.bin'),[nx ny nz nt],fmt);
28 levs = mit_readfield(fullfile(input,'lev_s.bin'),[nx ny nz nt],fmt);
29 is = find(zn~=0);
30 [ix,iy] = find(zn~=0);
31 [t,s] = shelfice_hydrography(ix,iy,is,levt,levs);
32 mit_writefield(fullfile(new,'lev_t.shice'),mdsiocompact(t),fmt);
33 mit_writefield(fullfile(new,'lev_s.shice'),mdsiocompact(s),fmt);
34
35 % create hydrographic fields
36 levt = mdsiocompact(mit_readfield(fullfile(input,'lev_t.init'),[nx ny nz],fmt),0);
37 levs = mdsiocompact(mit_readfield(fullfile(input,'lev_s.init'),[nx ny nz],fmt),0);
38 is = find(zn~=0);
39 [ix,iy] = find(zn~=0);
40 [t,s] = shelfice_hydrography(ix,iy,is,levt,levs);
41 mit_writefield(fullfile(new,'lev_t.shice.init'),mdsiocompact(t),fmt);
42 mit_writefield(fullfile(new,'lev_s.shice.init'),mdsiocompact(s),fmt);
43
44 % create geopotential anomaly
45 gravity = 9.81;
46 rho0 = 1035;
47 tol0 = 0;
48 si2dbar = 1e-4;
49 disp('compute geopotential anomaly')
50 load VGRID
51 zg = zf;
52 dzm = abs([zg(1)-zc(1) .5*diff(zc)]);
53 dzp = abs([.5*diff(zc) zc(end)-zg(end)]);
54 hFacMin = 0.1;
55 for ks=1:length(ix)
56 t0 = squeeze(mean(t(ix(ks),iy(ks),:,:),4));
57 s0 = squeeze(mean(s(ix(ks),iy(ks),:,:),4));
58 % compute potential anomaly exactly as in code
59 % for that we need the correct density
60 rho = [];
61 p = abs(zc(:))*gravity*rho0*si2dbar;
62 dp = p;
63 tol1 = 1;
64 tol2 = 2;
65 kp = 0;
66 while tol1 > tol0
67 kp = kp+1;
68 p0 = p;
69 if strcmp(eostype,'mdjwf')
70 drho = densmdjwf(s0,t0,p(:,end))-rho0;
71 else
72 error(['unknown eostype: ' eostype]);
73 end
74 phiHydF(1) = 0;
75 for k=1:length(zc(:));
76 phiHydC(k) = phiHydF(k) + dzm(k)*gravity*drho(k)/rho0;
77 phiHydF(k+1) = phiHydC(k) + dzp(k)*gravity*drho(k)/rho0;
78 end
79 p = [p (gravity*rho0*abs(zc(:)) + phiHydC(:)*rho0)/gravity/rho0];
80 dp = p(:,end)-p(:,end-1);
81 tol2 = tol1;
82 tol1 = sqrt(sum(dp.^2));
83 if tol1==tol2; break; end;
84 end
85 % find the appropriate level
86 zloc = zn(is(ks));
87 kl0 = max(find(abs(zg-hFacMin*zg)<=abs(zloc)));
88 hfloc= squeeze(hf(ix(ks),iy(ks),:));
89 kl = min(find(hfloc>0));
90 if isempty(kl);
91 kl = 0;
92 ph(ks) = 0;
93 else
94 ph(ks) = phiHydF(kl);
95 end
96 disp(sprintf('kl0 = %u, kl = %u',kl0,kl));
97 end
98
99 pload = 0*hn;
100 for ks=1:length(ix)
101 pload(ix(ks),iy(ks)) = -ph(ks)*rho0;
102 end
103
104 mit_writefield(fullfile(new,['pload.' eostype]),mdsiocompact(pload),fmt);
105

  ViewVC Help
Powered by ViewVC 1.1.22