/[MITgcm]/MITgcm_contrib/enderton/Diagnostics/DiagUtility/calc_Bolus_CS.m
ViewVC logotype

Annotation of /MITgcm_contrib/enderton/Diagnostics/DiagUtility/calc_Bolus_CS.m

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


Revision 1.1 - (hide annotations) (download)
Mon Jan 31 15:43:28 2005 UTC (20 years, 5 months ago) by enderton
Branch: MAIN
CVS Tags: HEAD
 o Initial check in.

1 enderton 1.1 function [ub,vb]=calc_Bolus_CS(rAc,dXc,dYc,dXg,dYg,delR,kwx,kwy,hFacW,hFacS);
2     % [ub,vb]=calc_Bolus_CS(rAc,dXc,dYc,dXg,dYg,delR,kwx,kwy,hFacW,hFacS);
3     %-- GM-Bolus transp. :
4     % from Kwx & Kwy (Skew-Flx => /2),
5     % compute Volume Stream function psiX,psiY above uVel.vVel
6     % (at interface between 2 levels), units=m^3/s :
7     % psiX=(rAc*kwx)_i / dXc ; psiY=(rAc*kwy)_j / dYc ;
8     % and then the bolus velocity (m/s):
9     % ub = d_k(psiX)/dYg/drF ; vb = d_k(psiY)/dXg/drF ;
10     %---------------------------------------------------------------------
11     % set_axis
12     [ncx,nc]=size(rAc); nr=length(delR);
13     nPg=6*nc*nc; ncp=nc+1;
14    
15     rAu=dXc.*dYg; rAu=reshape(rAu,nPg,1);
16     rAv=dYc.*dXg; rAv=reshape(rAv,nPg,1);
17    
18     %-- K*rAc + add 1 overlap :
19     tmp=reshape(rAc,nPg,1)*ones(1,nr);
20     kwx=reshape(kwx,nPg,nr);
21     kwy=reshape(kwy,nPg,nr);
22     tmp=0.5*tmp;
23     kwx=tmp.*kwx;
24     kwy=tmp.*kwy;
25     kwx=reshape(kwx,ncx,nc,nr);
26     kwy=reshape(kwy,ncx,nc,nr);
27     v6X=split_C_cub(kwx,1);
28     v6Y=split_C_cub(kwy,1);
29     k6x=v6X(:,[2:ncp],:,:);
30     k6y=v6Y([2:ncp],:,:,:);
31    
32     %--- recip_hFac & mask :
33     hFacW=reshape(hFacW,nPg,nr);
34     hFacS=reshape(hFacS,nPg,nr);
35     rhFcW=1./hFacW; rhFcW(find(hFacW==0))=0;
36     rhFcS=1./hFacS; rhFcS(find(hFacS==0))=0;
37     hFacW=ceil(hFacW); hFacW=min(1,hFacW);
38     hFacS=ceil(hFacS); hFacS=min(1,hFacS);
39    
40     %-----------------
41    
42     v6X=zeros(nc,nc,nr,6);
43     v6X([1:nc],:,:,:)=k6x([2:ncp],:,:,:)+k6x([1:nc],:,:,:);
44     v6X=v6X/2;
45     psiX=zeros(ncx,nc,nr+1);
46     for n=1:6
47     is=1+nc*(n-1);ie=nc*n;
48     psiX([is:ie],[1:nc],[1:nr])=v6X([1:nc],[1:nc],[1:nr],n);
49     end
50     psiX=reshape(psiX,nPg,nr+1);
51     psiX(:,[1:nr])=hFacW.*psiX(:,[1:nr]);
52     ub=zeros(nPg,nr);
53     ub=psiX(:,[2:nr+1])-psiX(:,[1:nr]);
54     delR = reshape(delR,[1,length(delR)]);
55     tmp=rAu*delR;
56     ub=ub./tmp; ub=rhFcW.*ub;
57     ub=reshape(ub,ncx,nc,nr);
58    
59     %-----------------
60    
61     v6Y=zeros(nc,nc,nr,6);
62     v6Y(:,[1:nc],:,:)=k6y(:,[2:ncp],:,:)+k6y(:,[1:nc],:,:);
63     v6Y=v6Y/2;
64     psiY=zeros(ncx,nc,nr+1);
65     for n=1:6
66     is=1+nc*(n-1);ie=nc*n;
67     psiY([is:ie],[1:nc],[1:nr])=v6Y([1:nc],[1:nc],[1:nr],n);
68     end
69     psiY=reshape(psiY,nPg,nr+1);
70     psiY(:,[1:nr])=hFacS.*psiY(:,[1:nr]);
71     vb=zeros(nPg,nr);
72     vb=psiY(:,[2:nr+1])-psiY(:,[1:nr]);
73     tmp=rAv*delR;
74     vb=vb./tmp; vb=rhFcS.*vb;
75     vb=reshape(vb,ncx,nc,nr);
76    
77     %-----------------
78     return

  ViewVC Help
Powered by ViewVC 1.1.22