/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_misc/annualmean.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_misc/annualmean.m

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


Revision 1.2 - (hide annotations) (download)
Mon Sep 10 18:57:27 2012 UTC (12 years, 10 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65r, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, HEAD
Changes since 1.1: +22 -16 lines
- fix case of only 1 record (e.g. for results of extract_mean.m).

1 gforget 1.1 function [myMean,myAnom]=annualmean(myTimes,myFld,myYear);
2     %object: compute an annual mean for myYear (= 'first','last',n (int) or 'all')
3     % of a gcmfaces or array object (myFld) provided at myTimes (in years)
4     %input: myTimes,myFld,myYear
5     %output: myMean if the corresponding time mean
6     % (optional: myAnom is myFld-myMean)
7     %
8     %algorithm :
9     % - determine the number of records in one year (lYear)
10     % - determine the number of full years (nYears)
11     % - prepare list of records to average (depending on myYear, lYear and nYears)
12     % - in case when lYear<2 we use records as years
13     %
14 gforget 1.2 %by assumption:
15 gforget 1.1 % - the time dimension is last in myFld, and matches the length of myTimes
16    
17     %determine the number of records in one year (lYear)
18     tmp1=mean(myTimes(2:end)-myTimes(1:end-1));
19     lYear=round(1/tmp1);
20    
21     %in case when lYear<2 we use records as years
22     if ~(lYear>=2); lYear=1; myTimes=[1:length(myTimes)]; end;
23    
24     %determine the number of full years (nYears)
25     nYears=floor(length(myTimes)/lYear);
26    
27     %determine records that correspond to myYear, which
28     % may be 'first','last',n (an integer) or 'all'
29     if ischar(myYear);
30 gforget 1.2 if strcmp(myYear,'first');
31     recInAve=[1:lYear];
32     elseif strcmp(myYear,'last');
33     recInAve=[1:lYear]+(nYears-1)*lYear;
34     elseif strcmp(myYear,'all');
35     recInAve=[1:nYears*lYear];
36     else;
37     error('inconsistent specification of myYear');
38     end;
39 gforget 1.1 elseif (myYear>=1)&(myYear<=nYears);
40 gforget 1.2 recInAve=[1:lYear]+(myYear-1)*lYear;
41 gforget 1.1 else;
42 gforget 1.2 error('inconsistent specification of myYear');
43 gforget 1.1 end;
44     nRecs=length(recInAve);
45    
46     %determine last dimension, which need to match the length myTimes
47     if strcmp(class(myFld),'gcmfaces'); nDim=size(myFld{1}); else; nDim=size(myFld); end;
48 gforget 1.2 if length(myTimes)>1;
49     if nDim(end)~=length(myTimes);
50     error('last dimension should match the length of myTimes');
51     end;
52     nDim=length(nDim); tt=''; for jj=1:nDim-1; tt=[tt ':,']; end;
53     else;
54     nDim=length(nDim)+1; tt=''; for jj=1:nDim-1; tt=[tt ':,']; end;
55     end;
56 gforget 1.1
57     %compute time mean:
58     eval(['myMean=mean(myFld(' tt 'recInAve),nDim);']);
59    
60     %compute anomaly:
61 gforget 1.2 if nargout>1;
62     myAnom=myFld-repmat(myMean,[ones(1:nDim-1) length(myTimes)]);
63 gforget 1.1 end;
64    

  ViewVC Help
Powered by ViewVC 1.1.22