/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_diags/diags_display.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_diags/diags_display.m

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


Revision 1.13 - (hide annotations) (download)
Sat Nov 19 15:22:42 2016 UTC (8 years, 8 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66a
Changes since 1.12: +9 -0 lines
- grid_load.m: remove call to gcmfaces_lines_zonal and gcmfaces_lines_transp
- calc_MeridionalTransport.m, calc_mermean_T.m, calc_overturn.m, calc_zonmean_T.m,
  calc_zonmedian_T.m, gcmfaces_section.m, diags_display.m, diags_grid_parms.m, figureL.m,
  example_transports_disp.m: call gcmfaces_lines_zonal and / or gcmfaces_lines_transp to
  initialize LATS_MASKS, LONS_MASKS, or LINES_MASKS if needed.

1 gforget 1.11 function [alldiag]=diags_display(dirMat,setDiags,dirTex,nameTex);
2     % [alldiag]=DIAGS_DISPLAY(dirMat,setDiags,dirTex,nameTex)
3 gforget 1.10 % displays a set of diagnostics (setDiags) from the results
4     % stored (in [dirMat 'diags_set_' setDiags]).
5     %
6     % Further outputs the results to tex ([dirTex nameTex '.tex'])
7     % if dirTex and nameTex are specified. This functionality
8     % is normally operated via diags_driver_tex.m. If dirMat is
9     % specified as {dirMat,dirMatRef} then anomalies will be plotted.
10     %
11     % setDiags is the choice of diagnostics set such as
12 gforget 1.1 % 'A') trasnports
13     % 'B') air-sea fluxes
14     % 'C') state variables
15 gforget 1.10 % 'D') global and hemispheric budgets
16     % 'MLD') mixed layer depths
17     %
18     % In some cases more specific options can be specified, e.g. to
19     % display only subsurface budgets one may set setDiags={{'D',11}}
20 gforget 1.1
21     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22     %determine input/output params:
23     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24    
25     %directory names:
26     if iscell(dirMat); dirMatRef=dirMat{2}; dirMat=dirMat{1}; end;
27     dirMat=[dirMat '/'];
28     if isempty(who('dirMatRef')); dirMatRef='';
29     elseif ~isempty(dirMatRef); dirMatRef=[dirMatRef '/'];
30     end;
31     if isempty(who('dirTex')); dirTex=''; else; dirTex=[dirTex '/']; end;
32     if isempty(who('nameTex')); nameTex='myPlots'; end;
33    
34     %determine if and where to create tex and figures files
35     if ~ischar(dirTex); error('mis-specified dirTex'); end;
36     if isempty(dirTex);
37 gforget 1.12 addToTex=1; fileTex='';
38 gforget 1.1 else;
39     addToTex=1; fileTex=[dirTex nameTex '.tex'];
40     end;
41    
42     %determined where to display anomalies between runs
43     doAnomalies=~isempty(dirMatRef);
44    
45     %more params
46     setDiagsParams=[];
47     if iscell(setDiags);
48     setDiagsParams={setDiags{2:end}};
49     setDiags=setDiags{1};
50     end;
51    
52     %%%%%%%%%%%%%%%%%%%%%%
53     %load grid and params:
54     %%%%%%%%%%%%%%%%%%%%%%
55    
56     gcmfaces_global; global myparms;
57     test1=~isempty(dir([dirMat 'basic_diags_ecco_mygrid.mat']));
58     test2=~isempty(dir([dirMat 'diags_grid_parms.mat']));
59     if ~test1&~test2;
60     error('missing diags_grid_parms.mat')
61     elseif test2;
62     nameGrid='diags_grid_parms.mat';
63     suffDiag='diags_set_';
64     budgetList='diags_select_budget_list.mat';
65     else;
66     nameGrid='basic_diags_ecco_mygrid.mat';
67     suffDiag='basic_diags_ecco_';
68     budgetList='basic_diags_ecco_budget_list.mat';
69     end;
70    
71     %here we always reload the grid from dirMat to make sure the same one is used throughout
72     eval(['load ' dirMat nameGrid ';']);
73    
74 gforget 1.13 %zonal mean and sections needed for transport computations
75     if ~isfield(mygrid,'mygrid.LATS_MASKS');
76     gcmfaces_lines_zonal;
77     end;
78     if ~isfield(mygrid,'LINES_MASKS');
79     [lonPairs,latPairs,names]=gcmfaces_lines_pairs;
80     gcmfaces_lines_transp(lonPairs,latPairs,names);
81     end;
82    
83 gforget 1.2 %backward compatibility:
84     if ~isfield(mygrid,'memoryLimit'); mygrid.memoryLimit=0; end;
85     if ~isfield(mygrid,'ioSize'); mygrid.ioSize=0; end;
86    
87 gforget 1.1 %in case mygrid.memoryLimit=1, load the stuff that was not saved to diags_grid_parms.mat
88     if mygrid.memoryLimit==1;
89     list0={'hFacS','hFacW'};
90     for iFld=1:length(list0);
91     eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([mygrid.dirGrid ''' list0{iFld} '*'']);']);
92     end;
93     %
94     mygrid.hFacCsurf=mygrid.hFacC;
95     for ff=1:mygrid.hFacC.nFaces; mygrid.hFacCsurf{ff}=mygrid.hFacC{ff}(:,:,1); end;
96     %
97     mskC=mygrid.hFacC; mskC(mskC==0)=NaN; mskC(mskC>0)=1; mygrid.mskC=mskC;
98     mskW=mygrid.hFacW; mskW(mskW==0)=NaN; mskW(mskW>0)=1; mygrid.mskW=mskW;
99     mskS=mygrid.hFacS; mskS(mskS==0)=NaN; mskS(mskS>0)=1; mygrid.mskS=mskS;
100     %
101     gcmfaces_lines_zonal;
102     mygrid.LATS=[mygrid.LATS_MASKS.lat]';
103 gforget 1.9 [lonPairs,latPairs,names]=gcmfaces_lines_pairs;
104 gforget 1.1 gcmfaces_lines_transp(lonPairs,latPairs,names);
105     end;
106    
107     %%%%%%%%%%%%%%
108     %define diags:
109     %%%%%%%%%%%%%%
110    
111 gforget 1.4 %test for results organization
112     if isdir([dirMat 'diags_set_' setDiags]);
113     dirMat=[dirMat 'diags_set_' setDiags '/'];
114     end;
115     if isdir([dirMatRef 'diags_set_' setDiags]);
116     dirMatRef=[dirMatRef 'diags_set_' setDiags '/'];
117     end;
118    
119 gforget 1.1 if strcmp(nameGrid,'diags_grid_parms.mat');
120     %load listDiags and get fileMat (if applies)
121     userStep=1;
122     if ~isempty(which(['diags_set_' setDiags]));
123     eval(['diags_set_' setDiags]);
124     else;
125     diags_set_user;
126     end;
127    
128     %reformat listDiags to cell array:
129     jj=strfind(listDiags,' '); jj=[0 jj length(listDiags)+1];
130     for ii=1:length(jj)-1;
131     tmp1=listDiags(jj(ii)+1:jj(ii+1)-1);
132     if ii==1; listDiags2={tmp1}; else; listDiags2{ii}=tmp1; end;
133     end;
134     listDiags=listDiags2; clear listDiags2;
135     end;
136    
137     %set fileMat to default name if needed
138     if isempty(who('fileMat')); fileMat=[suffDiag setDiags]; end;
139    
140     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
141     %are there results to display?
142     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143    
144     test1=isempty(dir([dirMat '/' fileMat '_*.mat']));
145     tmp1=[dirMat '/' fileMat '_*.mat']; tmp2=strfind(tmp1,'_'); tmp1(tmp2)=' ';
146     if test1&addToTex;
147 gforget 1.7 eval(['load ' dirTex nameTex '.mat;']);
148 gforget 1.1 write2tex(fileTex,3,{'[ ',mySection,' ]'},1);
149     write2tex(fileTex,3,{'abort : did not find any'},1);
150     write2tex(fileTex,3,{tmp1},1);
151     write2tex(fileTex,3,{'results files to display'},1);
152     return;
153     elseif test1;
154     fprintf(['\n abort : did not find any \n ' tmp1 '\n results files to display\n\n']);
155     return;
156     end;
157    
158    
159     %%%%%%%%%%%%%%%%%%%%%%%%%
160     %load pre-computed diags:
161     %%%%%%%%%%%%%%%%%%%%%%%%%
162    
163     tic;
164    
165     diagsWereLoaded=0;
166    
167     %specific load sequence (if any, diagsWereLoaded will be set to 1)
168     if strcmp(nameGrid,'diags_grid_parms.mat');
169     userStep=0;
170     if ~isempty(which(['diags_set_' setDiags]));
171     eval(['diags_set_' setDiags]);
172     else;
173     diags_set_user;
174     end;
175     end;
176    
177     %generic load (if no specific one, or )
178     if ~diagsWereLoaded;
179 gforget 1.6 alldiag=diags_read_from_mat(dirMat,[fileMat '_*.mat']);
180 gforget 1.1 end;
181    
182     toc;
183    
184     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
185     %load ref and compute anomalies:
186     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
187    
188     if doAnomalies;
189     % scaleAnom=10;
190     scaleAnom=1;
191    
192     %store:
193     dirMatBak=dirMat; dirMat=dirMatRef; alldiagBak=alldiag;
194    
195     %load reference solution:
196     diagsWereLoaded=0;
197    
198     %specific load sequence (if any, diagsWereLoaded will be set to 1)
199     if strcmp(nameGrid,'diags_grid_parms.mat');
200     userStep=0;
201     if ~isempty(which(['diags_set_' setDiags]));
202     eval(['diags_set_' setDiags]);
203     else;
204     diags_set_user;
205     end;
206     end;
207    
208     %generic load (if no specific one, or )
209     if ~diagsWereLoaded;
210 gforget 1.6 alldiag=diags_read_from_mat(dirMat,[fileMat '_*.mat']);
211 gforget 1.1 end;
212    
213     %restore:
214     dirMat=dirMatBak; alldiagRef=alldiag; alldiag=alldiagBak;
215    
216     %compute anomalies:
217     for ii=1:length(alldiag.listDiags);
218     tmp0=alldiag.listDiags{ii};
219 gforget 1.2 if ~strcmp(tmp0,'listTimes')&~strcmp(tmp0,'listSteps')
220 gforget 1.1 if isfield(alldiagRef,tmp0);%compute difference
221     tmp1=getfield(alldiag,tmp0)-getfield(alldiagRef,tmp0);
222     alldiag=setfield(alldiag,tmp0,tmp1);
223     else;%cannot compute diff -> set to NaN
224     tmp1=NaN*getfield(alldiag,tmp0);
225     alldiag=setfield(alldiag,tmp0,tmp1);
226     end;
227 gforget 1.2 end;
228 gforget 1.1 end;
229     end;
230    
231    
232     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
233     %determine time parameters for plots
234     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235    
236     %number of months for runmean
237 gforget 1.5 if myparms.diagsAreMonthly&myparms.diagsNbRec>12;
238 gforget 1.3 myNmean=6; %half window
239     myNmeanTxt=[' -- ' num2str(myNmean*2) ' months low pass filtered'];
240 gforget 1.1 else;
241     myNmean=0; myNmeanTxt='';
242     end;
243    
244     %first and last year of time average
245     myYmean=myparms.yearInAve;
246     if myYmean(1)==myYmean(2); myYmeanTxt=[num2str(myYmean(1)) ' '];
247     else; myYmeanTxt=[num2str(myYmean(1)) '-' num2str(myYmean(2)) ' '];
248     end;
249    
250     %to compute time mean/std on the fly
251 gforget 1.8 if length(alldiag.listTimes)>diff(myparms.recInAve)+1;
252     tt=[myparms.recInAve(1):min(myparms.recInAve(2),length(alldiag.listTimes))];
253     TT=alldiag.listTimes(tt);
254     else;
255     tt=[1:length(alldiag.listTimes)];
256     TT=alldiag.listTimes;
257     end;
258 gforget 1.1 nt=length(TT);
259    
260     %if only one record, swicth off time series and variance plots
261     multiTimes=1*(myparms.recInAve(2)>myparms.recInAve(1));
262    
263     %if llc90 we can plot overturn etc per basin
264     multiBasins=(sum([90 1170]~=mygrid.ioSize)==0);
265    
266     %%%%%%%%%%%%%%%
267     %display diags:
268     %%%%%%%%%%%%%%%
269    
270     userStep=-1;
271     if ~isempty(which(['diags_set_' setDiags]));
272     eval(['diags_set_' setDiags]);
273     else;
274     diags_set_user;
275     end;
276    
277    

  ViewVC Help
Powered by ViewVC 1.1.22