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

Contents 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 - (show 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 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