/[MITgcm]/MITgcm_contrib/gael/matlab_class/sample_analysis/example_transports.m
ViewVC logotype

Contents of /MITgcm_contrib/gael/matlab_class/sample_analysis/example_transports.m

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


Revision 1.9 - (show annotations) (download)
Tue Apr 11 16:26:53 2017 UTC (8 years, 3 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66f, checkpoint66o, HEAD
Changes since 1.8: +20 -7 lines
- example_IO.m: update directions to only use release2 for demo
- example_transports.m: compute bolus velocity contribution from M_PsiX,GM_PsiY via calc_bolus
- example_transports_disp.m: update overturn plot title accordingly

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

  ViewVC Help
Powered by ViewVC 1.1.22