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

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

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


Revision 1.5 - (hide annotations) (download)
Fri Apr 17 13:06:16 2015 UTC (10 years, 3 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65r, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u
Changes since 1.4: +3 -0 lines
- fix problematic cases

1 gforget 1.4 function [LO,LA,FLD,X,Y]=gcmfaces_section(lons,lats,fld,varargin);
2 gforget 1.1 %purpose: extract a great circle section (defined by two points) from a field
3 gforget 1.2 % or a latitude circle (defined by one latitude)
4 gforget 1.1 %
5     %inputs: lons/lats are the longitude/latitude vector
6     % fld is the gcmfaces field (can incl. depth/time dimensions)
7 gforget 1.2 %optional: sortByLon to sort point by longitude (default = 0 -> sort by latgitude)
8 gforget 1.4 %outputs: LO/LA is the vector of grid points longitude/latitude
9     % FLD is the vector/matrix of grid point values (from fld)
10 gforget 1.1
11 gforget 1.2 if nargin>3; sortByLon=varargin{1}; else; sortByLon=0; end;
12    
13 gforget 1.1 global mygrid;
14    
15 gforget 1.2 if length(lats)==2;
16 gforget 1.5 if lats(1)==-90&lats(2)==90;
17     error('need to specify latitude range under 180');
18     end;
19 gforget 1.2 line_cur=gcmfaces_lines_transp(lons,lats,{'tmp'});
20     elseif length(lats)==1;
21     tmp1=abs(mygrid.LATS-lats);
22     tmp2=find(tmp1==min(tmp1));
23     tmp2=tmp2(1);
24     line_cur=mygrid.LATS_MASKS(tmp2);
25     else;
26     error('wrong specification of lons,lats');
27     end;
28     secP=find(line_cur.mskCedge==1);
29     secN=length(secP);
30 gforget 1.1
31     %lon/lat vectors:
32 gforget 1.4 LO=zeros(secN,1); LA=zeros(secN,1);
33 gforget 1.1 %sections:
34 gforget 1.4 n3=max(size(fld{1},3),1); n4=max(size(fld{1},4),1); FLD=zeros(secN,n3,n4);
35 gforget 1.1 %counter:
36     ii0=0;
37     for ff=1:secP.nFaces;
38     tmp0=secP{ff}; [tmpI,tmpJ]=ind2sub(size(mygrid.XC{ff}),tmp0);
39 gforget 1.4 tmp1=mygrid.XC{ff}; for ii=1:length(tmpI); LO(ii+ii0)=tmp1(tmpI(ii),tmpJ(ii)); end;
40     tmp1=mygrid.YC{ff}; for ii=1:length(tmpI); LA(ii+ii0)=tmp1(tmpI(ii),tmpJ(ii)); end;
41     tmp1=fld{ff}; for ii=1:length(tmpI); FLD(ii+ii0,:,:)=squeeze(tmp1(tmpI(ii),tmpJ(ii),:,:)); end;
42 gforget 1.1 ii0=ii0+length(tmpI);
43     end;
44    
45 gforget 1.2 %sort according to increasing latitude or longitude:
46     if sortByLon;
47 gforget 1.4 [tmp1,ii]=sort(LO); %sort according to increasing longitude
48 gforget 1.2 else;
49 gforget 1.4 [tmp1,ii]=sort(LA); %sort according to increasing latitude
50 gforget 1.2 end;
51 gforget 1.4 LO=LO(ii); LA=LA(ii); FLD=FLD(ii,:,:);
52 gforget 1.1
53 gforget 1.4 %output axes for ploting with pcolor
54     nr=length(mygrid.RC);
55     nx=length(LO);
56     X=[]; Y=[];
57     if size(FLD,2)==nr&sortByLon;
58     X=LO'*ones(1,nr);
59     Y=ones(nx,1)*mygrid.RC';
60     elseif size(FLD,2)==nr&~sortByLon;
61     X=LA'*ones(1,nr);
62     Y=ones(nx,1)*mygrid.RC';
63     elseif size(FLD,1)==nr&sortByLon;
64     X=LO';
65     Y=ones(nx,1);
66     elseif size(FLD,2)==1&~sortByLon;
67     X=LA';
68     Y=ones(nx,1);
69     end;
70    

  ViewVC Help
Powered by ViewVC 1.1.22