| 1 | 
adcroft | 
1.1 | 
function [Psi,x,y] = barotropic_psi(GRID,u); | 
| 2 | 
  | 
  | 
%barotropic_psi(grid,u) | 
| 3 | 
  | 
  | 
% | 
| 4 | 
  | 
  | 
%Calculates depth integrated volume transport (m^3/s). | 
| 5 | 
  | 
  | 
% | 
| 6 | 
  | 
  | 
%e.g. | 
| 7 | 
  | 
  | 
%>> G=loadgrid('expt1'); | 
| 8 | 
  | 
  | 
%>> S=loadstate('expt1'); | 
| 9 | 
  | 
  | 
%>> [psi,x,y]=barotropic_psi(G,S.U); | 
| 10 | 
  | 
  | 
%>> [c,h]=contourf(x,y, sq(psi)'/1e6 );clabel(c,h) | 
| 11 | 
  | 
  | 
% | 
| 12 | 
  | 
  | 
%Written by adcroft@mit.edu, 2001 | 
| 13 | 
  | 
  | 
%$Header: | 
| 14 | 
  | 
  | 
 | 
| 15 | 
  | 
  | 
N=size(GRID.hfacs); | 
| 16 | 
  | 
  | 
nx=size(GRID.rac,1); | 
| 17 | 
  | 
  | 
ny=size(GRID.rac,2); | 
| 18 | 
  | 
  | 
nr=prod(size(GRID.drf)); | 
| 19 | 
  | 
  | 
 | 
| 20 | 
  | 
  | 
DRF=spdiags(GRID.drf',0,nr,nr); | 
| 21 | 
  | 
  | 
dz=reshape(GRID.hfacw,[nx*ny nr])*DRF; | 
| 22 | 
  | 
  | 
area=dz.*( GRID.dyg(:)*ones(1,nr) ); | 
| 23 | 
  | 
  | 
area=reshape(area, N); | 
| 24 | 
  | 
  | 
 | 
| 25 | 
  | 
  | 
U=sum(u.*area,3); | 
| 26 | 
  | 
  | 
U(end+1,:)=U(1,:); | 
| 27 | 
  | 
  | 
Psi=U; | 
| 28 | 
  | 
  | 
 | 
| 29 | 
  | 
  | 
Psi=zeros(nx+1,ny+1); | 
| 30 | 
  | 
  | 
 | 
| 31 | 
  | 
  | 
for k=1:ny; | 
| 32 | 
  | 
  | 
 Psi(:,k+1)=Psi(:,k)-U(:,k); | 
| 33 | 
  | 
  | 
end | 
| 34 | 
  | 
  | 
 | 
| 35 | 
  | 
  | 
msku=max(GRID.hfacw(:,:,1),GRID.hfacw(:,:,end)); msku(find(msku~=0))=1; | 
| 36 | 
  | 
  | 
mskv=max(GRID.hfacs(:,:,1),GRID.hfacs(:,:,end)); mskv(find(mskv~=0))=1; | 
| 37 | 
  | 
  | 
mskz=(1-msku([1:end 1],[1 1:end])).*(1-msku([end 1:end],[1 1:end])); | 
| 38 | 
  | 
  | 
mskz=mskz.*(1-mskv([1:end 1],[1:end end])).*(1-mskv([end 1:end],[1:end end])); | 
| 39 | 
  | 
  | 
%mskc=1-GRID.mskc([1:end 1],[1:end end],1); | 
| 40 | 
  | 
  | 
%mskz=mskc.*mskc([end 1:end-1],:).*mskc(:,[end 1:end-1]).*mskc([end 1:end-1],[end 1:end-1]); | 
| 41 | 
  | 
  | 
PsiC=mean(Psi(:,end)); | 
| 42 | 
  | 
  | 
Psi=(Psi-PsiC).*(1-mskz); | 
| 43 | 
  | 
  | 
 | 
| 44 | 
  | 
  | 
x=GRID.xg(:,1); x(end+1)=2*x(end)-x(end-1); | 
| 45 | 
  | 
  | 
y=GRID.yg(1,:); y(end+1)=2*y(end)-y(end-1); |