1 |
% |
2 |
% $Id: average_ML.m,v 1.3 2006/02/11 05:15:28 edhill Exp $ |
3 |
% |
4 |
% Ed Hill |
5 |
% |
6 |
% Generate the APE ML01--ML07 and ME01--ME07 fields: |
7 |
% |
8 |
% For all facets: |
9 |
% For all time steps: |
10 |
% For all variables: |
11 |
% Create a mask based on THETA == 0.0 |
12 |
% For all variables: |
13 |
% compute partial sum wrt mask |
14 |
% compute number contributing wrt mask |
15 |
% Compute the averages from the partial sums & num contrib |
16 |
% Write netCDF output for this facet: |
17 |
% |
18 |
|
19 |
%====================================================================== |
20 |
|
21 |
ML_files |
22 |
|
23 |
vars = { ... |
24 |
{'u','UVEL','masku'} ... |
25 |
{'v','VVEL','maskv'} ... |
26 |
{'w','WVEL','mask'} ... |
27 |
{'phi','PHIHYD','mask'} ... |
28 |
{'q','SALT','mask'} ... |
29 |
{'rh','RELHUM','mask'} ... |
30 |
{'th','THETA','mask'} ... |
31 |
}; |
32 |
|
33 |
%====================================================================== |
34 |
% |
35 |
% Interpolate to the reference pressure levels and then compute the |
36 |
% derived fields and the temporal sums of all fields on the original |
37 |
% MITgcm grid |
38 |
% |
39 |
disp('Computing Sums') |
40 |
|
41 |
itile = 1; |
42 |
for itile = 1:6 |
43 |
|
44 |
it0 = 0; |
45 |
for iv = 1:length(vars) |
46 |
eval(sprintf('clear %s', vars{iv}{1} )); |
47 |
end |
48 |
|
49 |
fi = 1; |
50 |
for fi = [ 1:length(files) ] |
51 |
|
52 |
fib = 0; |
53 |
|
54 |
fname = sprintf(files{fi}{1},itile); |
55 |
disp([ ' fname = "' fname '"' ]); |
56 |
nc = netcdf(fname, 'nowrite'); |
57 |
times = nc{'T'}(:); |
58 |
|
59 |
it = 1; |
60 |
for it = 1:length(times) |
61 |
|
62 |
for iv = 1:length(vars) |
63 |
eval(sprintf('%s = squeeze(nc{ ''%s'' }(it,:,:,:));', ... |
64 |
vars{iv}{1},vars{iv}{2})); |
65 |
eval(sprintf('mr = max(abs(%s(:)));', vars{iv}{1})); |
66 |
if mr > 1e10 |
67 |
% error('values heading out of range!!!'); |
68 |
fib = 1; |
69 |
end |
70 |
end |
71 |
|
72 |
mask = double(th ~= 0.0); |
73 |
masku = ones(size(th) + [0 0 1]); |
74 |
masku(:,:,1:(end-1)) = masku(:,:,1:(end-1)) .* mask; |
75 |
masku(:,:,2:end ) = masku(:,:,2:end ) .* mask; |
76 |
maskv = ones(size(th) + [0 1 0]); |
77 |
maskv(:,1:(end-1),:) = maskv(:,1:(end-1),:) .* mask; |
78 |
maskv(:,2:end, :) = maskv(:,2:end, :) .* mask; |
79 |
|
80 |
if it0 == 0 |
81 |
it0 = 1; |
82 |
for iv = 1:length(vars) |
83 |
eval(sprintf('%s_ave = zeros(size(%s));', ... |
84 |
vars{iv}{1},vars{iv}{1})); |
85 |
end |
86 |
mask_sum = zeros(size(mask)); |
87 |
masku_sum = zeros(size(masku)); |
88 |
maskv_sum = zeros(size(maskv)); |
89 |
end |
90 |
for iv = 1:length(vars) |
91 |
eval(sprintf('%s_ave = %s_ave + (%s .* %s);', ... |
92 |
vars{iv}{1}, vars{iv}{1}, ... |
93 |
vars{iv}{3}, vars{iv}{1})); |
94 |
end |
95 |
mask_sum = mask_sum + mask; |
96 |
masku_sum = masku_sum + masku; |
97 |
maskv_sum = maskv_sum + maskv; |
98 |
|
99 |
end |
100 |
|
101 |
if fib == 1 |
102 |
disp([ 'BAD :: "' fname '"' ]); |
103 |
end |
104 |
|
105 |
nc = close(nc); |
106 |
|
107 |
end |
108 |
|
109 |
for iv = 1:length(vars) |
110 |
eval(sprintf('%s_ave = %s_ave ./ %s_sum;', ... |
111 |
vars{iv}{1}, vars{iv}{1}, vars{iv}{3} )); |
112 |
end |
113 |
|
114 |
nc = netcdf(sprintf('ML_ave_%d.nc',itile), 'clobber'); |
115 |
|
116 |
nc('T') = 0; |
117 |
nc('Z') = 17; |
118 |
nc('X') = 32; nc('Xp1') = 33; |
119 |
nc('Y') = 32; nc('Yp1') = 33; |
120 |
|
121 |
for iv = 1:length(vars) |
122 |
switch vars{iv}{3} |
123 |
case 'mask' |
124 |
nc{ vars{iv}{2} } = ncdouble( 'T', 'Z', 'Y', 'X' ); |
125 |
case 'masku' |
126 |
nc{ vars{iv}{2} } = ncdouble( 'T', 'Z', 'Y', 'Xp1' ); |
127 |
case 'maskv' |
128 |
nc{ vars{iv}{2} } = ncdouble( 'T', 'Z', 'Yp1', 'X' ); |
129 |
end |
130 |
eval(sprintf('nc{ vars{iv}{2} }(1,:,:,:) = %s_ave;',vars{iv}{1})); |
131 |
end |
132 |
nc{ 'mask_sum' } = ncdouble( 'T', 'Z', 'Y', 'X' ); |
133 |
nc{ 'mask_sum' }(1,:,:,:) = mask_sum; |
134 |
nc{ 'masku_sum' } = ncdouble( 'T', 'Z', 'Y', 'Xp1' ); |
135 |
nc{ 'masku_sum' }(1,:,:,:) = masku_sum; |
136 |
nc{ 'maskv_sum' } = ncdouble( 'T', 'Z', 'Yp1', 'X' ); |
137 |
nc{ 'maskv_sum' }(1,:,:,:) = maskv_sum; |
138 |
nc = close(nc); |
139 |
|
140 |
end |
141 |
|