/[MITgcm]/MITgcm_contrib/enderton/Diagnostics/DiagAverage.m
ViewVC logotype

Annotation of /MITgcm_contrib/enderton/Diagnostics/DiagAverage.m

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


Revision 1.2 - (hide annotations) (download)
Tue Jun 28 21:33:51 2005 UTC (20 years ago) by molod
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +5 -4 lines
Whole bunch of stuff -

1 enderton 1.1 function data = DiagAverage(data,fln,avg,absmonths,ddf,Dim);
2    
3     % Function: DiagAverage
4     % Author: Daniel Enderton
5     %
6     % Input Fields:
7     %
8     % Field Type (Brief) Description
9     % -----------------------------------------------------------------------
10     % data array Data
11     % fln string Field name
12     % avg string Averaging scheme ('Ann','DJF', 'JJA',...)
13     % absmonths array Absolute months (time axis of data)
14     %
15     % Output Fields:
16     %
17     % Field Type (Brief) Description
18     % -----------------------------------------------------------------------
19     % data array Averaged data.
20     %
21     % Descripton:
22     % This function averages the data. The field to average is defined by
23     % 'fln', and the loaded, pre-averaged data is 'data'. The field
24     % 'absmonths' is the time axis given in months (1,13,25,... are assumed
25     % to be Janurary), and is returned in 'datatime' so that there can be a
26     % time axis for every experiment / configuration setting. It is
27     % important to remember that this function assumed monthly data!
28    
29     % Load parameters (here only general parameters).
30     DiagGenParam;
31    
32     % Calcuate months of year.
33     months = mod(absmonths-1,12)+1;
34    
35     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36     % Take monthly average of data %
37     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38    
39     % Take monthly average of data. The result has the same dimensions of the
40     % time-independent field (2D or 3D), and the last dimension is the time,
41     % which has a length of 12, running from 1 to 12, representing January
42     % through December respectively. If there is no data for a months, that
43     % months values are set to NaN.
44     if isequal(avg,'Non')
45     temp = data;
46     elseif isequal(avg,'Avg')
47     if isequal(Dim,2), temp = meanovernan(data,3); % Dimension option overrides.
48     elseif isequal(Dim,3), temp = meanovernan(data,4);
49     elseif ismember(fln,fields2D), temp = meanovernan(data,3);
50     elseif ismember(fln,fields3D), temp = meanovernan(data,4);
51     else
52     error('Field not accounted for in ''fields2D'' of ''fields3D'' and dimension not specified!');
53     end
54     else
55     for imon = 1:12
56     if ismember(fln,fields2D) || isequal(Dim,2)
57     if isempty(find(months == imon))
58     dataMonAvg(:,:,imon) = NaN * zeros(size(data(:,:,1)));
59     else
60 molod 1.2 inds=find(months==imon);
61     dataMonAvg(:,:,imon) = meanovernan(data(:,:,absmonths(inds)),3);
62 enderton 1.1 end
63     elseif ismember(fln,fields3D) || isequal(Dim,3)
64     if isempty(find(months == imon))
65     dataMonAvg(:,:,:,imon) = NaN * zeros(size(data(:,:,:,1)));
66     else
67 molod 1.2 inds=find(months==imon);
68     dataMonAvg(:,:,:,imon) = meanovernan(data(:,:,:,absmonths(inds)),4);
69 enderton 1.1 end
70     else
71     error('Field not accounted for in ''fields2D'' of ''fields3D''');
72     end
73     end
74     end
75    
76    
77     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
78     % Average data %
79     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80    
81     % If 'avg' (the averaging scheme) is time-sequential, merely return the
82     % data, if it is time-year, merely return the monthly averaged data. Note
83     % that these options are for a contour plot of a property which is only a
84     % function of latitude, that is you can only use this for a zonally
85     % averaged to i=# slice of a 2D field.
86     if ismember(avg,{'Non','Avg'})
87     dummy = 1;
88     elseif isequal(avg,'Tse')
89     temp = data;
90     elseif isequal(avg,'Tyr')
91     temp = dataMonAvg;
92     temp(:,:,13) = temp(:,:,1);
93    
94    
95    
96     % Average along certain month combinations, or just select a month itself.
97     % Here we pick the month index number(s) based on the averaging parameter,
98     % and then select those indecies of the monthly averaged data and take a
99     % mean over the time axis.
100     else
101     if isequal(avg,'Jan'), index = [1];
102     elseif isequal(avg,'Feb'), index = [2];
103     elseif isequal(avg,'Mar'), index = [3];
104     elseif isequal(avg,'Apr'), index = [4];
105     elseif isequal(avg,'May'), index = [5];
106     elseif isequal(avg,'Jun'), index = [6];
107     elseif isequal(avg,'Jul'), index = [7];
108     elseif isequal(avg,'Aug'), index = [8];
109     elseif isequal(avg,'Sep'), index = [9];
110     elseif isequal(avg,'Oct'), index = [10];
111     elseif isequal(avg,'Nov'), index = [11];
112     elseif isequal(avg,'Dec'), index = [12];
113     elseif isequal(avg,'DJF'), index = [12,1,2];
114     elseif isequal(avg,'MAM'), index = [3,4,5];
115     elseif isequal(avg,'JJA'), index = [6,7,8];
116     elseif isequal(avg,'SON'), index = [9,10,11];
117     elseif isequal(avg,'Ann'), index = [1:12];
118     else
119     error(['Unaccounted for averaging scheme: ',avg]);
120     end
121    
122     % Make an array 'newindex' which has all the values as in 'index', but
123     % with the emission those months with no data (all NaNs). Note that
124     % sometimes the edges of the U and V velocity fields can be NaN from
125     % the interpolation, so check for NaN months a few horizontal indecies
126     % into the array.
127     umonths = unique(months);
128     newindex = umonths(ismember(umonths,index));
129    
130     % Cast a warning or error for all or some missing data, respectively.
131     if isempty(newindex)
132     error(['No data for the averaging sceheme: ',avg,]);
133     elseif length(newindex) ~= length(index)
134     disp(['***Warning*** Missing data for averaging scheme: ',avg]);
135     disp([' Month(s) with data: ',mat2str(newindex)]);
136     disp([' Month(s) for averaging: ',mat2str(index)]);
137     end
138    
139     % Perform time averaging.
140     if ismember(fln,fields2D) || isequal(Dim,2)
141     temp = meanovernan(dataMonAvg(:,:,newindex),3);
142     elseif ismember(fln,fields3D) || isequal(Dim,3)
143     temp = meanovernan(dataMonAvg(:,:,:,newindex),4);
144     end
145    
146     end
147    
148    
149     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
150     % Prepare for output %
151     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
152    
153 molod 1.2 data = temp;

  ViewVC Help
Powered by ViewVC 1.1.22