1 |
gforget |
1.1 |
function [FLD]=calc_transports(fldU,fldV,SECTIONS_MASKS); |
2 |
gforget |
1.2 |
%object: compute transports through pre-defined sections |
3 |
|
|
%inputs: fldU and fldV are the fields of grid point transport |
4 |
|
|
% SECTIONS_MASKS is the set of sections along |
5 |
|
|
% which transports will integrated (SECTIONS_MASKS should |
6 |
|
|
% have been produced by line_greatC_TUV_mask.m) |
7 |
|
|
%output: FLD is the array of transport profiles |
8 |
gforget |
1.1 |
|
9 |
|
|
global mygrid; |
10 |
|
|
|
11 |
|
|
%initialize output: |
12 |
|
|
n3=max(size(fldU.f1,3),1); n4=max(size(fldV.f1,4),1); |
13 |
|
|
FLD=NaN*squeeze(zeros(length(SECTIONS_MASKS),n3,n4)); |
14 |
|
|
|
15 |
|
|
%prepare fldU/fldV: |
16 |
|
|
fldU(isnan(fldU))=0; fldV(isnan(fldV))=0; |
17 |
|
|
|
18 |
|
|
dxg=mk3D(mygrid.DXG,fldU); dyg=mk3D(mygrid.DYG,fldU); drf=mk3D(mygrid.DRF,fldU); |
19 |
|
|
for k4=1:n4; |
20 |
gforget |
1.3 |
fldU(:,:,:,k4)=fldU(:,:,:,k4).*dyg.*drf*1e-6; |
21 |
|
|
fldV(:,:,:,k4)=fldV(:,:,:,k4).*dxg.*drf*1e-6; |
22 |
gforget |
1.1 |
end; |
23 |
|
|
|
24 |
|
|
%use array format to speed up computation below: |
25 |
|
|
fldU=convert2array(fldU); fldV=convert2array(fldV); |
26 |
|
|
|
27 |
|
|
for iy=1:length(SECTIONS_MASKS); |
28 |
|
|
|
29 |
|
|
%get list ofpoints that form a zonal band: |
30 |
gforget |
1.4 |
mskW=SECTIONS_MASKS(iy).mskWedge; |
31 |
|
|
vecW=gcmfaces_subset(mskW,fldU); |
32 |
|
|
mskS=SECTIONS_MASKS(iy).mskSedge; |
33 |
|
|
vecS=gcmfaces_subset(mskS,fldV); |
34 |
|
|
|
35 |
gforget |
1.1 |
%store: |
36 |
gforget |
1.4 |
FLD(iy,:)=nansum(vecW,1)+nansum(vecS,1); |
37 |
gforget |
1.1 |
|
38 |
|
|
end; |
39 |
|
|
|
40 |
|
|
|