| 1 |
edhill |
1.1 |
%======================================================= |
| 2 |
|
|
% |
| 3 |
|
|
% $Header: $ |
| 4 |
|
|
% |
| 5 |
|
|
% Ed Hill |
| 6 |
|
|
% |
| 7 |
|
|
|
| 8 |
|
|
% Check the (u'b'),(v'b') values using the linear EoS: |
| 9 |
|
|
% |
| 10 |
|
|
% v'b' =approx= g * Alpha * v't' - g * Beta * v's' |
| 11 |
|
|
% |
| 12 |
|
|
% where: |
| 13 |
|
|
% g = 9.81 |
| 14 |
|
|
% Alpha = 2.10^{-4} |
| 15 |
|
|
% Beta = 7.10^{-4} |
| 16 |
|
|
|
| 17 |
|
|
clear all ; close all |
| 18 |
|
|
|
| 19 |
|
|
fnam = [ 'U_'; 'V_'; 'S_'; 'T_'; 'B_'; 'US'; 'UT'; 'UB'; 'VS'; 'VT'; 'VB' ]; |
| 20 |
|
|
vnam = lower(fnam); |
| 21 |
|
|
|
| 22 |
|
|
for i = 1:size(fnam,1) |
| 23 |
|
|
c = sprintf(['%sfid = ' ... |
| 24 |
|
|
'fopen(''%s_tave_1996'',''r'',''ieee-be'');'], ... |
| 25 |
|
|
vnam(i,:),fnam(i,:) ); |
| 26 |
|
|
disp(c); |
| 27 |
|
|
eval(c); |
| 28 |
|
|
end |
| 29 |
|
|
|
| 30 |
|
|
delR = [ |
| 31 |
|
|
10.00, 10.00, 10.00, 10.00, 10.00, 10.00, 10.00, 10.01, ... |
| 32 |
|
|
10.03, 10.11, 10.32, 10.80, 11.76, 13.42, 16.04 , 19.82, 24.85, ... |
| 33 |
|
|
31.10, 38.42, 46.50, 55.00, 63.50, 71.58, 78.90, 85.15, 90.18, ... |
| 34 |
|
|
93.96, 96.58, 98.25, 99.25,100.01,101.33,104.56,111.33,122.83, ... |
| 35 |
|
|
139.09,158.94,180.83,203.55,226.50,249.50,272.50,295.50,318.50, ... |
| 36 |
|
|
341.50,364.50,387.50,410.50,433.50,456.50 ]; |
| 37 |
|
|
R = cumsum(delR) - 0.5*delR; |
| 38 |
|
|
|
| 39 |
|
|
nztot = 50; |
| 40 |
|
|
ne = 510; |
| 41 |
|
|
nps = 6 * ne * ne; |
| 42 |
|
|
iz = 1; |
| 43 |
|
|
for iz = 1:nztot |
| 44 |
|
|
|
| 45 |
|
|
offset = (iz - 1)*nps*4; |
| 46 |
|
|
|
| 47 |
|
|
for i = 1:size(fnam,1) |
| 48 |
|
|
c = sprintf('fseek(%sfid, offset, ''bof'');',vnam(i,:)); |
| 49 |
|
|
disp(c); |
| 50 |
|
|
eval(c); |
| 51 |
|
|
c = sprintf(['%s = reshape(fread(%sfid, nps,' ... |
| 52 |
|
|
'''real*4''),ne,ne,6);'],vnam(i,:),vnam(i,:)); |
| 53 |
|
|
disp(c); |
| 54 |
|
|
eval(c); |
| 55 |
|
|
end |
| 56 |
|
|
|
| 57 |
|
|
% Fill the (ne+1)*(ne+1) grid with T,S,B values |
| 58 |
|
|
ni = ne; nip1 = ni + 1; |
| 59 |
|
|
nj = ne; njp1 = nj + 1; |
| 60 |
|
|
tcubep1 = zeros( [ nip1 njp1 6 ] ); |
| 61 |
|
|
scubep1 = zeros( [ nip1 njp1 6 ] ); |
| 62 |
|
|
bcubep1 = zeros( [ nip1 njp1 6 ] ); |
| 63 |
|
|
for icf = 1:6 |
| 64 |
|
|
tcubep1(2:nip1,2:njp1,icf) = t_(:,:,icf); |
| 65 |
|
|
scubep1(2:nip1,2:njp1,icf) = s_(:,:,icf); |
| 66 |
|
|
bcubep1(2:nip1,2:njp1,icf) = b_(:,:,icf); |
| 67 |
|
|
end |
| 68 |
|
|
|
| 69 |
|
|
% Do the upwind-edge T exchanges |
| 70 |
|
|
tcubep1(1,2:njp1,1) = t_(ni:-1:1,nj,5); % - |
| 71 |
|
|
tcubep1(2:nip1,1,1) = t_(1:ni,nj,6); % - |
| 72 |
|
|
tcubep1(1,2:njp1,2) = t_(ni,1:nj,1); % - |
| 73 |
|
|
tcubep1(2:nip1,1,2) = t_(ni,nj:-1:1,6); % - |
| 74 |
|
|
tcubep1(1,2:njp1,3) = t_(ni:-1:1,nj,1); % - |
| 75 |
|
|
tcubep1(2:nip1,1,3) = t_(1:ni,nj,2); % - |
| 76 |
|
|
tcubep1(1,2:njp1,4) = t_(ni,1:nj,3); % - |
| 77 |
|
|
tcubep1(2:nip1,1,4) = t_(ni,nj:-1:1,2); % - |
| 78 |
|
|
tcubep1(1,2:njp1,5) = t_(ni:-1:1,nj,3); % - |
| 79 |
|
|
tcubep1(2:nip1,1,5) = t_(1:ni,nj,4); % - |
| 80 |
|
|
tcubep1(1,2:njp1,6) = t_(ni,1:nj,5); % - |
| 81 |
|
|
tcubep1(2:nip1,1,6) = t_(ni,nj:-1:1,4); % - |
| 82 |
|
|
|
| 83 |
|
|
% Do the upwind-edge S exchanges |
| 84 |
|
|
scubep1(1,2:njp1,1) = s_(ni:-1:1,nj,5); % - |
| 85 |
|
|
scubep1(2:nip1,1,1) = s_(1:ni,nj,6); % - |
| 86 |
|
|
scubep1(1,2:njp1,2) = s_(ni,1:nj,1); % - |
| 87 |
|
|
scubep1(2:nip1,1,2) = s_(ni,nj:-1:1,6); % - |
| 88 |
|
|
scubep1(1,2:njp1,3) = s_(ni:-1:1,nj,1); % - |
| 89 |
|
|
scubep1(2:nip1,1,3) = s_(1:ni,nj,2); % - |
| 90 |
|
|
scubep1(1,2:njp1,4) = s_(ni,1:nj,3); % - |
| 91 |
|
|
scubep1(2:nip1,1,4) = s_(ni,nj:-1:1,2); % - |
| 92 |
|
|
scubep1(1,2:njp1,5) = s_(ni:-1:1,nj,3); % - |
| 93 |
|
|
scubep1(2:nip1,1,5) = s_(1:ni,nj,4); % - |
| 94 |
|
|
scubep1(1,2:njp1,6) = s_(ni,1:nj,5); % - |
| 95 |
|
|
scubep1(2:nip1,1,6) = s_(ni,nj:-1:1,4); % - |
| 96 |
|
|
|
| 97 |
|
|
% Do the upwind-edge B exchanges |
| 98 |
|
|
bcubep1(1,2:njp1,1) = b_(ni:-1:1,nj,5); % - |
| 99 |
|
|
bcubep1(2:nip1,1,1) = b_(1:ni,nj,6); % - |
| 100 |
|
|
bcubep1(1,2:njp1,2) = b_(ni,1:nj,1); % - |
| 101 |
|
|
bcubep1(2:nip1,1,2) = b_(ni,nj:-1:1,6); % - |
| 102 |
|
|
bcubep1(1,2:njp1,3) = b_(ni:-1:1,nj,1); % - |
| 103 |
|
|
bcubep1(2:nip1,1,3) = b_(1:ni,nj,2); % - |
| 104 |
|
|
bcubep1(1,2:njp1,4) = b_(ni,1:nj,3); % - |
| 105 |
|
|
bcubep1(2:nip1,1,4) = b_(ni,nj:-1:1,2); % - |
| 106 |
|
|
bcubep1(1,2:njp1,5) = b_(ni:-1:1,nj,3); % - |
| 107 |
|
|
bcubep1(2:nip1,1,5) = b_(1:ni,nj,4); % - |
| 108 |
|
|
bcubep1(1,2:njp1,6) = b_(ni,1:nj,5); % - |
| 109 |
|
|
bcubep1(2:nip1,1,6) = b_(ni,nj:-1:1,4); % - |
| 110 |
|
|
|
| 111 |
|
|
% Get T values on the U,V grid points |
| 112 |
|
|
masku = 1.0 - abs(diff(double(tcubep1(2:nip1,:,:) == 0.0),1,2)); |
| 113 |
|
|
maskv = 1.0 - abs(diff(double(tcubep1(:,2:nip1,:) == 0.0),1,1)); |
| 114 |
|
|
diffu = 0.5*diff(tcubep1(2:nip1,:,:),1,2); |
| 115 |
|
|
diffv = 0.5*diff(tcubep1(:,2:nip1,:),1,1); |
| 116 |
|
|
tonu = t_(:,:,:) + masku.*diffu; |
| 117 |
|
|
tonv = t_(:,:,:) + maskv.*diffv; |
| 118 |
|
|
|
| 119 |
|
|
% Get S values on the U,V grid points |
| 120 |
|
|
diffu = 0.5*diff(scubep1(2:nip1,:,:),1,2); |
| 121 |
|
|
diffv = 0.5*diff(scubep1(:,2:nip1,:),1,1); |
| 122 |
|
|
sonu = s_(:,:,:) + masku.*diffu; |
| 123 |
|
|
sonv = s_(:,:,:) + maskv.*diffv; |
| 124 |
|
|
|
| 125 |
|
|
% Get B values on the U grid points |
| 126 |
|
|
diffu = 0.5*diff(bcubep1(2:nip1,:,:),1,2); |
| 127 |
|
|
diffv = 0.5*diff(bcubep1(:,2:nip1,:),1,1); |
| 128 |
|
|
bonu = b_(:,:,:) + masku.*diffu; |
| 129 |
|
|
bonv = b_(:,:,:) + maskv.*diffv; |
| 130 |
|
|
|
| 131 |
|
|
% Calculate the primes |
| 132 |
|
|
uptp = ut - u_.*tonu; |
| 133 |
|
|
vptp = vt - v_.*tonv; |
| 134 |
|
|
upsp = us - u_.*sonu; |
| 135 |
|
|
vpsp = vs - v_.*sonv; |
| 136 |
|
|
upbp = ub - u_.*bonu; |
| 137 |
|
|
vpbp = vb - v_.*bonv; |
| 138 |
|
|
|
| 139 |
|
|
% Calculate the linear-EoS approximation |
| 140 |
|
|
Alpha = 2.0*10^-4; |
| 141 |
|
|
Beta = 7.0*10^-4; |
| 142 |
|
|
lin_upbp = 9.81.*( Alpha.*uptp - Beta.*upsp ); |
| 143 |
|
|
lin_vpbp = 9.81.*( Alpha.*vptp - Beta.*vpsp ); |
| 144 |
|
|
|
| 145 |
|
|
lns_upbp = 9.81.*( Alpha.*uptp ); |
| 146 |
|
|
ljs_upbp = 9.81.*( -Beta.*upsp ); |
| 147 |
|
|
|
| 148 |
|
|
% Quick plots |
| 149 |
|
|
figure(1), surf( vptp(:,:,6)), view(2), shading interp, colorbar, ... |
| 150 |
|
|
title('v''T''') |
| 151 |
|
|
|
| 152 |
|
|
figure(1), surf( upbp(:,:,1)), view(2), shading interp, colorbar, ... |
| 153 |
|
|
title('u''B'' from JMD95 EoS') |
| 154 |
|
|
figure(2), surf(lin_upbp(:,:,1)), view(2), shading interp, colorbar, ... |
| 155 |
|
|
title('u''B'' from Linear EoS') |
| 156 |
|
|
figure(3), surf(lns_upbp(:,:,1)), view(2), shading interp, colorbar, ... |
| 157 |
|
|
title('u''B'' by forgetting salt') |
| 158 |
|
|
figure(4), surf(ljs_upbp(:,:,1)), view(2), shading interp, colorbar, ... |
| 159 |
|
|
title('u''B'' with just salt') |
| 160 |
|
|
|
| 161 |
|
|
|
| 162 |
|
|
figure(3), surf( uptp(:,:,1)), view(2), shading interp, colorbar, ... |
| 163 |
|
|
title('u''T''') |
| 164 |
|
|
figure(4), surf( upsp(:,:,1)), view(2), shading interp, colorbar, ... |
| 165 |
|
|
title('u''S''') |
| 166 |
|
|
|
| 167 |
|
|
figure(3), surf( s_(:,:,1)), view(2), shading interp, colorbar, ... |
| 168 |
|
|
title('S') |
| 169 |
|
|
figure(4), surf( t_(:,:,1)), view(2), shading interp, colorbar, ... |
| 170 |
|
|
title('T') |
| 171 |
|
|
|
| 172 |
|
|
figure(3), surf( sonu(:,:,1)), view(2), shading interp, colorbar, ... |
| 173 |
|
|
title('S (on U points)') |
| 174 |
|
|
figure(4), surf( tonu(:,:,1)), view(2), shading interp, colorbar, ... |
| 175 |
|
|
title('T (on U points)') |
| 176 |
|
|
|
| 177 |
|
|
figure(3), surf( ut(:,:,1)), view(2), shading interp, colorbar, ... |
| 178 |
|
|
title('UT') |
| 179 |
|
|
figure(4), surf( us(:,:,1)), view(2), shading interp, colorbar, ... |
| 180 |
|
|
title('US') |
| 181 |
|
|
|
| 182 |
|
|
% Check bar(B) with bar(T),bar(S) |
| 183 |
|
|
p = 0.09998 * 9.81 * R(iz); |
| 184 |
|
|
for icf = 1:6 |
| 185 |
|
|
bcheck(:,:,icf) = ... |
| 186 |
|
|
eh3densjmd95( squeeze(s_(:,:,icf)), ... |
| 187 |
|
|
squeeze(t_(:,:,icf)), p ) * -9.81 / 1000; |
| 188 |
|
|
end |
| 189 |
|
|
figure(3), surf( b_(:,:,1)), view(2), shading interp, ... |
| 190 |
|
|
caxis([-10.1 -9.8]), colorbar, title('bar(B) from model') |
| 191 |
|
|
figure(4), surf( bcheck(:,:,1)), view(2), shading interp, ... |
| 192 |
|
|
caxis([-10.1 -9.8]), colorbar, title('bar(B) from bar(T),bar(S)') |
| 193 |
|
|
|
| 194 |
|
|
|
| 195 |
|
|
|
| 196 |
|
|
end |