subroutine cnvmix(j)
c
c=======================================================================
c ===
c This routine sets up the coefficients for constant vertical ===
c diffusion of momentum (VVC) and tracers (VDC). ===
c (Adapted from MOM) ===
c ===
c=======================================================================
c
c-----------------------------------------------------------------------
c Define global data.
c-----------------------------------------------------------------------
c
#include <cdefs.h>
#include <param.h>
#include <pconst.h>
#ifdef explicitvmix
# include <scalar.h>
# include <fullwd.h>
# include <iounits.h>
#else
# include <workspa.h>
#endif
#include <vertslabs.h>
#include <cvmix.h>
c
c-----------------------------------------------------------------------
c Define local data.
c-----------------------------------------------------------------------
c
integer i,k,j
#ifdef explicitvmix
FLOAT
* dttmax,dtumax,fx,pdtt,pdtu,pvdc,pvvc,small,vdcmax,vdcri,
* vvcmax,vvcri
parameter (small=c1em8)
#endif
c
c=======================================================================
c Begin executable code.
c=======================================================================
c
do 10 k=1,km
do 10 i=1,imt
vdc(i,k)=fkph
vvc(i,k)=fkpm
10 continue
c
#ifdef explicitvmix
c
c-----------------------------------------------------------------------
c Determine numerical stability based on vertical viscosity/diffusion
c coefficients:
c Av dt/(dz^2) < 0.25
c-----------------------------------------------------------------------
c
if(itt.eq.1) then
do 60 k=1,km
do 60 i=1,imt
if(vdc(i,k).gt.small) then
fx=dzqz(i,k,0)**2
vdcri=c4*dtts*vdc(i,k)/fx
if(vdcri.ge.c1) then
write(stdout,20) i,j,k
20 format(' Exceeded vertical diffusion stability criteria',
* ' at (i,j,k) = ',i3,',',i3,',',i3)
vdcmax=fx/(c4*dtts)
pvdc=abs(c100*vdc(i,k)/vdcmax)
dttmax=fx/(c4*vdc(i,k))
pdtt=abs(c100*dtts/dttmax)
write(stdout,30) pvdc,vdcmax,pdtt,dttmax
30 format(' Av reached ',f8.2,'% of the stability limit ',
* '(',g15.8,')',/
* ' DTTS reached ',f8.2,'% of the stability limit ',
* '(',g15.8,')')
call exitus('CNVMIX')
endif
endif
if(vvc(i,k).gt.small) then
fx=dzvqz(i,k,0)**2
vvcri=c4*dtuv*vvc(i,k)/fx
if(vvcri.ge.c1) then
write(stdout,40) i,j,k
40 format(' Exceeded vertical viscosity stability criteria',
* ' at (i,j,k) = ',i3,',',i3,',',i3)
vvcmax=fx/(c4*dtuv)
pvvc=abs(c100*vvc(i,k)/vvcmax)
dtumax=fx/(c4*vvc(i,k))
pdtu=abs(c100*dtuv/dtumax)
write(stdout,50) pvvc,vvcmax,pdtu,dtumax
50 format(' Av reached ',f8.2,'% of the stability limit ',
* '(',g15.8,')',/
* ' DTUV reached ',f8.2,'% of the stability limit ',
* '(',g15.8,')')
call exitus('CNVMIX')
endif
endif
60 continue
endif
#else
c
c-----------------------------------------------------------------------
c Determine mixed-layer depth, and set vertical mixing coefficients to
c WVMIX and WDMIX within the mixed layer.
c-----------------------------------------------------------------------
c
call mixlayer(j)
c
c-----------------------------------------------------------------------
c Compute vertical gradient in potential density and determine vertical
c gravitational stability, and if unstable set the vertical mixing
c coefficients to VVCLIM and VDCLIM.
c-----------------------------------------------------------------------
c
if(j.eq.1) then
call pdenvgrad (tb(1,1,1),tb(1,1,2),tdepth(1,1,jrs),
& dzzqz(1,1,jrs),drho)
else
do 65 i=1,imt
do 65 k=1,km
drho(i,k)=drhop(i,k)
65 continue
endif
call pdenvgrad (tbp(1,1,1),tbp(1,1,2),tdepth(1,1,jrn),
& dzzqz(1,1,jrn),drhop)
call convect(j)
c
c-----------------------------------------------------------------------
c Set viscosity and diffusivity to zero in land.
c-----------------------------------------------------------------------
c
#ifndef barotropic
do 70 k=1,kmm1
do 70 i=2,imtm1
vvc(i,k)=gm(i,k+1)*vvc(i,k)
vdc(i,k)=fm(i,k+1)*vdc(i,k)
70 continue
#endif
c
c-----------------------------------------------------------------------
c Set viscosity and diffusivity at level KM.
c-----------------------------------------------------------------------
c
do 80 i=2,imtm1
vvc(i,km)=c0
vdc(i,km)=c0
80 continue
#endif
return
end