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.5 |
if length(listSteps)>=36; |
52 |
|
|
nFullYears=12*floor(length(listTimes)/12); |
53 |
gforget |
1.3 |
alldiag_anom=alldiag; |
54 |
gforget |
1.5 |
mm=ones(length(listTimes),1); |
55 |
gforget |
1.3 |
for ii=1:length(listDiags); |
56 |
|
|
tmp1=getfield(alldiag,listDiags{ii}); |
57 |
|
|
if strcmp(class(tmp1),'gcmfaces'); nDim=size(tmp1{1}); else; nDim=size(tmp1); end; |
58 |
|
|
nDim=length(nDim); tt=''; for jj=1:nDim-1; tt=[tt ':,']; end; |
59 |
gforget |
1.5 |
eval(['tmp2=mean(tmp1(' tt '1:nFullYears),nDim);']); |
60 |
gforget |
1.3 |
eval(['tmp1=tmp1-tmp2(' tt 'mm);']); |
61 |
|
|
eval(['alldiag_anom.' listDiags{ii} '=tmp1;']); |
62 |
gforget |
1.2 |
end; |
63 |
gforget |
1.3 |
else; |
64 |
|
|
for ii=1:length(listDiags); eval(['alldiag_anom.' listDiags{ii} '=alldiag.' listDiags{ii} ';']); end; |
65 |
gforget |
1.2 |
end; |
66 |
|
|
|
67 |
gforget |
1.1 |
|
68 |
gforget |
1.3 |
|
69 |
|
|
|