Subroutine for calculating diffusivity and TKE. 
  123   type(verticalgrid_type), 
intent(in)    :: gv
   124   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)),   &
   126   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)),   &
   128   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)),   &
   130   type(thermo_var_ptrs),   
intent(in)    :: tv
   133   real, 
dimension(:,:),    
pointer       :: p_surf
   135   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)+1), &
   136                            intent(inout) :: kappa_io
   140   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)+1), &
   141                            intent(inout) :: tke_io
   146   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)+1), &
   147                            intent(inout) :: kv_io
   151   real,                    
intent(in)    :: dt
   152   type(kappa_shear_cs),    
pointer       :: cs
   154   logical,       
optional, 
intent(in)    :: initialize_all
   184   real, 
dimension(SZI_(G),SZK_(G)) :: &
   186     u_2d, v_2d, t_2d, s_2d, rho_2d  
   187   real, 
dimension(SZI_(G),SZK_(G)+1) :: &
   189   real, 
dimension(SZK_(G)) :: &
   200     u_test, v_test, t_test, s_test
   201   real, 
dimension(SZK_(G)+1) :: &
   243   real :: dist_from_bot 
   251   real :: tol_dksrc, tol2  
   252   real :: tol_dksrc_low 
   269   logical :: use_temperature  
   271   logical :: new_kappa = .true. 
   274   integer, 
dimension(SZK_(G)+1) :: kc 
   277   real, 
dimension(SZK_(G)+1) :: kf 
   279   integer :: ks_kappa, ke_kappa  
   280   integer :: dt_halvings   
   283   integer :: dt_refinements 
   286   integer :: is, ie, js, je, i, j, k, nz, nzc, itt, itt_dt
   289   real, 
dimension(SZK_(G)) :: &
   293   real, 
dimension(SZK_(G)+1) :: &
   309 #ifdef ADD_DIAGNOSTICS   310   real, 
dimension(SZK_(G)+1) :: &  
   312   real, 
dimension(SZI_(G),SZK_(G)+1) :: & 
   314   real, 
dimension(SZI_(G),SZJ_(G),SZK_(G)+1) :: & 
   318   integer :: max_debug_itt ; 
parameter(max_debug_itt=20)
   319   real :: wt(szk_(g)+1), wt_tot, i_wt_tot, wt_itt
   320   real, 
dimension(SZK_(G)+1) :: &
   321     ri_k, tke_prev, dtke, dkappa, dtke_norm, &
   323   real, 
dimension(SZK_(G)+1,0:max_debug_itt) :: &
   324     tke_it1, n2_it1, sh2_it1, ksrc_it1, kappa_it1, kprev_it1
   325   real, 
dimension(SZK_(G)+1,1:max_debug_itt) :: &
   326     dkappa_it1, wt_it1, k_q_it1, d_dkappa_it1, dkappa_norm
   327   real, 
dimension(SZK_(G),0:max_debug_itt) :: &
   328     u_it1, v_it1, rho_it1, t_it1, s_it1
   329   real, 
dimension(0:max_debug_itt) :: &
   330     dk_wt_it1, dkpos_wt_it1, dkneg_wt_it1, k_mag
   331   real, 
dimension(max_debug_itt) ::  dt_it1
   333   is = g%isc ; ie = g%iec; js = g%jsc ; je = g%jec ; nz = g%ke
   337   tol_dksrc = 10.0 ; tol_dksrc_low = 0.95 ; tol2 = 2.0*cs%kappa_tol_err
   340   use_temperature = .false. ; 
if (
associated(tv%T)) use_temperature = .true.
   341   new_kappa = .true. ; 
if (
present(initialize_all)) new_kappa = initialize_all
   343   ri_crit = cs%Rino_crit
   344   gr0 = gv%Rho0*gv%g_Earth ; g_r0 = gv%g_Earth/gv%Rho0
   347   dz_massless = 0.1*sqrt(k0dt)
   352 #ifdef ADD_DIAGNOSTICS   365 #ifdef ADD_DIAGNOSTICS   371     do k=1,nz ; 
do i=is,ie
   372       h_2d(i,k) = h(i,j,k)*gv%H_to_m
   373       u_2d(i,k) = u_in(i,j,k) ; v_2d(i,k) = v_in(i,j,k)
   375     if (use_temperature) 
then ; 
do k=1,nz ; 
do i=is,ie
   376       t_2d(i,k) = tv%T(i,j,k) ; s_2d(i,k) = tv%S(i,j,k)
   377     enddo ;
 enddo ; 
else ; 
do k=1,nz ; 
do i=is,ie
   378       rho_2d(i,k) = gv%Rlay(k) 
   379     enddo ;
 enddo ;
 endif   380     if (.not.new_kappa) 
then ; 
do k=1,nz+1 ; 
do i=is,ie
   381       kappa_2d(i,k) = kappa_io(i,j,k)
   382     enddo ;
 enddo ;
 endif   387     do i=is,ie ; 
if (g%mask2dT(i,j) > 0.5) 
then   391       if (cs%eliminate_massless) 
then   395           dz(k) = 0.0 ; u0xdz(k) = 0.0 ; v0xdz(k) = 0.0
   396           t0xdz(k) = 0.0 ; s0xdz(k) = 0.0
   400           if ((k>cs%nkml) .and. (dz(nzc) > 0.0) .and. &
   401               (h_2d(i,k) > dz_massless)) nzc = nzc+1
   408           dz(nzc) = dz(nzc) + h_2d(i,k)
   409           u0xdz(nzc) = u0xdz(nzc) + u_2d(i,k)*h_2d(i,k)
   410           v0xdz(nzc) = v0xdz(nzc) + v_2d(i,k)*h_2d(i,k)
   411           if (use_temperature) 
then   412             t0xdz(nzc) = t0xdz(nzc) + t_2d(i,k)*h_2d(i,k)
   413             s0xdz(nzc) = s0xdz(nzc) + s_2d(i,k)*h_2d(i,k)
   415             t0xdz(nzc) = t0xdz(nzc) + rho_2d(i,k)*h_2d(i,k)
   416             s0xdz(nzc) = s0xdz(nzc) + rho_2d(i,k)*h_2d(i,k)
   421         do k=1,nzc ; idz(k) = 1.0 / dz(k) ;
 enddo   425         kf(1) = 0.0 ; dz_in_lay = h_2d(i,1)
   427           if (kc(k) > kc(k-1)) 
then   428             kf(k) = 0.0 ; dz_in_lay = h_2d(i,k)
   430             kf(k) = dz_in_lay*idz(kc(k)) ; dz_in_lay = dz_in_lay + h_2d(i,k)
   437           u0xdz(k) = u_2d(i,k)*dz(k) ; v0xdz(k) = v_2d(i,k)*dz(k)
   439         if (use_temperature) 
then   441             t0xdz(k) = t_2d(i,k)*dz(k) ; s0xdz(k) = s_2d(i,k)*dz(k)
   445             t0xdz(k) = rho_2d(i,k)*dz(k) ; s0xdz(k) = rho_2d(i,k)*dz(k)
   449         do k=1,nzc+1 ; kc(k) = k ; kf(k) = 0.0 ;
 enddo   451         do k=1,nzc ; idz(k) = 1.0 / dz(k) ;
 enddo   456       i_dz_int(1) = 2.0 / dz(1)
   457       dist_from_top(1) = 0.0
   459         i_dz_int(k) = 2.0 / (dz(k-1) + dz(k))
   460         dist_from_top(k) = dist_from_top(k-1) + dz(k-1)
   462       i_dz_int(nzc+1) = 2.0 / dz(nzc)
   467         a1(2) = k0dt*i_dz_int(2)
   468         b1 = 1.0 / (dz(1)+a1(2))
   469         u(1) = b1 * u0xdz(1) ; v(1) = b1 * v0xdz(1)
   470         t(1) = b1 * t0xdz(1) ; sal(1) = b1 * s0xdz(1)
   471         c1(2) = a1(2) * b1 ; d1 = dz(1) * b1 
   473           bd1 = dz(k) + d1*a1(k)
   474           a1(k+1) = k0dt*i_dz_int(k+1)
   475           b1 = 1.0 / (bd1 + a1(k+1))
   476           u(k) = b1 * (u0xdz(k) + a1(k)*u(k-1))
   477           v(k) = b1 * (v0xdz(k) + a1(k)*v(k-1))
   478           t(k) = b1 * (t0xdz(k) + a1(k)*t(k-1))
   479           sal(k) = b1 * (s0xdz(k) + a1(k)*sal(k-1))
   480           c1(k+1) = a1(k+1) * b1 ; d1 = bd1 * b1 
   485         b1 = 1.0 / ((dz(nzc) + d1*a1(nzc)) + k0dt*i_dz_int(nzc+1))
   486         u(nzc) = b1 * (u0xdz(nzc) + a1(nzc)*u(nzc-1))
   487         v(nzc) = b1 * (v0xdz(nzc) + a1(nzc)*v(nzc-1))
   489         b1 = 1.0 / (dz(nzc) + d1*a1(nzc))
   490         t(nzc) = b1 * (t0xdz(nzc) + a1(nzc)*t(nzc-1))
   491         sal(nzc) = b1 * (s0xdz(nzc) + a1(nzc)*sal(nzc-1))
   493           u(k) = u(k) + c1(k+1)*u(k+1) ; v(k) = v(k) + c1(k+1)*v(k+1)
   494           t(k) = t(k) + c1(k+1)*t(k+1) ; sal(k) = sal(k) + c1(k+1)*sal(k+1)
   498         b1 = 1.0 / (dz(1) + k0dt*i_dz_int(2))
   499         u(1) = b1 * u0xdz(1) ; v(1) = b1 * v0xdz(1)
   501         t(1) = b1 * t0xdz(1) ; sal(1) = b1 * s0xdz(1)
   510       dz_int(1) = 0.0 ; dz_int(2) = dz(1)
   512         norm = 1.0 / (dz(k)*(dz(k-1)+dz(k+1)) + 2.0*dz(k-1)*dz(k+1))
   513         dz_int(k) = dz_int(k) + dz(k) * ( ((dz(k)+dz(k+1)) * dz(k-1)) * norm)
   514         dz_int(k+1) = dz(k) * ( ((dz(k-1)+dz(k)) * dz(k+1)) * norm)
   516       dz_int(nzc) = dz_int(nzc) + dz(nzc) ; dz_int(nzc+1) = 0.0
   518 #ifdef ADD_DIAGNOSTICS   519       do k=1,nzc+1 ; i_ld2_1d(k) = 0.0 ;
 enddo   524         dist_from_bot = dist_from_bot + dz(k)
   525         i_l2_bdry(k) = (dist_from_top(k) + dist_from_bot)**2 / &
   526                          (dist_from_top(k) * dist_from_bot)**2
   528       f2 = 0.25*((g%CoriolisBu(i,j)**2 + g%CoriolisBu(i-1,j-1)**2) + &
   529                  (g%CoriolisBu(i,j-1)**2 + g%CoriolisBu(i-1,j)**2))
   532       if (use_temperature) 
then   534         if (
associated(p_surf)) pressure(1) = p_surf(i,j)
   536           pressure(k) = pressure(k-1) + gr0*dz(k-1)
   537           t_int(k) = 0.5*(t(k-1) + t(k))
   538           sal_int(k) = 0.5*(sal(k-1) + sal(k))
   540         call calculate_density_derivs(t_int, sal_int, pressure, dbuoy_dt, &
   541                                       dbuoy_ds, 2, nzc-1, tv%eqn_of_state)
   543           dbuoy_dt(k) = -g_r0*dbuoy_dt(k)
   544           dbuoy_ds(k) = -g_r0*dbuoy_ds(k)
   547         do k=1,nzc+1 ; dbuoy_dt(k) = -g_r0 ; dbuoy_ds(k) = 0.0 ;
 enddo   554         do k=1,nzc+1 ; kappa(k) = 1.0 ; k_q(k) = 0.0 ;
 enddo   556         do k=1,nzc+1 ; kappa(k) = kappa_2d(i,k) ; k_q(k) = 0.0 ;
 enddo   560       n2(1) = 0.0 ; n2(nzc+1) = 0.0
   562         n2(k) = max((dbuoy_dt(k) * (t0xdz(k-1)*idz(k-1) - t0xdz(k)*idz(k)) + &
   563                      dbuoy_ds(k) * (s0xdz(k-1)*idz(k-1) - s0xdz(k)*idz(k))) * &
   567         u_it1(k,0) = u0xdz(k)*idz(k) ; v_it1(k,0) = v0xdz(k)*idz(k)
   568         t_it1(k,0) = t0xdz(k)*idz(k) ; s_it1(k,0) = s0xdz(k)*idz(k)
   571         kprev_it1(k,0) = kappa(k) ; kappa_it1(k,0) = kappa(k)
   572         tke_it1(k,0) = tke(k)
   573         n2_it1(k,0) = n2(k) ; sh2_it1(k,0) = s2(k) ; ksrc_it1(k,0) = k_src(k)
   576         u_it1(k,0) = 0.0 ; v_it1(k,0) = 0.0
   577         t_it1(k,0) = 0.0 ; s_it1(k,0) = 0.0
   578         kprev_it1(k+1,0) = 0.0 ; kappa_it1(k+1,0) = 0.0 ; tke_it1(k+1,0) = 0.0
   579         n2_it1(k+1,0) = 0.0 ; sh2_it1(k+1,0) = 0.0 ; ksrc_it1(k+1,0) = 0.0
   581       do itt=1,max_debug_itt
   584           u_it1(k,itt) = 0.0 ; v_it1(k,itt) = 0.0
   585           t_it1(k,itt) = 0.0 ; s_it1(k,itt) = 0.0
   589           kprev_it1(k,itt) = 0.0 ; kappa_it1(k,itt) = 0.0 ; tke_it1(k,itt) = 0.0
   590           n2_it1(k,itt) = 0.0 ; sh2_it1(k,itt) = 0.0
   591           ksrc_it1(k,itt) = 0.0
   592           dkappa_it1(k,itt) = 0.0 ; wt_it1(k,itt) = 0.0
   593           k_q_it1(k,itt) = 0.0 ; d_dkappa_it1(k,itt) = 0.0
   596       do k=1,nz+1 ; ksrc_av(k) = 0.0 ;
 enddo   600       call calculate_projected_state(kappa, u, v, t, sal, 0.0, nzc, &
   601                                      dz, i_dz_int, dbuoy_dt, dbuoy_ds, &
   602                                      u, v, t, sal, n2=n2, s2=s2)
   608         kappa_avg(k) = 0.0 ; tke_avg(k) = 0.0
   609         local_src_avg(k) = 0.0
   611         if ( dz_int(k) > 0.0 ) &
   612           local_src_avg(k) = 0.1 * k0dt * i_dz_int(k) / dz_int(k)
   618       do itt=1,cs%max_KS_it
   625           ri_k(k) = 1e3 ; 
if (s2(k) > 1e-3*n2(k)) ri_k(k) = n2(k) / s2(k)
   631         call find_kappa_tke(n2, s2, kappa, idz, dz_int, i_l2_bdry, f2, &
   632                             nzc, cs, k_q, tke, kappa_out, kappa_src, local_src)
   637         ks_kappa = nz+1 ; ke_kappa = 0
   638         do k=2,nzc ; 
if (kappa_out(k) > 0.0) 
then   641         do k=nzc,ks_kappa,-1 ; 
if (kappa_out(k) > 0.0) 
then   644         if (ke_kappa == nzc) kappa_out(nzc+1) = 0.0
   650         if ((ke_kappa < ks_kappa) .or. (itt==cs%max_RiNo_it)) 
then   656             tol_max(k) = kappa_src(k) + tol_dksrc * local_src(k)
   657             tol_min(k) = kappa_src(k) - tol_dksrc_low * local_src(k)
   658             tol_chg(k) = tol2 * local_src_avg(k)
   661           do itt_dt=1,(cs%max_KS_it+1-itt)/2
   669             call calculate_projected_state(kappa_out, u, v, t, sal, 0.5*dt_test, nzc, &
   670                                            dz, i_dz_int, dbuoy_dt, dbuoy_ds, &
   671                                            u_test, v_test, t_test, s_test, n2, s2, &
   672                                            ks_int = ks_kappa, ke_int = ke_kappa)
   675             do k=max(ks_kappa-1,2),min(ke_kappa+1,nzc)
   676               if (n2(k) < ri_crit * s2(k)) 
then    677                 k_src(k) = (2.0 * cs%Shearmix_rate * sqrt(s2(k))) * &
   678                            ((ri_crit*s2(k) - n2(k)) / (ri_crit*s2(k) + cs%FRi_curvature*n2(k)))
   679                  if ((k_src(k) > max(tol_max(k), kappa_src(k) + idtt*tol_chg(k))) .or. &
   680                      (k_src(k) < min(tol_min(k), kappa_src(k) - idtt*tol_chg(k)))) 
then   681                   valid_dt = .false. ; 
exit   684                 if (0.0 < min(tol_min(k), kappa_src(k) - idtt*tol_chg(k))) 
then   685                   valid_dt = .false. ; k_src(k) = 0.0 ; 
exit   691             dt_test = 0.5*dt_test
   693           if ((dt_test < dt_rem) .and. valid_dt) 
then   695             do itt_dt=1,dt_refinements
   696               call calculate_projected_state(kappa_out, u, v, t, sal, &
   697                        0.5*(dt_test+dt_inc), nzc, dz, i_dz_int, dbuoy_dt, &
   698                        dbuoy_ds, u_test, v_test, t_test, s_test, n2, s2, &
   699                        ks_int = ks_kappa, ke_int = ke_kappa)
   701               idtt = 1.0 / (dt_test+dt_inc)
   702               do k=max(ks_kappa-1,2),min(ke_kappa+1,nzc)
   703                 if (n2(k) < ri_crit * s2(k)) 
then    704                   k_src(k) = (2.0 * cs%Shearmix_rate * sqrt(s2(k))) * &
   705                              ((ri_crit*s2(k) - n2(k)) / &
   706                               (ri_crit*s2(k) + cs%FRi_curvature*n2(k)))
   707                    if ((k_src(k) > max(tol_max(k), kappa_src(k) + idtt*tol_chg(k))) .or. &
   708                        (k_src(k) < min(tol_min(k), kappa_src(k) - idtt*tol_chg(k)))) 
then   709                     valid_dt = .false. ; 
exit   712                   if (0.0 < min(tol_min(k), kappa_src(k) - idtt*tol_chg(k))) 
then   713                     valid_dt = .false. ; k_src(k) = 0.0 ; 
exit   718               if (valid_dt) dt_test = dt_test + dt_inc
   725            dt_now = min(dt_test*(1.0+cs%kappa_tol_err)+dt_inc,dt_rem)
   727             local_src_avg(k) = local_src_avg(k) + dt_now * local_src(k)
   734         if (ke_kappa < ks_kappa) 
then   737           dt_wt = dt_rem / dt ; dt_rem = 0.0
   742             tke_avg(k) = tke_avg(k) + dt_wt*tke(k)
   744             tke_pred(k) = tke(k) ; kappa_pred(k) = 0.0 ; kappa(k) = 0.0
   750           call calculate_projected_state(kappa_out, u, v, t, sal, dt_now, nzc, &
   751                                          dz, i_dz_int, dbuoy_dt, dbuoy_ds, &
   752                                          u_test, v_test, t_test, s_test, n2=n2, s2=s2, &
   753                                          ks_int = ks_kappa, ke_int = ke_kappa)
   757           do k=1,nzc+1 ; k_q_tmp(k) = k_q(k) ;
 enddo   758           call find_kappa_tke(n2, s2, kappa_out, idz, dz_int, i_l2_bdry, f2, &
   759                               nzc, cs, k_q_tmp, tke_pred, kappa_pred)
   762           ks_kappa = nz+1 ; ke_kappa = 0
   764             kappa_mid(k) = 0.5*(kappa_out(k) + kappa_pred(k))
   765             if ((kappa_mid(k) > 0.0) .and. (k<ks_kappa)) ks_kappa = k
   766             if (kappa_mid(k) > 0.0) ke_kappa = k
   770           call calculate_projected_state(kappa_mid, u, v, t, sal, dt_now, nzc, &
   771                                          dz, i_dz_int, dbuoy_dt, dbuoy_ds, &
   772                                          u_test, v_test, t_test, s_test, n2=n2, s2=s2, &
   773                                          ks_int = ks_kappa, ke_int = ke_kappa)
   777           call find_kappa_tke(n2, s2, kappa_out, idz, dz_int, i_l2_bdry, f2, &
   778                               nzc, cs, k_q, tke_pred, kappa_pred)
   782           dt_wt = dt_now / dt ; dt_rem = dt_rem - dt_now
   784             kappa_mid(k) = 0.5*(kappa_out(k) + kappa_pred(k))
   785             kappa_avg(k) = kappa_avg(k) + kappa_mid(k)*dt_wt
   786             tke_avg(k) = tke_avg(k) + dt_wt*0.5*(tke_pred(k) + tke(k))
   787             kappa(k) = kappa_pred(k) 
   792         if (dt_rem > 0.0) 
then   795           call calculate_projected_state(kappa_mid, u, v, t, sal, dt_now, nzc, &
   796                                          dz, i_dz_int, dbuoy_dt, dbuoy_ds, &
   797                                          u, v, t, sal, n2, s2)
   802         if (itt <= max_debug_itt) 
then   804           dk_wt_it1(itt) = 0.0 ; dkpos_wt_it1(itt) = 0.0 ;  dkneg_wt_it1(itt) = 0.0
   806           wt_itt = 1.0/
real(itt) ; wt_tot = 0.0
   808             ksrc_av(k) = (1.0-wt_itt)*ksrc_av(k) + wt_itt*k_src(k)
   809             wt_tot = wt_tot + dz_int(k) * ksrc_av(k)
   812           i_wt_tot = 0.0 ; 
if (wt_tot > 0.0) i_wt_tot = 1.0/wt_tot
   815             wt(k) = (dz_int(k)*ksrc_av(k)) * i_wt_tot
   816             k_mag(itt) = k_mag(itt) + wt(k)*kappa_mid(k)
   817             dkappa_it1(k,itt) = kappa_pred(k) - kappa_out(k)
   818             dk_wt_it1(itt) = dk_wt_it1(itt) + wt(k)*dkappa_it1(k,itt)
   820               dkpos_wt_it1(itt) = dkpos_wt_it1(itt) + wt(k)*dkappa_it1(k,itt)
   822               dkneg_wt_it1(itt) = dkneg_wt_it1(itt) + wt(k)*dkappa_it1(k,itt)
   824             wt_it1(k,itt) = wt(k)
   828           ri_k(k) = 1e3 ; 
if (n2(k) < 1e3 * s2(k)) ri_k(k) = n2(k) / s2(k)
   829           dtke(k) = tke_pred(k) - tke(k)
   830           dtke_norm(k) = dtke(k) / (0.5*(tke(k) + tke_pred(k)))
   831           dkappa(k) = kappa_pred(k) - kappa_out(k)
   833         if (itt <= max_debug_itt) 
then   835             u_it1(k,itt) = u(k) ; v_it1(k,itt) = v(k)
   836             t_it1(k,itt) = t(k) ; s_it1(k,itt) = sal(k)
   839             kprev_it1(k,itt)=kappa_out(k)
   840             kappa_it1(k,itt)=kappa_mid(k) ; tke_it1(k,itt) = 0.5*(tke(k)+tke_pred(k))
   841             n2_it1(k,itt)=n2(k) ; sh2_it1(k,itt)=s2(k)
   842             ksrc_it1(k,itt) = kappa_src(k)
   843             k_q_it1(k,itt) = kappa_out(k) / (tke(k))
   845               if (abs(dkappa_it1(k,itt-1)) > 1e-20) &
   846                 d_dkappa_it1(k,itt) = dkappa_it1(k,itt) / dkappa_it1(k,itt-1)
   848             dkappa_norm(k,itt) = dkappa(k) / max(0.5*(kappa_pred(k) + kappa_out(k)), 1e-100)
   853         if (dt_rem <= 0.0) 
exit   861           kappa_2d(i,k) = kappa_avg(k)
   866           if (kf(k) == 0.0) 
then   867             kappa_2d(i,k) = kappa_avg(kc(k))
   868             tke_2d(i,k) = tke_avg(kc(k))
   870             kappa_2d(i,k) = (1.0-kf(k)) * kappa_avg(kc(k)) + &
   871                              kf(k) * kappa_avg(kc(k)+1)
   872             tke_2d(i,k) = (1.0-kf(k)) * tke_avg(kc(k)) + &
   873                            kf(k) * tke_avg(kc(k)+1)
   877 #ifdef ADD_DIAGNOSTICS   878       i_ld2_2d(i,1) = 0.0 ; dz_int_2d(i,1) = dz_int(1)
   880         i_ld2_2d(i,k) = (n2(k) / cs%lambda**2 + f2) / &
   881                          max(tke(k),1e-30) + i_l2_bdry(k)
   882         dz_int_2d(i,k) = dz_int(k)
   884       i_ld2_2d(i,nzc+1) = 0.0 ; dz_int_2d(i,nzc+1) = dz_int(nzc+1)
   886         i_ld2_2d(i,k) = 0.0 ; dz_int_2d(i,k) = 0.0
   892         kappa_2d(i,k) = 0.0 ; tke_2d(i,k) = 0.0
   893 #ifdef ADD_DIAGNOSTICS   895         dz_int_2d(i,k) = dz_int(k)
   900     do k=1,nz+1 ; 
do i=is,ie
   901       kappa_io(i,j,k) = g%mask2dT(i,j) * kappa_2d(i,k)
   902       tke_io(i,j,k) = g%mask2dT(i,j) * tke_2d(i,k)
   903       kv_io(i,j,k) = ( g%mask2dT(i,j) * kappa_2d(i,k) ) * cs%Prandtl_turb
   904 #ifdef ADD_DIAGNOSTICS   905       i_ld2_3d(i,j,k) = i_ld2_2d(i,k)
   906       dz_int_3d(i,j,k) = dz_int_2d(i,k)
   913     call hchksum(kappa_io,
"kappa",g%HI)
   914     call hchksum(tke_io,
"tke",g%HI)
   917   if (cs%id_Kd_shear > 0) 
call post_data(cs%id_Kd_shear, kappa_io, cs%diag)
   918   if (cs%id_TKE > 0) 
call post_data(cs%id_TKE, tke_io, cs%diag)
   919 #ifdef ADD_DIAGNOSTICS   920   if (cs%id_ILd2 > 0) 
call post_data(cs%id_ILd2, i_ld2_3d, cs%diag)
   921   if (cs%id_dz_Int > 0) 
call post_data(cs%id_dz_Int, dz_int_3d, cs%diag)
 Ocean grid type. See mom_grid for details.