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.