1 |
mlosch |
1.1 |
function [To]=xyexpand(Tin,niter) |
2 |
|
|
% Tout=xyexpand(Tin,3); |
3 |
|
|
% |
4 |
|
|
% This function takes 2D input and replaces any NaN |
5 |
|
|
% neighbouring any real numbers with the average of |
6 |
|
|
% those numbers. This procedure is repeated niter |
7 |
|
|
% times. Note that the ocean/land volume ratio expands |
8 |
|
|
% rapidly with each iteration. |
9 |
|
|
% |
10 |
|
|
% In short, this is a gap-filler and extrapolator of |
11 |
|
|
% rudimentary order applied to horizontal slices. |
12 |
|
|
% |
13 |
|
|
% Created 08/15/99 by adcroft@mit.edu |
14 |
|
|
% Modified 11/11/99 by adcroft@mit.edu |
15 |
|
|
% Maintained by adcroft@mit.edu, abiastoch@ucsd.edu |
16 |
|
|
|
17 |
|
|
[nx,ny]=size(Tin); |
18 |
|
|
ip=[2:nx 1]; |
19 |
|
|
im=[nx 1:nx-1]; |
20 |
|
|
jp=[2:ny ny]; |
21 |
|
|
jm=[1 1:ny-1]; |
22 |
|
|
|
23 |
|
|
T=Tin; |
24 |
|
|
for iter=1:niter, |
25 |
|
|
|
26 |
|
|
msk=ones(nx,ny); |
27 |
|
|
L=isnan(T); |
28 |
|
|
msk( L )=0; |
29 |
|
|
|
30 |
|
|
To=T; |
31 |
|
|
To( L )=0; |
32 |
|
|
|
33 |
|
|
cnt=msk(im,:)+msk(ip,:)+msk(:,jm)+msk(:,jp); |
34 |
|
|
cnt( find(cnt==0) )=1; |
35 |
|
|
Tbr=(To(im,:)+To(ip,:)+To(:,jm)+To(:,jp))./cnt; |
36 |
|
|
|
37 |
|
|
To( L )=Tbr( L ); |
38 |
|
|
|
39 |
|
|
To( find(To==0) )=NaN; |
40 |
|
|
|
41 |
|
|
T=To; |
42 |
|
|
end |