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

Contents of /MITgcm_contrib/enderton/PeriodicCoupling/CalcOcnForcingFields.m

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


Revision 1.4 - (show annotations) (download)
Fri Nov 25 18:28:01 2005 UTC (19 years, 7 months ago) by enderton
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +49 -23 lines
Update periodic coupling script to deal with land

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

  ViewVC Help
Powered by ViewVC 1.1.22