| 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); |