| 1 | 
function [hfacC,ddz] = hfac(dz,H,hfacmin,dzmin) | 
| 2 | 
%[hfacc]=hfac(dz,h,hfacmin,dzmin); | 
| 3 | 
%[hfacc,ddz]=hfac(dz,h,hfacmin,dzmin); | 
| 4 | 
% | 
| 5 | 
%Create hfacC(i,j,k) and dz(i,j,k) from dz(k), H(i,j) | 
| 6 | 
%using MITgcmUV model parameters hfacmin and dzmin | 
| 7 | 
% | 
| 8 | 
% hfacc corresponds to the non-dimensional thickness hFacC in MITgcm | 
| 9 | 
% ddz   is the dimensional thickness, ddz(i,j,k)=hfacc(i,j,k)*dz(k) | 
| 10 | 
% | 
| 11 | 
%e.g. | 
| 12 | 
%  [hfacC,ddz] = hfac(dz,H,hfacmin,dzmin) | 
| 13 | 
%e.g. To create a "p-mask" from above | 
| 14 | 
%  pmask=zeros(size(hfacC)); pmask( find(hfacC>0) )=1; | 
| 15 | 
% | 
| 16 | 
%Written by adcroft@mit.edu, 2001 | 
| 17 | 
%$Header: | 
| 18 | 
 | 
| 19 | 
[nx,ny,nt]=size(H); | 
| 20 | 
nz=prod(size(dz)); | 
| 21 | 
N=[nx ny nt nz]; | 
| 22 | 
 | 
| 23 | 
zf=[0 -cumsum(dz)]; | 
| 24 | 
 | 
| 25 | 
hfacC=zeros(N); | 
| 26 | 
ddz=zeros(N); | 
| 27 | 
for k=1:nz, | 
| 28 | 
 hFacLim=max([ hfacmin min([1 dzmin/dz(k)]) ]); | 
| 29 | 
 if hFacLim == 1 | 
| 30 | 
  disp(sprintf('Level k=%3i  dz(k)=%8.2f  Full cell',k,dz(k))) | 
| 31 | 
 else | 
| 32 | 
  disp(sprintf('Level k=%3i  dz(k)=%8.2f  Lopping with min[hfacC(:,k)*dz(k)]=%8.2f',k,dz(k),hFacLim*dz(k))) | 
| 33 | 
 end | 
| 34 | 
 ddd=(zf(k)-H)/dz(k); | 
| 35 | 
 ddd(find(ddd > 1)) = 1; | 
| 36 | 
%ddd(find(ddd < 0)) = 0; | 
| 37 | 
%ddd(find(ddd < hFacLim/2 & ddd ~= 0)) = 0; | 
| 38 | 
 ddd(find(ddd < hFacLim/2)) = 0; % This should do the job of the above 2 lines | 
| 39 | 
 ddd(find(ddd >= hFacLim/2 & ddd < hFacLim)) = hFacLim; | 
| 40 | 
 hfacC(:,:,:,k)=ddd; | 
| 41 | 
 ddz(:,:,:,k)=ddd*dz(k); | 
| 42 | 
end | 
| 43 | 
 | 
| 44 | 
hfacC=squeeze(hfacC); | 
| 45 | 
ddz=squeeze(ddz); |