1 |
molod |
1.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 |
|
|
|