/[MITgcm]/MITgcm_contrib/high_res_cube/eddy_flux/calcUVBave.m
ViewVC logotype

Diff of /MITgcm_contrib/high_res_cube/eddy_flux/calcUVBave.m

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

revision 1.3 by edhill, Thu Aug 12 15:50:38 2004 UTC revision 1.4 by edhill, Thu Aug 12 18:12:02 2004 UTC
# Line 43  delR   = [ Line 43  delR   = [
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)
# Line 105  for il = 1:nlay Line 107  for il = 1:nlay
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);      % -
# Line 140  for il = 1:nlay Line 177  for il = 1:nlay
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    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.22