43 |
341.50,364.50,387.50,410.50,433.50,456.50 ]; |
341.50,364.50,387.50,410.50,433.50,456.50 ]; |
44 |
R = cumsum(delR) - 0.5*delR; |
R = cumsum(delR) - 0.5*delR; |
45 |
|
|
46 |
|
vnam = [ 'U_'; 'V_'; 'T_'; 'S_'; 'B_'; 'B1'; ... |
47 |
|
'UT'; 'VT'; 'US'; 'VS'; 'UB'; 'VB' ]; |
48 |
|
|
49 |
il = 1; |
il = 1; |
50 |
for il = 1:nlay |
for il = 1:nlay |
51 |
|
|
52 |
a = sprintf('Slice: %g',il); |
% a = sprintf('Slice: %g',il); |
53 |
% disp(a); |
% disp(a); |
54 |
|
|
55 |
% Zero the accumulators |
% Zero the accumulators |
56 |
nm = 0; |
for io = 1:size(vnam,1) |
57 |
mb = zeros(ne,ne,6); |
comm = sprintf('%s_acc = zeros(ne,ne,6);', vnam(io,:)); |
58 |
mbm1 = zeros(ne,ne,6); |
eval(comm) |
59 |
mbu = zeros(ne,ne,6); |
end |
|
mbv = zeros(ne,ne,6); |
|
60 |
|
|
61 |
it = 1; |
it = 1; |
62 |
for it = 1:length(ilist) |
for it = 1:length(ilist) |
107 |
% locPres(i,j) = -rhoConst*rC(k)*gravity*maskC(i,j,k,bi,bj) |
% locPres(i,j) = -rhoConst*rC(k)*gravity*maskC(i,j,k,bi,bj) |
108 |
% rhoConst = 9.997999999999999E+02 /* Ref density ( kg/m^3 ) */ |
% rhoConst = 9.997999999999999E+02 /* Ref density ( kg/m^3 ) */ |
109 |
% gravity = 9.810000000000000E+00 /* Grav accel ( m/s^2 ) */ |
% gravity = 9.810000000000000E+00 /* Grav accel ( m/s^2 ) */ |
110 |
p = 9.998*10^2 * 9.81 * R(il) * 0.0001; |
p = 0.09998 * 9.81 * R(il); |
111 |
bcube(:,:,icf) = eh3densjmd95( squeeze(scube(:,:,icf)), ... |
bcube(:,:,icf) = ... |
112 |
squeeze(tcube(:,:,icf)), p ); |
eh3densjmd95( squeeze(scube(:,:,icf)), ... |
113 |
|
squeeze(tcube(:,:,icf)), p ) * -9.81 / 1000; |
114 |
if il > 1 |
if il > 1 |
115 |
p = 9.998*10^2 * 9.81 * R(il-1) * 0.0001; |
p = 0.09998 * 9.81 * R(il-1); |
116 |
bcubem1(:,:,icf) = eh3densjmd95( scube(:,:,icf), ... |
bcubem1(:,:,icf) = ... |
117 |
tcube(:,:,icf), p ); |
eh3densjmd95( scube(:,:,icf), ... |
118 |
|
tcube(:,:,icf), p ) * -9.81 / 1000; |
119 |
end |
end |
120 |
end |
end |
121 |
tmask = double(tcube ~= 0.0); |
tmask = double(tcube ~= 0.0); |
122 |
|
scube = scube .* tmask; |
123 |
bcube = bcube .* tmask; |
bcube = bcube .* tmask; |
124 |
bcubem1 = bcubem1 .* tmask; |
bcubem1 = bcubem1 .* tmask; |
125 |
|
|
126 |
% Fill the (ne+1)*(ne+1) grid with B,T values |
% Fill the (ne+1)*(ne+1) grid with T,S,B values |
127 |
ni = ne; nip1 = ni + 1; |
ni = ne; nip1 = ni + 1; |
128 |
nj = ne; njp1 = nj + 1; |
nj = ne; njp1 = nj + 1; |
129 |
|
tcubep1 = zeros( [ nip1 njp1 6 ] ); |
130 |
|
scubep1 = zeros( [ nip1 njp1 6 ] ); |
131 |
bcubep1 = zeros( [ nip1 njp1 6 ] ); |
bcubep1 = zeros( [ nip1 njp1 6 ] ); |
132 |
for icf = 1:6 |
for icf = 1:6 |
133 |
|
tcubep1(2:nip1,2:njp1,icf) = tcube(:,:,icf); |
134 |
|
scubep1(2:nip1,2:njp1,icf) = scube(:,:,icf); |
135 |
bcubep1(2:nip1,2:njp1,icf) = bcube(:,:,icf); |
bcubep1(2:nip1,2:njp1,icf) = bcube(:,:,icf); |
136 |
end |
end |
137 |
|
|
138 |
|
% Do the upwind-edge T exchanges |
139 |
|
tcubep1(1,2:njp1,1) = tcube(ni:-1:1,nj,5); % - |
140 |
|
tcubep1(2:nip1,1,1) = tcube(1:ni,nj,6); % - |
141 |
|
tcubep1(1,2:njp1,2) = tcube(ni,1:nj,1); % - |
142 |
|
tcubep1(2:nip1,1,2) = tcube(ni,nj:-1:1,6); % - |
143 |
|
tcubep1(1,2:njp1,3) = tcube(ni:-1:1,nj,1); % - |
144 |
|
tcubep1(2:nip1,1,3) = tcube(1:ni,nj,2); % - |
145 |
|
tcubep1(1,2:njp1,4) = tcube(ni,1:nj,3); % - |
146 |
|
tcubep1(2:nip1,1,4) = tcube(ni,nj:-1:1,2); % - |
147 |
|
tcubep1(1,2:njp1,5) = tcube(ni:-1:1,nj,3); % - |
148 |
|
tcubep1(2:nip1,1,5) = tcube(1:ni,nj,4); % - |
149 |
|
tcubep1(1,2:njp1,6) = tcube(ni,1:nj,5); % - |
150 |
|
tcubep1(2:nip1,1,6) = tcube(ni,nj:-1:1,4); % - |
151 |
|
|
152 |
|
% Do the upwind-edge S exchanges |
153 |
|
scubep1(1,2:njp1,1) = scube(ni:-1:1,nj,5); % - |
154 |
|
scubep1(2:nip1,1,1) = scube(1:ni,nj,6); % - |
155 |
|
scubep1(1,2:njp1,2) = scube(ni,1:nj,1); % - |
156 |
|
scubep1(2:nip1,1,2) = scube(ni,nj:-1:1,6); % - |
157 |
|
scubep1(1,2:njp1,3) = scube(ni:-1:1,nj,1); % - |
158 |
|
scubep1(2:nip1,1,3) = scube(1:ni,nj,2); % - |
159 |
|
scubep1(1,2:njp1,4) = scube(ni,1:nj,3); % - |
160 |
|
scubep1(2:nip1,1,4) = scube(ni,nj:-1:1,2); % - |
161 |
|
scubep1(1,2:njp1,5) = scube(ni:-1:1,nj,3); % - |
162 |
|
scubep1(2:nip1,1,5) = scube(1:ni,nj,4); % - |
163 |
|
scubep1(1,2:njp1,6) = scube(ni,1:nj,5); % - |
164 |
|
scubep1(2:nip1,1,6) = scube(ni,nj:-1:1,4); % - |
165 |
|
|
166 |
% Do the upwind-edge B exchanges |
% Do the upwind-edge B exchanges |
167 |
bcubep1(1,2:njp1,1) = bcube(ni:-1:1,nj,5); % - |
bcubep1(1,2:njp1,1) = bcube(ni:-1:1,nj,5); % - |
168 |
bcubep1(2:nip1,1,1) = bcube(1:ni,nj,6); % - |
bcubep1(2:nip1,1,1) = bcube(1:ni,nj,6); % - |
177 |
bcubep1(1,2:njp1,6) = bcube(ni,1:nj,5); % - |
bcubep1(1,2:njp1,6) = bcube(ni,1:nj,5); % - |
178 |
bcubep1(2:nip1,1,6) = bcube(ni,nj:-1:1,4); % - |
bcubep1(2:nip1,1,6) = bcube(ni,nj:-1:1,4); % - |
179 |
|
|
180 |
|
% Get T values on the U,V grid points |
181 |
|
masku = 1.0 - abs(diff(double(tcubep1(2:nip1,:,:) == 0.0),1,2)); |
182 |
|
maskv = 1.0 - abs(diff(double(tcubep1(:,2:nip1,:) == 0.0),1,1)); |
183 |
|
diffu = 0.5*diff(tcubep1(2:nip1,:,:),1,2); |
184 |
|
diffv = 0.5*diff(tcubep1(:,2:nip1,:),1,1); |
185 |
|
tonu = tcube(:,:,:) + masku.*diffu; |
186 |
|
tonv = tcube(:,:,:) + maskv.*diffv; |
187 |
|
|
188 |
|
% Get S values on the U,V grid points |
189 |
|
diffu = 0.5*diff(scubep1(2:nip1,:,:),1,2); |
190 |
|
diffv = 0.5*diff(scubep1(:,2:nip1,:),1,1); |
191 |
|
sonu = scube(:,:,:) + masku.*diffu; |
192 |
|
sonv = scube(:,:,:) + maskv.*diffv; |
193 |
|
|
194 |
% Get B values on the U grid points |
% Get B values on the U grid points |
|
masku = 1.0 - abs(diff(double(bcubep1(2:nip1,:,:) == 0.0),1,2)); |
|
195 |
diffu = 0.5*diff(bcubep1(2:nip1,:,:),1,2); |
diffu = 0.5*diff(bcubep1(2:nip1,:,:),1,2); |
|
bonu = bcube(:,:,:) + masku.*diffu; |
|
|
|
|
|
% Get B values on the V grid points |
|
|
maskv = 1.0 - abs(diff(double(bcubep1(:,2:nip1,:) == 0.0),1,1)); |
|
196 |
diffv = 0.5*diff(bcubep1(:,2:nip1,:),1,1); |
diffv = 0.5*diff(bcubep1(:,2:nip1,:),1,1); |
197 |
|
bonu = bcube(:,:,:) + masku.*diffu; |
198 |
bonv = bcube(:,:,:) + maskv.*diffv; |
bonv = bcube(:,:,:) + maskv.*diffv; |
199 |
|
|
200 |
if ((newyear ~= oldyear) && (nm > 0)) || (it == length(ilist)) |
if ((newyear ~= oldyear) && (nm > 0)) || (it == length(ilist)) |
201 |
|
|
202 |
% Write if its a new year or the last of all entries |
% Write if its a new year or the last of all entries |
203 |
bout = sprintf('b-ave-%d', oldyear); |
disp([' ==> Writing files for ==> ' sprintf('%d',oldyear)]); |
204 |
mout = sprintf('bm1-ave-%d', oldyear); |
for io = 1:size(vnam,1) |
205 |
uout = sprintf('ub-ave-%d', oldyear); |
comm = sprintf( ... |
206 |
vout = sprintf('vb-ave-%d', oldyear); |
'%s_ido = fopen(''%s_tave_%d'', ''a'', ''ieee-be'');', ... |
207 |
disp([' ==> Writing files "' bout '" "' mout '" "' uout '" "' vout '"']); |
vnam(io,:), vnam(io,:), oldyear ); |
208 |
bido = fopen(bout, 'a', 'ieee-be'); |
eval(comm) |
209 |
mido = fopen(mout, 'a', 'ieee-be'); |
comm = sprintf( '%s_acc = %s_acc ./ nm;',vnam(io,:), ... |
210 |
uido = fopen(uout, 'a', 'ieee-be'); |
vnam(io,:)); |
211 |
vido = fopen(vout, 'a', 'ieee-be'); |
eval(comm) |
212 |
mb = mb / nm; |
comm = sprintf('fwrite(%s_ido, %s_acc, ''real*4'');', ... |
213 |
mbm1 = mbm1 / nm; |
vnam(io,:), vnam(io,:) ); |
214 |
mbu = mbu / nm; |
eval(comm) |
215 |
mbv = mbv / nm; |
comm = sprintf( 'fclose(%s_ido);', vnam(io,:) ); |
216 |
fwrite(bido, mb, 'real*4'); |
eval(comm) |
217 |
fwrite(mido, mbm1, 'real*4'); |
|
218 |
fwrite(uido, mbu, 'real*4'); |
% Re-zero the accumulators |
219 |
fwrite(vido, mbv, 'real*4'); |
comm = sprintf('%s_acc = zeros(ne,ne,6);', vnam(io,:)); |
220 |
fclose(bido); |
eval(comm) |
221 |
fclose(mido); |
end |
222 |
fclose(uido); |
|
|
fclose(vido); |
|
|
|
|
|
% Re-zero the accumulators |
|
|
mb = zeros(ne,ne,6); |
|
|
mbm1 = zeros(ne,ne,6); |
|
|
mbu = zeros(ne,ne,6); |
|
|
mbv = zeros(ne,ne,6); |
|
223 |
nm = 0; |
nm = 0; |
224 |
|
|
225 |
end |
end |
226 |
|
|
227 |
% Accumulate partial sums |
% Accumulate partial sums |
228 |
mb = mb + bcube; |
U__acc = U__acc + ucube; |
229 |
mbm1 = mbm1 + bcubem1; |
V__acc = V__acc + vcube; |
230 |
mbu = mbu + bonu.*ucube; |
T__acc = T__acc + tcube; |
231 |
mbv = mbv + bonv.*vcube; |
S__acc = S__acc + scube; |
232 |
|
B__acc = B__acc + bcube; |
233 |
|
B1_acc = B1_acc + bcubem1; |
234 |
|
|
235 |
|
UT_acc = UT_acc + tonu.*ucube; |
236 |
|
VT_acc = VT_acc + tonv.*vcube; |
237 |
|
US_acc = US_acc + sonu.*ucube; |
238 |
|
VS_acc = VS_acc + sonv.*vcube; |
239 |
|
UB_acc = UB_acc + bonu.*ucube; |
240 |
|
VB_acc = VB_acc + bonv.*vcube; |
241 |
|
|
242 |
nm = nm + 1; |
nm = nm + 1; |
243 |
|
|
244 |
oldyear = newyear; |
oldyear = newyear; |
245 |
|
|
246 |
end |
end |
247 |
end |
end |
248 |
|
|