1 |
enderton |
1.1 |
function DiagRun(varargin); |
2 |
|
|
|
3 |
|
|
% Function: DiagRun |
4 |
|
|
% Author: Daniel Enderton |
5 |
|
|
% |
6 |
|
|
% Input Fields: |
7 |
|
|
% |
8 |
|
|
% Field Type (Brief) Description |
9 |
|
|
% ----------------------------------------------------------------------- |
10 |
|
|
% page cell array Experiment and plot information (Required) |
11 |
|
|
% pagename string Page name (title and output file) (Required) |
12 |
|
|
% |
13 |
|
|
% OutputDir string Output directory name (Optional) |
14 |
|
|
% LoadData 0/1 Load data (Optional) |
15 |
|
|
% LoadGridData 0/1 Load grid data (Optional) |
16 |
|
|
% DumpData 0/1 Save plotting data (Optional) |
17 |
|
|
% SavePlots 0/1 Save plot (Optional) |
18 |
|
|
% DiagDebug 0/1 Print debug flags (Optional) |
19 |
|
|
% |
20 |
|
|
% Descripton: |
21 |
|
|
% This is the top level function of the cubed-sphere coupled-model |
22 |
|
|
% diagnostics package. The function guides the diagnostics through |
23 |
|
|
% loading (including averaging and slicing) and then plotting of the |
24 |
|
|
% data. The defaults of the optional parameters are in DiagRunDefaults. |
25 |
|
|
% |
26 |
|
|
% Sample function call is as follows (page and pagename appropriately |
27 |
|
|
% defined): |
28 |
|
|
% |
29 |
|
|
% >> DiagRun(page,pagename,'LoadData',1); |
30 |
|
|
% >> DiagRun(page,pagename,'LoadData',1,'OutputDir','~/'); |
31 |
|
|
|
32 |
|
|
|
33 |
|
|
% Load DiagRun default parameters and general diagnostics parameters. |
34 |
|
|
DiagRunDefaults; |
35 |
|
|
DiagGenParam; |
36 |
|
|
|
37 |
|
|
|
38 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
39 |
|
|
% Read in function arguements % |
40 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
41 |
|
|
|
42 |
|
|
% Read in list of possible parameters. |
43 |
|
|
diagrunparam = ReadVariables('DiagRunDefaults.m'); |
44 |
|
|
diagplotparam = ReadVariables('DiagPlotDefaults.m'); |
45 |
|
|
|
46 |
|
|
% Rudimentary checks to make sure that the page and pagemane fields are |
47 |
|
|
% there and that they are the correct classes. |
48 |
|
|
if length(varargin) < 2 |
49 |
|
|
error('There must be at least two input arguements.') |
50 |
|
|
else |
51 |
|
|
if isequal(class(varargin{1}),'cell') |
52 |
|
|
page = varargin{1}; |
53 |
|
|
else |
54 |
|
|
error('''page'' must be cell array.'); |
55 |
|
|
end |
56 |
|
|
if isequal(class(varargin{2}),'char') |
57 |
|
|
pagename = varargin{2}; |
58 |
|
|
else |
59 |
|
|
error('''pagename'' must be a string.'); |
60 |
|
|
end |
61 |
|
|
end |
62 |
|
|
|
63 |
|
|
% Read in optional parameters, overriding the defaults if they are DiagRun |
64 |
|
|
% parameters and saving the DiagPlot parameters to pass along to the |
65 |
|
|
% DiagPlot function later on. |
66 |
|
|
plotparam = {}; |
67 |
|
|
iplotparam = 1; |
68 |
|
|
for iarg = 3:2:length(varargin) |
69 |
|
|
if ismember(varargin{iarg},diagrunparam) |
70 |
|
|
if isstr(varargin{iarg+1}) |
71 |
|
|
eval([varargin{iarg},'=''',num2str(varargin{iarg+1}),''';']) |
72 |
|
|
else |
73 |
|
|
eval([varargin{iarg},'=',num2str(varargin{iarg+1}),';']) |
74 |
|
|
end |
75 |
|
|
elseif ismember(varargin{iarg},diagplotparam) |
76 |
|
|
plotparam{iplotparam} = lower(varargin{iarg}); |
77 |
|
|
plotparam{iplotparam+1} = varargin{iarg+1}; |
78 |
|
|
iplotparam = iplotparam + 2; |
79 |
|
|
else |
80 |
|
|
error(['Unrecognized DiagRun setting: ',lower(varargin{iarg})]); |
81 |
|
|
end |
82 |
|
|
end |
83 |
|
|
|
84 |
|
|
|
85 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
86 |
|
|
% Function body % |
87 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
88 |
|
|
|
89 |
|
|
% Determine number of plots for this page. |
90 |
|
|
nplot = length(page); |
91 |
|
|
|
92 |
|
|
% Here would be a nice place to implement a function to verify that the |
93 |
|
|
% experiment field, slicing, averaging, and plot configuration information |
94 |
|
|
% is all self-consistent. |
95 |
|
|
|
96 |
|
|
|
97 |
|
|
% If the loaddata options is set to 0, the loading, averaging and slicing |
98 |
|
|
% of the data will be bypassed and the data to be plotted will be pulled |
99 |
|
|
% from the 'dump.mat' file. This options is here almost entirely for the |
100 |
|
|
% purpose of fine-tuning your plots with the 'DiagPlot' function (also good |
101 |
|
|
% for testing modifications to DiagPlot!). If the setting is set to 1, |
102 |
|
|
% then after the loading, averaging, and slicing the data to be plotted is |
103 |
|
|
% automatically saved to 'DiagDump.mat' so you so not have to load the |
104 |
|
|
% exact same data next time is you so desire. |
105 |
|
|
if LoadData |
106 |
|
|
|
107 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
108 |
|
|
% Load data (calls DiagAverage and DiagSlice % |
109 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
110 |
|
|
for inplot = 1:nplot |
111 |
|
|
nexp = length(page{inplot}); if nexp ~= 1, nexp = nexp - 1; end |
112 |
|
|
for inexp = 1:nexp |
113 |
|
|
ExpInfo = page{inplot}{inexp}; |
114 |
|
|
|
115 |
|
|
% Required Fields. |
116 |
|
|
fln = ExpInfo{ifln}; % FieldName (Required) |
117 |
|
|
exp = ExpInfo{iexp}; % Experiment (Required) |
118 |
|
|
dat = ExpInfo{idat}; % DataType (Required) |
119 |
|
|
dad = ExpInfo{idad}; % DataDir (Required) |
120 |
|
|
grd = ExpInfo{igrd}; % GridDir (Required) |
121 |
|
|
itr = ExpInfo{iitr}; % Iterations (Required) |
122 |
|
|
tst = ExpInfo{itst}; % TimeStep (Required) |
123 |
|
|
flu = ExpInfo{iflu}; % Fluid (Required) |
124 |
|
|
ddf = ExpInfo{iddf}; % DataFormat (Required) |
125 |
|
|
gdf = ExpInfo{igdf}; % GridFormat (Required) |
126 |
|
|
avg = ExpInfo{iavg}; % Averaging (Required) |
127 |
|
|
slc = ExpInfo{islc}; % SliceType (Required) |
128 |
|
|
pst = ExpInfo{ipst}; % PlotStyle (Required) |
129 |
|
|
|
130 |
|
|
% Set panel settings to default values, override with optional |
131 |
|
|
% settings. |
132 |
|
|
for param = diagrunparam |
133 |
|
|
eval([param{1},'Temp=',param{1},';']); |
134 |
|
|
end |
135 |
|
|
for iarg = 14:2:length(ExpInfo) |
136 |
|
|
if ismember(ExpInfo{iarg},diagrunparam) |
137 |
|
|
iparam=ExpInfo{iarg+1}; |
138 |
|
|
if isstr(iparam), fparam=['''',iparam,'''']; |
139 |
|
|
elseif prod(size(iparam))>1, fparam=mat2str(iparam); |
140 |
|
|
else fparam=num2str(iparam); end |
141 |
|
|
eval([ExpInfo{iarg},'Temp=',fparam,';']); |
142 |
|
|
end |
143 |
|
|
end |
144 |
|
|
|
145 |
|
|
|
146 |
|
|
% Make DiagLoad function call. |
147 |
|
|
disp(['Loading - Experiment: ',exp,'; Field: ',fln]); |
148 |
|
|
[data{inplot}{inexp}, xax{inplot}{inexp},... |
149 |
|
|
yax{inplot}{inexp},time{inplot}{inexp},... |
150 |
|
|
pltslc{inplot}{inexp}] = ... |
151 |
|
|
DiagLoad(fln,exp,dat,dad,grd,itr,tst,flu,ddf,gdf,avg,slc,pst,... |
152 |
|
|
LoadGridData,DiagDebug,GridSuffixTemp,ZcordFileTemp,... |
153 |
|
|
IndexTemp,DimTemp,GradsTemp,Year0IterTemp,MonthsTemp); |
154 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
155 |
|
|
% Function body % |
156 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
157 |
|
|
% Save panel data for outside use. |
158 |
|
|
if DumpData |
159 |
|
|
datadump = data{inplot}{inexp}; |
160 |
|
|
xaxdump = xax{inplot}{inexp}; |
161 |
|
|
yaxdump = yax{inplot}{inexp}; |
162 |
|
|
timedump = time{inplot}{inexp}; |
163 |
|
|
pltslcdump = pltslc{inplot}{inexp}; |
164 |
|
|
save(['Data',pagename,fln,flu,'.mat'],'datadump',... |
165 |
|
|
'xaxdump','yaxdump','timedump','pltslcdump'); |
166 |
|
|
end |
167 |
|
|
end |
168 |
|
|
end |
169 |
|
|
save('DiagDump.mat','data','xax','yax','time','pltslc'); |
170 |
|
|
else |
171 |
|
|
load('DiagDump.mat'); |
172 |
|
|
end |
173 |
|
|
|
174 |
|
|
|
175 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
176 |
|
|
% Plot Data % |
177 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
178 |
|
|
|
179 |
|
|
% Now to make the actual plots. Basically, all of the information is |
180 |
|
|
% passed to the 'DiagPlot' functions, and things get a bit hairy in |
181 |
|
|
% there. Hopefully the comments in the function, and its supporting |
182 |
|
|
% scripts will help you to make sense of this as needed. |
183 |
|
|
disp(['Plotting results:']); |
184 |
|
|
DiagPlot(pagename,page,data,xax,yax,time,pltslc,... |
185 |
|
|
OutputDir,LoadGridData,SavePlots,DiagDebug); |