/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_calc/gcmfaces_bindata.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_calc/gcmfaces_bindata.m

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


Revision 1.6 - (hide annotations) (download)
Wed May 23 15:34:30 2012 UTC (13 years, 2 months ago) by gforget
Branch: MAIN
Changes since 1.5: +39 -18 lines
- switch from delaunay/dsearch (old matlab) to DelaunayTri/nearestNeighbor (new matlab).

1 gforget 1.1 function [varargout]=gcmfaces_bindata(varargin);
2 gforget 1.4 %object: compute delaunay triangulation, then bin averaging
3     %inputs: are all optional, triggering different sections of the code
4     % if none then generate the very triangulation (myTri)
5     % if lon,lat vectors, then compute closest neighbor index(ices)
6     % if lon,lat,obs vectors, then further do the bin average
7     %outputs: are all optional, triggering different sections of the code
8     % if OBS then return the bin aberage
9     % if OBS,NOBS then return the bin sum and count
10     %
11     %note: should mytri become part of mygrid ?
12 gforget 1.1
13 gforget 1.2 warning('off','MATLAB:dsearch:DeprecatedFunction');
14    
15 gforget 1.6 global mygrid mytri myenv;
16    
17     if ~isfield(myenv,'useDelaunayTri');
18     myenv.useDelaunayTri=~isempty(which('DelaunayTri'));
19     end;
20 gforget 1.1
21     if nargin==0;
22 gforget 1.5 %generate delaunay triangulation:
23     XC=convert2array(mygrid.XC);
24     YC=convert2array(mygrid.YC);
25 gforget 1.6 if myenv.useDelaunayTri;
26     %the new way, using DelaunayTri&nearestNeighbor
27     mytri=[];
28     kk=find(~isnan(XC)); mytri.kk=kk;
29     [mytri.ii,mytri.jj]=find(~isnan(XC));
30     mytri.TRI=DelaunayTri(XC(kk),YC(kk));
31     else;
32     %the old way, using delaunay&dsearch
33     mytri=[];
34     %needed so that we do not loose data
35     XC(isnan(XC))=270;
36     YC(isnan(YC))=180;
37     %
38     TRI=delaunay(XC,YC); nxy = prod(size(XC));
39     Stri=sparse(TRI(:,[1 1 2 2 3 3]),TRI(:,[2 3 1 3 1 2]),1,nxy,nxy);
40     %
41     mytri.XC=XC; mytri.YC=YC; mytri.TRI=TRI; mytri.Stri=Stri;
42     %
43     tmp1=XC; tmp1(:)=1; mytri.kk=find(tmp1);
44     [mytri.ii,mytri.jj]=find(tmp1);
45     %usage: kk=dsearch(mytri.XC,mytri.YC,mytri.TRI,lon,lat,mytri.Stri);
46     % where lon and lat are vector of position
47     end
48 gforget 1.1 elseif nargin==2;
49 gforget 1.5 %compute grid point vector associated with lon/lat vectors
50     lon=varargin{1}; lat=varargin{2};
51 gforget 1.6 if myenv.useDelaunayTri;
52     kk = mytri.TRI.nearestNeighbor(lon,lat);
53     else;
54     kk=dsearch(mytri.XC,mytri.YC,mytri.TRI,lon,lat,mytri.Stri);
55     end;
56 gforget 1.5 if nargout==1;
57     varargout={mytri.kk(kk)};
58     elseif nargout==2;
59     ii=mytri.ii(kk); jj=mytri.jj(kk);
60     varargout={ii}; varargout(2)={jj};
61     else;
62     error('wrong output choice');
63     end;
64 gforget 1.1 elseif nargin==3;
65 gforget 1.5 %do the bin average (if nargout==1) or the bin sum+count (if nargout==2)
66     lon=varargin{1}; lat=varargin{2}; obs=varargin{3};
67     ii=find(~isnan(obs)); lon=lon(ii); lat=lat(ii); obs=obs(ii);
68 gforget 1.6 if myenv.useDelaunayTri;
69     kk = mytri.TRI.nearestNeighbor(lon,lat);
70     else;
71     kk=dsearch(mytri.XC,mytri.YC,mytri.TRI,lon,lat,mytri.Stri);
72     end;
73 gforget 1.5 kk=mytri.kk(kk);
74    
75 gforget 1.6 OBS=convert2array(mygrid.XC);
76 gforget 1.5 OBS(:)=0; NOBS=OBS;
77     for k=1:length(kk)
78     NOBS(kk(k))=NOBS(kk(k))+1;
79     OBS(kk(k))=OBS(kk(k))+obs(k);
80     end % k=1:length(kk)
81    
82     if nargout==1;%output bin average
83     in=find(NOBS); OBS(in)=OBS(in)./NOBS(in);
84     in=find(~NOBS); OBS(in)=NaN; NOBS(in)=NaN;
85     varargout={convert2array(OBS)};
86     elseif nargout==2;%output bin sum+count
87     OBS=convert2array(OBS);
88     NOBS=convert2array(NOBS);
89     varargout={OBS}; varargout(2)={NOBS};
90     else;
91     error('wrong output choice');
92     end;
93    
94 gforget 1.1 else;
95 gforget 1.5 error('wrong input choice');
96 gforget 1.1 end;
97    
98 gforget 1.2 warning('on','MATLAB:dsearch:DeprecatedFunction');
99 gforget 1.1
100    
101    

  ViewVC Help
Powered by ViewVC 1.1.22