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

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

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


Revision 1.3 - (hide annotations) (download)
Mon Dec 17 19:51:38 2012 UTC (12 years, 7 months ago) by gforget
Branch: MAIN
Changes since 1.2: +13 -3 lines
- revise 'B' diags set. Now compute running sum(X) and sum(X^2)
  Save to file. Using lChunk=1 iChunk=[1:myparms.recInAve(2)].
- diags_grid_parms.m : parms.yearLast = 2011 in ecco v4
- diags_select.m : allow for lChunk = 0 and listChunk params.

1 gforget 1.3 function []=diags_select(dirModel,dirMat,setDiags,lChunk,listChunk);
2 gforget 1.1 %object: compute a set of basic diagnostics
3     %input: dirModel is the model run directory
4     % dirMat is the directory where diagnozed .mat files will be saved
5     % -> set it to '' to use the default [dirModel 'mat/']
6     % setDiags is the choice of diagnostics
7     % 'A') trasnports (see diags_set_A.m)
8     % 'B') air-sea fluxes
9     % 'C') state variables
10     % 'D') global and regional budgets
11     % 'LAYERS') T/S/RHO coordinate overturns
12     % 'user') is a placeholder for user diags additions
13     % lChunk states how many records are computed at once
14 gforget 1.3 % listChunk states which parts of the records should be
15 gforget 1.1 % computed (i0+1:i0+lChunk where i0~lTot/lChunk)
16    
17     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18     %create dirModel/mat if needed:
19     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20    
21 gforget 1.3 if lChunk==0; return; end;
22    
23 gforget 1.1 dirModel=[dirModel '/'];
24    
25     if isempty(dirMat); dirMat=[dirModel 'mat/']; end;
26     if isempty(dir(dirMat)); eval(['!mkdir ' dirMat ';']); end;
27    
28     %list of subdirectories where to scan for output
29     listSubdirs={[dirMat 'BUDG/' ],[dirModel 'diags/BUDG/' ],[dirModel 'diags/OTHER/' ],...
30     [dirModel 'diags/STATE/' ],[dirModel 'diags/TRSP/'],[dirModel 'diags/' ]};
31    
32     setDiagsParams=[];
33     if iscell(setDiags);
34     setDiagsParams={setDiags{2:end}};
35     setDiags=setDiags{1};
36     end;
37    
38     %%%%%%%%%%%%%%%%%%%%%%
39     %load grid and params:
40     %%%%%%%%%%%%%%%%%%%%%%
41    
42     gcmfaces_global; global myparms;
43     test0=~isempty(dir([dirMat 'diags_grid_parms.mat']));
44     test1=~isempty(dir([dirMat 'basic_diags_ecco_mygrid.mat']));
45     if test0;%load mygrid and myparms from file
46     eval(['load ' dirMat 'diags_grid_parms.mat;']);
47     elseif test1;%for backward compatibility
48     eval(['load ' dirMat 'basic_diags_ecco_mygrid.mat;']);
49     else;
50     error('could not find diags_grid_parms.mat');
51     end;
52    
53 gforget 1.2 %in case mygrid.memoryLimit=1, load the stuff that was not saved to diags_grid_parms.mat
54     if mygrid.memoryLimit==1;
55     list0={'hFacS','hFacW'};
56     for iFld=1:length(list0);
57     eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([mygrid.dirGrid ''' list0{iFld} '*'']);']);
58     end;
59     %
60     mygrid.hFacCsurf=mygrid.hFacC;
61     for ff=1:mygrid.hFacC.nFaces; mygrid.hFacCsurf{ff}=mygrid.hFacC{ff}(:,:,1); end;
62     %
63     mskC=mygrid.hFacC; mskC(mskC==0)=NaN; mskC(mskC>0)=1; mygrid.mskC=mskC;
64     mskW=mygrid.hFacW; mskW(mskW==0)=NaN; mskW(mskW>0)=1; mygrid.mskW=mskW;
65     mskS=mygrid.hFacS; mskS(mskS==0)=NaN; mskS(mskS>0)=1; mygrid.mskS=mskS;
66     %
67     gcmfaces_lines_zonal;
68     mygrid.LATS=[mygrid.LATS_MASKS.lat]';
69     [lonPairs,latPairs,names]=line_greatC_TUV_MASKS_v4;
70     gcmfaces_lines_transp(lonPairs,latPairs,names);
71     end;
72    
73 gforget 1.1 %%%%%%%%%%%%%%
74     %define diags:
75     %%%%%%%%%%%%%%
76    
77     userStep=1;
78     if ~isempty(which(['diags_set_' setDiags]));
79     eval(['diags_set_' setDiags]);
80     else;
81     diags_set_user;
82     end;
83    
84     %reformat listDiags to cell array:
85     jj=strfind(listDiags,' '); jj=[0 jj length(listDiags)+1];
86     for ii=1:length(jj)-1;
87     tmp1=listDiags(jj(ii)+1:jj(ii+1)-1);
88     if ii==1; listDiags2={tmp1}; else; listDiags2{ii}=tmp1; end;
89     end;
90     listDiags=listDiags2; clear listDiags2;
91    
92     %%%%%%%%%%%%%%
93     %detect files:
94     %%%%%%%%%%%%%%
95    
96     userStep=2;
97     if ~isempty(which(['diags_set_' setDiags]));
98     eval(['diags_set_' setDiags]);
99     else;
100     diags_set_user;
101     end;
102    
103     %remove blanks in pkg/diagnostics flds name
104     listFlds=deblank(listFlds);
105     listFldsNames=deblank(listFldsNames);
106    
107     %set the list of diags times
108     [listTimes]=diags_list_times(listSubdirs,listFiles);
109    
110     %then scan directories (listSubdirs) for files (listFiles)
111     for ii=1:length(listFiles);
112     tmp0='';
113     for jj=1:length(listSubdirs);
114     tmp1=listFiles{ii}; tmp2=listSubdirs{jj};
115     if ~isempty(dir([tmp2 '/' tmp1 '*meta']));
116     tmp0=[tmp2 '/' tmp1]; listFiles{ii}=tmp0;
117     end;
118     end;
119     if isempty(tmp0); fprintf([' not found: ' tmp1 '\n']); listFiles{ii}=''; end;
120     end;
121    
122     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
123 gforget 1.3 %loop over chunks
124     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
125    
126     for iChunk=listChunk;
127    
128     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
129 gforget 1.1 %load records for computation:
130     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
131    
132     lTot=length(listTimes);
133     i0=min(lChunk*(iChunk-1),lTot);
134     i1=min(i0+lChunk,lTot);
135    
136     tic;
137     tt=listTimes([i0+1:i1])';
138     for iFile=1:length(listFiles);
139     fileFld=listFiles{iFile};
140     if ~isempty(fileFld);
141     rdmds2workspace_list(fileFld,tt,listFlds);
142     for ii=1:length(meta.fldList);
143     tmp1=deblank(meta.fldList{ii});
144     jj=find(strcmp(tmp1,listFlds));
145     if ~isempty(jj); eval(['all_' listFldsNames{jj} '=' tmp1 ';']); end;
146     eval(['clear ' tmp1]);
147     end;
148     end;
149     end;
150     fprintf([num2str(i1-i0) ' records loaded in ' num2str(toc) '\n']);
151    
152     %check that all fields were found, and otherwise reduce listFlds
153     listFldsIsPresent=zeros(1,length(listFldsNames));
154     for iFld=1:length(listFldsNames);
155     fldName=['all_' listFldsNames{iFld}];
156     if isempty(who(fldName));
157     fprintf([fldName ' is missing \n']);
158     else;
159     listFldsIsPresent(iFld)=1;
160     % fprintf([fldName ' was found \n']);
161     end;
162     end;
163     listFldsNames={listFldsNames{find(listFldsIsPresent)}};
164     listFlds={listFlds{find(listFldsIsPresent)}};
165    
166     %%%%%%%%%%%%%%%%%%%%
167     %do the computation:
168     %%%%%%%%%%%%%%%%%%%%
169     for ii=i0+1:i1;
170    
171     tic;
172     tt=listTimes(ii);
173    
174     %get data from buffer
175     for jj=1:length(listFldsNames);
176     if lChunk==1|length(listTimes)==1;
177     eval([listFldsNames{jj} '=all_' listFldsNames{jj} ';']);
178     else;
179     eval(['tmp1=size(all_' listFldsNames{jj} '{1});']);
180     if length(tmp1)==4; eval([listFldsNames{jj} '=all_' listFldsNames{jj} '(:,:,:,ii-i0);']);
181     else; eval([listFldsNames{jj} '=all_' listFldsNames{jj} '(:,:,ii-i0);']);
182     end;
183     end;
184     end;
185     fprintf([num2str(ii-i0) '/' num2str(i1-i0) ' started \n']);
186    
187     %generic output file name (that will potentially be overriden)
188     tmp1=setDiags;
189     fileMat=['diags_set_' tmp1 '_' num2str(tt) '.mat'];
190    
191     %the actual computations
192     userStep=3;
193     if ~isempty(which(['diags_set_' setDiags]));
194     eval(['diags_set_' setDiags]);
195     else;
196     diags_set_user;
197     end;
198 gforget 1.2
199     fprintf([num2str(ii) '/' num2str(length(listTimes)) ' done in ' num2str(toc) '\n']);
200    
201 gforget 1.1 %package results
202     onediag=[];
203     onediag.listTimes=myparms.yearFirst(1)+tt*myparms.timeStep/86400/365.25;
204     onediag.listSteps=tt;
205     for jj=1:length(listDiags);
206     eval(['onediag.' listDiags{jj} '=' listDiags{jj} ';']);
207     end;
208    
209     %write to disk
210     diags_store_to_mat(dirMat,fileMat,onediag);
211    
212 gforget 1.3 end;%for ii=i0+1:i1;
213    
214     end;%for iChunk=listChunk;
215 gforget 1.1
216    

  ViewVC Help
Powered by ViewVC 1.1.22