1 |
gforget |
1.2 |
function [alldiag,alldiag_anom]=alldiag_load(dirIn,suffIn,timeStep); |
2 |
gforget |
1.1 |
|
3 |
|
|
%get list of files |
4 |
|
|
listFiles=dir([dirIn '/diags_' suffIn '*.mat']); |
5 |
|
|
%get time steps and sort listFiles |
6 |
|
|
listSteps=[]; for tt=1:length(listFiles); listSteps=[listSteps;str2num(listFiles(tt).name(13:end-4))]; end; |
7 |
|
|
[listSteps,ii]=sort(listSteps); |
8 |
|
|
listFiles=listFiles(ii); |
9 |
|
|
%compute actual times |
10 |
|
|
nTimes=length(listSteps); |
11 |
|
|
listTimes=listSteps*timeStep/86400; |
12 |
|
|
%initialize alldiag |
13 |
|
|
alldiag=open([dirIn listFiles(1).name]); |
14 |
|
|
listDiags=fieldnames(alldiag); |
15 |
|
|
%loop and concatenate |
16 |
|
|
for tt=2:length(listSteps); |
17 |
|
|
tmpdiag=open([dirIn listFiles(tt).name]); |
18 |
|
|
for ii=1:length(listDiags); |
19 |
|
|
%get data: |
20 |
|
|
eval(['tmp1=tmpdiag.' listDiags{ii} '; tmp2=alldiag.' listDiags{ii} ';']); |
21 |
|
|
%determine the time dimension: |
22 |
|
|
if strcmp(class(tmp1),'gcmfaces'); nDim=size(tmp1{1}); else; nDim=size(tmp1); end; |
23 |
|
|
if ~isempty(find(nDim==0)); nDim=0; |
24 |
|
|
elseif nDim(end)==1; nDim=length(nDim)-1; |
25 |
|
|
else; nDim=length(nDim); |
26 |
|
|
end; |
27 |
|
|
%concatenate along the time dimension: |
28 |
|
|
if nDim>0; tmp2=cat(nDim+1,tmp2,tmp1); eval(['alldiag.' listDiags{ii} '=tmp2;']); end; |
29 |
|
|
end; |
30 |
|
|
end; |
31 |
|
|
%clean empty diags up |
32 |
|
|
for ii=1:length(listDiags); |
33 |
|
|
eval(['tmp1=isempty(alldiag.' listDiags{ii} ');']); |
34 |
|
|
if tmp1; alldiag=rmfield(alldiag,listDiags{ii}); end; |
35 |
|
|
end; |
36 |
|
|
%complement alldiag |
37 |
|
|
listDiags=fieldnames(alldiag); |
38 |
|
|
alldiag.listSteps=listSteps; |
39 |
|
|
alldiag.listTimes=listTimes; |
40 |
|
|
alldiag.listDiags=listDiags; |
41 |
gforget |
1.2 |
%subtract monthly climatology: |
42 |
|
|
alldiag_anom=alldiag; |
43 |
|
|
mm=mod([1:length(listSteps)],12); mm(mm==0)=12; |
44 |
|
|
for ii=1:length(listDiags); |
45 |
|
|
tmp1=getfield(alldiag,listDiags{ii}); |
46 |
|
|
if strcmp(class(tmp1),'gcmfaces'); nDim=size(tmp1{1}); else; nDim=size(tmp1); end; |
47 |
|
|
nDim=length(nDim); tt=''; for jj=1:nDim-1; tt=[tt ':,']; end; |
48 |
|
|
eval(['tmp2=tmp1(' tt '1:12);']); |
49 |
|
|
for jj=1:12; |
50 |
|
|
JJ=find(mm==jj); eval(['tmp2(' tt 'jj)=mean(tmp1(' tt 'JJ),nDim);']); |
51 |
|
|
end; |
52 |
|
|
eval(['tmp1=tmp1-tmp2(' tt 'mm);']); |
53 |
|
|
eval(['alldiag_anom.' listDiags{ii} '=tmp1;']); |
54 |
|
|
end; |
55 |
|
|
|
56 |
gforget |
1.1 |
|