1 |
gforget |
1.4 |
function [alldiag,alldiag_anom]=alldiag_load(dirMat,nameMat,timeStep,varargin); |
2 |
gforget |
1.3 |
%object: load single record files off basic_diags_ecco, and assemble time records |
3 |
|
|
%inputs: dirMat is the model run sub-directory where the matlab files are (e.g. 'mat/') |
4 |
gforget |
1.4 |
% nameMat is the mat files name (e.g. 'basic_diags_ecco_A_*.mat') |
5 |
|
|
% timeStep is the model time step |
6 |
|
|
%optional: nameDiag is the name of the diagnostic of interest |
7 |
|
|
|
8 |
|
|
if nargin>3; nameDiag=varargin{1}; else; nameDiag=''; end; |
9 |
gforget |
1.1 |
|
10 |
|
|
%get list of files |
11 |
gforget |
1.3 |
listFiles=dir([dirMat '/' nameMat]); |
12 |
gforget |
1.1 |
%get time steps and sort listFiles |
13 |
gforget |
1.3 |
listSteps=[]; for tt=1:length(listFiles); |
14 |
|
|
nn=listFiles(tt).name; ii=strfind(nn,'_'); ii=ii(end); listSteps=[listSteps;str2num(nn(ii+1:end-4))]; end; |
15 |
gforget |
1.1 |
[listSteps,ii]=sort(listSteps); |
16 |
|
|
listFiles=listFiles(ii); |
17 |
|
|
%compute actual times |
18 |
|
|
nTimes=length(listSteps); |
19 |
|
|
listTimes=listSteps*timeStep/86400; |
20 |
|
|
%initialize alldiag |
21 |
gforget |
1.3 |
alldiag=open([dirMat listFiles(1).name]); |
22 |
gforget |
1.1 |
listDiags=fieldnames(alldiag); |
23 |
gforget |
1.4 |
%restrict list of diags to load |
24 |
|
|
if ~isempty(nameDiag); listDiags={nameDiag}; end; |
25 |
gforget |
1.1 |
%loop and concatenate |
26 |
|
|
for tt=2:length(listSteps); |
27 |
gforget |
1.3 |
tmpdiag=open([dirMat listFiles(tt).name]); |
28 |
gforget |
1.1 |
for ii=1:length(listDiags); |
29 |
|
|
%get data: |
30 |
|
|
eval(['tmp1=tmpdiag.' listDiags{ii} '; tmp2=alldiag.' listDiags{ii} ';']); |
31 |
|
|
%determine the time dimension: |
32 |
|
|
if strcmp(class(tmp1),'gcmfaces'); nDim=size(tmp1{1}); else; nDim=size(tmp1); end; |
33 |
|
|
if ~isempty(find(nDim==0)); nDim=0; |
34 |
|
|
elseif nDim(end)==1; nDim=length(nDim)-1; |
35 |
|
|
else; nDim=length(nDim); |
36 |
|
|
end; |
37 |
|
|
%concatenate along the time dimension: |
38 |
|
|
if nDim>0; tmp2=cat(nDim+1,tmp2,tmp1); eval(['alldiag.' listDiags{ii} '=tmp2;']); end; |
39 |
|
|
end; |
40 |
|
|
end; |
41 |
|
|
%clean empty diags up |
42 |
|
|
for ii=1:length(listDiags); |
43 |
|
|
eval(['tmp1=isempty(alldiag.' listDiags{ii} ');']); |
44 |
|
|
if tmp1; alldiag=rmfield(alldiag,listDiags{ii}); end; |
45 |
|
|
end; |
46 |
|
|
%complement alldiag |
47 |
|
|
alldiag.listSteps=listSteps; |
48 |
|
|
alldiag.listTimes=listTimes; |
49 |
|
|
alldiag.listDiags=listDiags; |
50 |
gforget |
1.2 |
%subtract monthly climatology: |
51 |
gforget |
1.3 |
if length(listSteps)>36; |
52 |
|
|
alldiag_anom=alldiag; |
53 |
|
|
mm=mod([1:length(listSteps)],12); mm(mm==0)=12; |
54 |
|
|
for ii=1:length(listDiags); |
55 |
|
|
tmp1=getfield(alldiag,listDiags{ii}); |
56 |
|
|
if strcmp(class(tmp1),'gcmfaces'); nDim=size(tmp1{1}); else; nDim=size(tmp1); end; |
57 |
|
|
nDim=length(nDim); tt=''; for jj=1:nDim-1; tt=[tt ':,']; end; |
58 |
|
|
eval(['tmp2=tmp1(' tt '1:12);']); |
59 |
|
|
for jj=1:12; |
60 |
|
|
JJ=find(mm==jj); eval(['tmp2(' tt 'jj)=mean(tmp1(' tt 'JJ),nDim);']); |
61 |
|
|
end; |
62 |
|
|
eval(['tmp1=tmp1-tmp2(' tt 'mm);']); |
63 |
|
|
eval(['alldiag_anom.' listDiags{ii} '=tmp1;']); |
64 |
gforget |
1.2 |
end; |
65 |
gforget |
1.3 |
else; |
66 |
|
|
for ii=1:length(listDiags); eval(['alldiag_anom.' listDiags{ii} '=alldiag.' listDiags{ii} ';']); end; |
67 |
gforget |
1.2 |
end; |
68 |
|
|
|
69 |
gforget |
1.1 |
|
70 |
gforget |
1.3 |
|
71 |
|
|
|