1 |
gforget |
1.1 |
function []=extend_xx(dirIn,dirOut,ndayIn,nyearOut); |
2 |
|
|
%object: extend atmospheric controls to additional years |
3 |
|
|
%inputs: dirIn is the input directory |
4 |
|
|
% dirOut is the output directory |
5 |
|
|
% ndayIn is the control vector frecuency, in days |
6 |
|
|
% nyearOut is the extended number of years |
7 |
|
|
% |
8 |
|
|
%note: we will take the time mean seasonal cycle, and transition |
9 |
|
|
% to it linearly over the last year that was already covered |
10 |
|
|
|
11 |
|
|
gcmfaces_global; |
12 |
|
|
|
13 |
|
|
%first copy time independent controls |
14 |
|
|
listCp={'diffkr','kapgm','kapredi','salt','theta'}; |
15 |
|
|
for ii=1:length(listCp); |
16 |
|
|
fileIn=dir([dirIn 'ADXXfiles/xx_' listCp{ii} '.00*data']); |
17 |
gforget |
1.2 |
copyfile([dirIn 'ADXXfiles/' fileIn.name] , [dirOut fileIn.name]); |
18 |
gforget |
1.1 |
end; |
19 |
|
|
|
20 |
|
|
%then extend the time dependent ones |
21 |
|
|
for ii=1:7; |
22 |
|
|
switch ii; |
23 |
|
|
case 1; xxName='atemp'; |
24 |
|
|
case 2; xxName='aqh'; |
25 |
|
|
case 3; xxName='tauu'; |
26 |
|
|
case 4; xxName='tauv'; |
27 |
|
|
case 5; xxName='lwdown'; |
28 |
|
|
case 6; xxName='swdown'; |
29 |
|
|
case 7; xxName='precip'; |
30 |
|
|
end; |
31 |
|
|
|
32 |
|
|
%read model cost output |
33 |
|
|
fld_xx=rdmds2gcmfaces([dirIn 'ADXXfiles/xx_' xxName '.00*']); |
34 |
|
|
|
35 |
|
|
%determine already covered time period |
36 |
|
|
nrec=size(fld_xx{1},3); |
37 |
|
|
nyearIn=nrec*ndayIn/365; |
38 |
|
|
nrecInOneYear=round(365/ndayIn); |
39 |
|
|
nrecOut=nrecInOneYear*nyearOut+1; |
40 |
|
|
|
41 |
|
|
%determine seasonal cycle |
42 |
|
|
season_xx=0*fld_xx(:,:,1:nrecInOneYear); |
43 |
|
|
for tt=1:nrecInOneYear; |
44 |
|
|
season_xx(:,:,tt)=mean(fld_xx(:,:,tt:nrecInOneYear:nrec),3); |
45 |
|
|
end; |
46 |
|
|
|
47 |
gforget |
1.3 |
if nyearOut==0; |
48 |
|
|
more_xx=convert2gcmfaces(season_xx); |
49 |
|
|
else; |
50 |
gforget |
1.1 |
%determine transition factor (fld_xx -> season_xx) |
51 |
|
|
nrec0=nrecInOneYear*(floor(nyearIn)-1); |
52 |
|
|
fac=([1:nrecOut]-nrec0)/(nrec-nrec0); |
53 |
|
|
fac=max(min(fac,1),0); |
54 |
|
|
|
55 |
|
|
%build extended time series |
56 |
|
|
more_xx=zeros(fld_xx(:,:,1),nrecOut); |
57 |
|
|
more_xx(:,:,1:nrec0)=fld_xx(:,:,1:nrec0); |
58 |
|
|
for tt=nrec0+1:nrecOut; |
59 |
|
|
ttt=mod(tt,nrecInOneYear); |
60 |
|
|
if ttt==0; ttt=nrecInOneYear; end; |
61 |
|
|
if tt<nrec; |
62 |
|
|
more_xx(:,:,tt)=fac(tt)*season_xx(:,:,ttt)+(1-fac(tt))*fld_xx(:,:,tt); |
63 |
|
|
else; |
64 |
|
|
more_xx(:,:,tt)=season_xx(:,:,ttt); |
65 |
|
|
end; |
66 |
|
|
end; |
67 |
|
|
|
68 |
|
|
%to check the transition: |
69 |
|
|
tmp1=convert2array(fld_xx); tmp11=squeeze(mean(tmp1,1)); |
70 |
|
|
tmp2=convert2array(more_xx); tmp22=squeeze(mean(tmp2,1)); |
71 |
gforget |
1.3 |
more_xx=convert2gcmfaces(more_xx); |
72 |
|
|
end; |
73 |
gforget |
1.1 |
|
74 |
|
|
%save to file |
75 |
|
|
fileIn=dir([dirIn 'ADXXfiles/xx_' xxName '.00*data']); |
76 |
|
|
write2file([dirOut fileIn.name],more_xx); |
77 |
|
|
|
78 |
|
|
end;%for ii=1:6; |
79 |
|
|
|