/[MITgcm]/MITgcm_contrib/enderton/PeriodicCoupling/MakePcForcing.m
ViewVC logotype

Annotation of /MITgcm_contrib/enderton/PeriodicCoupling/MakePcForcing.m

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


Revision 1.2 - (hide annotations) (download)
Thu Mar 9 00:23:38 2006 UTC (19 years, 4 months ago) by enderton
Branch: MAIN
Changes since 1.1: +13 -8 lines
Created an iteration check to make sure that coupled and atmospheric data sets used to create ocean only forcing files have matching iterations stamps

1 enderton 1.2 function MakePcForcing(cplFiles,atmFiles,gridFiles,prevFocnFiles,...
2     period,outDir,FocnRoot,focnRoot,iter,...
3 enderton 1.1 dtC,gWeight,FocnOnly,InspectFocn,Inspectfocn)
4    
5     % Make fields for forcing ocean component of periodic coupling.
6    
7     rhofw = 1000.;
8    
9     fieldscpl = {'TXtave' ,'TYtave' ,'FWtave' ,'HFtave' };
10     fieldsatm = {'THETA' ,'ALBVISDF','RADSWG' ,...
11     'DWNLWG' ,'TS' ,'QS' ,...
12     'WINDS' ,'PRECON' ,'PRECLS'};
13     fieldsall = {'TXtave' ,'TYtave' ,'FWtave' ,'HFtave' ,...
14     'THETA' ,'DWNLWG' ,'TS' ,'QS' ,...
15     'WINDS' ,'DWNSWG' ,'PREC' };
16    
17     warning off MATLAB:MKDIR:DirectoryExists;
18     mkdir(outDir);
19    
20    
21     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22     % Load Data %
23     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24    
25 enderton 1.2 datacpl = rdmnc(cplFiles,'iter','HFtave','TXtave','TYtave','FWtave','T');
26     dataatm = rdmnc(atmFiles,'iter','THETA' ,'ALBVISDF','RADSWG' ,...
27     'DWNLWG' ,'TS' ,'QS' ,...
28     'WINDS' ,'PRECON' ,'PRECLS','T');
29     datagrd = rdmnc(gridFiles,'rA','XG','YG','XC','YC','HFacC');
30 enderton 1.1 % save('DataPerCpl.mat','datacpl','dataatm','datagrd');
31 enderton 1.2 % load('DataPerCpl.mat');
32 enderton 1.1 nc = size(datagrd.rA,2);
33     RAC = datagrd.rA;
34     mask = datagrd.HFacC(:,:,1);
35     imask = find(mask);
36     XC = datagrd.XC; XG = datagrd.XG(1:size(RAC,1),1:size(RAC,2));
37     YC = datagrd.YC; YG = datagrd.YG(1:size(RAC,1),1:size(RAC,2));
38    
39     % If a new focn is to be calculated, the old Focn must be loaded.
40     if ~FocnOnly
41     for ifield=1:length(fieldsall)
42     fid=fopen([prevFocnFiles,'/',FocnRoot,...
43     '.',fieldsall{ifield},'.bin.',...
44     num2str(period-1)],'r','b');
45     dataFocnOld.(fieldsall{ifield}) = ...
46     reshape(fread(fid,'real*8'),size(RAC));
47     fclose(fid);
48     end
49     end
50     % field = 'HFtave';
51     % merccube_mod(XG,YG,dataFocnOld.(field));
52     % aaa = dataFocnOld.(field)(:,:,end);
53     % sum(aaa(:).*RAC(:))./sum(RAC(:))
54    
55    
56     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57     % Select Coupled Field Data %
58     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59    
60 enderton 1.2 if ~isequal(datacpl.iter,dataatm.iter./8)
61     disp('datacpl.iter'); datacpl.iter
62     disp('dataatm.iter/8'); dataatm.iter./8
63     error('Iterations for coupled and atmospheric data do not match.');
64     end
65 enderton 1.1 test = ismember(iter,datacpl.iter);
66     index = ismember(datacpl.iter,iter);
67     if ~isempty(find(test==0))
68     error('Specified indecies not present in cpl_tave.* files.');
69     end
70     for ifield = 1:length(fieldscpl)
71     data.(fieldscpl{ifield}) = ...
72     datacpl.(fieldscpl{ifield})(1:6*nc,1:nc,index);
73     end
74     for ifield = 1:length(fieldsatm)
75     data.(fieldsatm{ifield}) = ...
76     dataatm.(fieldsatm{ifield})(1:6*nc,1:nc,index);
77     end
78     % field = 'PREC';
79     % merccube_mod(XG,YG,dataCplSelect.(field));
80     % aaa = dataCplSelect.(field)(:,:,end);
81     % sum(aaa(:).*RAC(:))./sum(RAC(:))
82    
83    
84     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85     % Prepare Focn %
86     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87    
88     % What if it is not in year increments? Need a more sophisticated
89     % treatment of finding Focn. Should compute monthly mean before. Test
90     % with various sorts of coupled field outputs.
91     for ifield = 1:length(fieldsall)
92     if isequal(fieldsall{ifield},'PREC')
93     FocnNew = mask.*( mean(data.PRECON,3) ...
94     +mean(data.PRECLS,3))./(1000.*rhofw);
95     elseif isequal(fieldsall{ifield},'DWNSWG')
96     FocnNew = mask.*mean(data.RADSWG,3)./(1-mean(data.ALBVISDF,3));
97     else
98     FocnNew = mask.*mean(data.(fieldsall{ifield}),3);
99     end
100     if FocnOnly
101     Focn = FocnNew;
102     else
103     FocnOld = mask.*dataFocnOld.(fieldsall{ifield});
104     Focn = (gWeight*FocnOld + FocnNew)/(gWeight+1);
105     end
106     if isequal(fieldsall{ifield},'FWtave')
107     offset = sum(Focn(imask).*RAC(imask))./sum(RAC(imask));
108     Focn(imask) = Focn(imask) - offset;
109     end
110     dataFocn.(fieldsall{ifield}) = Focn;
111     fid=fopen([outDir,'/',FocnRoot,'.',...
112     fieldsall{ifield},'.bin.',...
113     num2str(period)],'w','b');
114     fwrite(fid,Focn,'real*8');
115     fclose(fid);
116     end
117     % field = 'PREC';
118     % merccube_mod(XG,YG,dataFocn.(field));
119     % aaa = dataFocn.(field)(:,:,end);
120     % sum(aaa(:).*RAC(:))./sum(RAC(:))
121    
122    
123     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124     % Prepare focn as needed %
125     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
126    
127     if ~FocnOnly
128    
129     years = iter.*dtC./31104000;
130     yrfrc = rem(years,floor(years));
131     yrfrc(yrfrc == 0) = 1;
132     uyrfrc = sort(unique(yrfrc));
133     disp(['Cpl. data instances: ',num2str(length(yrfrc))]);
134     disp(['Cpl. data per year forcing: ',num2str(length(uyrfrc))]);
135    
136     for ifield = 1:length(fieldsall)
137    
138     % Make yearly forcing file (usually twelve months).
139     if isequal(fieldsall{ifield},'PREC')
140     focnFull = (data.PRECON+data.PRECLS)./(1000.*rhofw);
141     elseif isequal(fieldsall{ifield},'DWNSWG')
142     focnFull = (data.RADSWG)./(1-data.ALBVISDF);
143     else
144     focnFull = data.(fieldsall{ifield});
145     end
146     focn = NaN.*zeros([size(RAC,1),size(RAC,2),length(uyrfrc)]);
147     for itime = 1:length(uyrfrc)
148     index = find(uyrfrc(itime) == yrfrc);
149     focn(:,:,itime) = mean(focnFull(:,:,index),3);
150     end
151     if ~isempty(find(isnan(focn(:))))
152     error('NaNs in ocean forcing files!!');
153     end
154    
155     % Account for bathymetry.
156     for itime = 1:size(focn,3)
157     focn(:,:,itime) = mask.*focn(:,:,itime);
158     end
159    
160     % Remove time mean from focn, add Focn
161     SubMean = mean(focn,3);
162     AddMean = dataFocn.(fieldsall{ifield});
163     for itime = 1:size(focn,3)
164     focn(:,:,itime) = focn(:,:,itime) - SubMean + AddMean;
165     end
166    
167     focnmean = mean(focn,3);
168     focnmean = sum(focnmean(:).*RAC(:))./sum(RAC(:));
169     disp([fieldsall{ifield},' mean: ',num2str(focnmean)]);
170    
171     fid=fopen([outDir,'/',focnRoot,'.',...
172     fieldsall{ifield},'.bin'],'w','b');
173     fwrite(fid,focn,'real*8');
174     fclose(fid);
175    
176     aaa = mean(focn,3);
177     disp(['Number of land cells that do not have zero values: ',...
178     num2str(length(find(aaa(find(~mask))~=0)))]);
179     end
180     end
181    
182    
183     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
184     % Inspect Focn %
185     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
186    
187     if InspectFocn
188     for ifield = 1:length(fieldsall)
189     fid=fopen([outDir,'/',FocnRoot,'.',...
190     fieldsall{ifield},'.bin.',...
191     num2str(period)],'r','b');
192     Focn = reshape(fread(fid,'real*8'),size(RAC));
193     fclose(fid);
194     figure; merccube_mod(XG,YG,Focn); colorbar;
195     title(fieldsall{ifield});
196     end
197     end
198    
199     if Inspectfocn
200     for ifield = 1:length(fieldsall)
201     fid=fopen([outDir,'/',focnRoot,'.',...
202     fieldsall{ifield},'.bin'],...
203     'r','b');
204     focn = reshape(fread(fid,'real*8'),[size(RAC),12]);
205     fclose(fid);
206     figure;
207     crange = [min(focn(:)),max(focn(:))];
208     for ii = 1:size(focn,3)
209     subplot(4,3,ii); merccube_mod(XG,YG,focn(:,:,ii));
210     shading flat; caxis(crange); colorbar;
211     title([fieldsall{ifield},' month ',num2str(ii)]);
212     end
213     end
214     end

  ViewVC Help
Powered by ViewVC 1.1.22