1 |
gforget |
1.2 |
function [diags]=example_transports(); |
2 |
gforget |
1.4 |
%EXAMPLE_TRANSPORTS computes transports (and zonal averages) |
3 |
|
|
|
4 |
|
|
p = genpath('gcmfaces/'); addpath(p); |
5 |
|
|
p = genpath('MITprof/'); addpath(p); |
6 |
gforget |
1.1 |
|
7 |
|
|
gcmfaces_global; |
8 |
|
|
if myenv.verbose>0; |
9 |
|
|
gcmfaces_msg('==============================================='); |
10 |
|
|
gcmfaces_msg(['*** entering example_transports ' ... |
11 |
|
|
'that will load a set of variables form file ' ... |
12 |
|
|
'and compute a series of derived diagnostics '],''); |
13 |
|
|
% gcmfaces_msg('*** entering example_transports',''); |
14 |
|
|
% gcmfaces_msg('that will load a set of variables form file',' '); |
15 |
|
|
% gcmfaces_msg('and compute a series of derived diagnostics',' '); |
16 |
|
|
end; |
17 |
|
|
|
18 |
|
|
%%%%%%%%%%%%%%%%% |
19 |
gforget |
1.4 |
%load grid: |
20 |
gforget |
1.1 |
%%%%%%%%%%%%%%%%% |
21 |
|
|
|
22 |
gforget |
1.4 |
if isempty(mygrid); |
23 |
|
|
grid_load; |
24 |
gforget |
1.1 |
end; |
25 |
gforget |
1.2 |
|
26 |
gforget |
1.4 |
myenv.nctilesdir=fullfile('release1',filesep,'nctiles_climatology',filesep); |
27 |
gforget |
1.1 |
|
28 |
|
|
if ~isdir(myenv.nctilesdir); |
29 |
|
|
diags=[]; |
30 |
gforget |
1.3 |
help gcmfaces_demo; |
31 |
gforget |
1.1 |
warning(['skipping example_transports (missing ' myenv.nctilesdir ')']); |
32 |
|
|
return; |
33 |
|
|
end; |
34 |
|
|
|
35 |
|
|
if myenv.verbose>0; |
36 |
|
|
gcmfaces_msg('* call gcmfaces_lines_zonal : determine grid lines that closely follow'); |
37 |
|
|
gcmfaces_msg('parallel lines and will be used in zonal mean and overturning computations',' '); |
38 |
|
|
end; |
39 |
gforget |
1.2 |
gcmfaces_lines_zonal; |
40 |
|
|
|
41 |
gforget |
1.1 |
if myenv.verbose>0; |
42 |
|
|
gcmfaces_msg('* call gcmfaces_lines_transp : determine grid lines that closely follow'); |
43 |
|
|
gcmfaces_msg('great circles and will be used to compute transsects transports',' '); |
44 |
|
|
end; |
45 |
|
|
% warning('skipping gcmfaces_lines_transp\n'); |
46 |
gforget |
1.2 |
[lonPairs,latPairs,names]=line_greatC_TUV_MASKS_v4; |
47 |
gforget |
1.1 |
gcmfaces_lines_transp(lonPairs,latPairs,names); |
48 |
|
|
|
49 |
|
|
%%%%%%%%%%%%%%%%% |
50 |
|
|
%do computations: |
51 |
|
|
%%%%%%%%%%%%%%%%% |
52 |
|
|
|
53 |
gforget |
1.4 |
listDiags={}; |
54 |
|
|
|
55 |
gforget |
1.1 |
% [listTimes]=diags_list_times; |
56 |
|
|
diags.listTimes=1; |
57 |
|
|
|
58 |
gforget |
1.4 |
%part 1: |
59 |
|
|
|
60 |
|
|
listVars={'UVELMASS','VVELMASS'}; |
61 |
|
|
missingVars={}; |
62 |
|
|
for vv=1:length(listVars); |
63 |
|
|
tmp1=[myenv.nctilesdir listVars{vv} filesep listVars{vv} '*nc']; |
64 |
|
|
if isempty(dir(tmp1)); missingVars={missingVars{:},tmp1}; end; |
65 |
|
|
end; |
66 |
|
|
|
67 |
|
|
if ~isempty(missingVars); |
68 |
|
|
fprintf('\n example_transports could not find the following files ---> skipping related computation!\n'); |
69 |
|
|
disp(missingVars'); |
70 |
|
|
else; |
71 |
|
|
|
72 |
gforget |
1.1 |
if myenv.verbose>0; gcmfaces_msg('* call rdmds2gcmfaces : load velocity fields');end; |
73 |
gforget |
1.4 |
|
74 |
gforget |
1.1 |
for vvv=1:length(listVars); |
75 |
|
|
vv=listVars{vvv}; |
76 |
|
|
tmp1=read_nctiles([myenv.nctilesdir vv '/' vv],vv); |
77 |
|
|
tmp1=mean(tmp1,4); |
78 |
|
|
tmp1(mygrid.mskC==0)=NaN; |
79 |
|
|
eval([vv '=tmp1;']); |
80 |
|
|
end; |
81 |
|
|
|
82 |
|
|
UVELMASS=UVELMASS.*mygrid.mskW; |
83 |
|
|
VVELMASS=VVELMASS.*mygrid.mskS; |
84 |
|
|
|
85 |
gforget |
1.4 |
listDiags={listDiags{:},'fldBAR','gloOV','fldTRANSPORTS','gloMT_FW'}; |
86 |
gforget |
1.1 |
if myenv.verbose>0; gcmfaces_msg('* call calc_barostream : comp. barotropic stream function');end; |
87 |
|
|
[fldBAR]=calc_barostream(UVELMASS,VVELMASS); |
88 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_overturn : comp. overturning stream function');end; |
89 |
|
|
[gloOV]=calc_overturn(UVELMASS,VVELMASS); |
90 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_transports : comp. transects transports');end; |
91 |
|
|
[fldTRANSPORTS]=1e-6*calc_transports(UVELMASS,VVELMASS,mygrid.LINES_MASKS,{'dh','dz'}); |
92 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_MeridionalTransport : comp. meridional seawater transport');end; |
93 |
|
|
[gloMT_FW]=1e-6*calc_MeridionalTransport(UVELMASS,VVELMASS,1); |
94 |
|
|
|
95 |
gforget |
1.4 |
end;%if ~isempty(missingVars); |
96 |
|
|
|
97 |
|
|
%part 2: |
98 |
|
|
|
99 |
gforget |
1.1 |
listVars={'THETA','SALT','ADVx_TH','ADVy_TH','ADVx_SLT','ADVy_SLT'}; |
100 |
|
|
listVars={listVars{:},'DFxE_TH','DFyE_TH','DFxE_SLT','DFyE_SLT'}; |
101 |
gforget |
1.4 |
|
102 |
|
|
missingVars={}; |
103 |
|
|
for vv=1:length(listVars); |
104 |
|
|
tmp1=[myenv.nctilesdir listVars{vv} filesep listVars{vv} '*nc']; |
105 |
|
|
if isempty(dir(tmp1)); missingVars={missingVars{:},tmp1}; end; |
106 |
|
|
end; |
107 |
|
|
|
108 |
|
|
if ~isempty(missingVars); |
109 |
|
|
fprintf('\n example_transports could not find the following files ---> skipping related computation!\n'); |
110 |
|
|
disp(missingVars'); |
111 |
|
|
else; |
112 |
|
|
|
113 |
|
|
if myenv.verbose>0; gcmfaces_msg('* load tracer and transports fields');end; |
114 |
gforget |
1.1 |
listDiags={listDiags{:},'fldTzonmean','fldSzonmean','gloMT_H','gloMT_SLT'}; |
115 |
|
|
for vvv=1:length(listVars); |
116 |
|
|
vv=listVars{vvv}; |
117 |
|
|
tmp1=read_nctiles([myenv.nctilesdir vv '/' vv],vv); |
118 |
|
|
tmp1=mean(tmp1,4); |
119 |
|
|
tmp1(mygrid.mskC==0)=NaN; |
120 |
|
|
eval([vv '=tmp1;']); |
121 |
|
|
end; |
122 |
|
|
|
123 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_zonmean_T : comp. zonal mean temperature');end; |
124 |
|
|
[fldTzonmean]=calc_zonmean_T(THETA); |
125 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_zonmean_T : comp. zonal mean salinity');end; |
126 |
|
|
[fldSzonmean]=calc_zonmean_T(SALT); |
127 |
|
|
|
128 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_MeridionalTransport : comp. meridional heat transport');end; |
129 |
|
|
tmpU=(ADVx_TH+DFxE_TH); tmpV=(ADVy_TH+DFyE_TH); |
130 |
|
|
[gloMT_H]=1e-15*4e6*calc_MeridionalTransport(tmpU,tmpV,0); |
131 |
|
|
if myenv.verbose>0; gcmfaces_msg('* call calc_MeridionalTransport : comp. meridional salt transport');end; |
132 |
|
|
tmpU=(ADVx_SLT+DFxE_SLT); tmpV=(ADVy_SLT+DFyE_SLT); |
133 |
|
|
[gloMT_SLT]=1e-6*calc_MeridionalTransport(tmpU,tmpV,0); |
134 |
|
|
|
135 |
gforget |
1.4 |
end;%if ~isempty(missingVars); |
136 |
|
|
|
137 |
|
|
%part 3: format output |
138 |
|
|
|
139 |
gforget |
1.1 |
for ddd=1:length(listDiags); |
140 |
|
|
dd=listDiags{ddd}; |
141 |
|
|
eval(['diags.' dd '=' dd ';']); |
142 |
|
|
end; |
143 |
|
|
|
144 |
|
|
if myenv.verbose>0; |
145 |
|
|
gcmfaces_msg('*** leaving example_transports'); |
146 |
|
|
gcmfaces_msg('===============================================',''); |
147 |
|
|
end; |
148 |
|
|
|