@@ -182,6 +182,7 @@ module MOM_set_diffusivity
182
182
integer :: id_Kd_quad = - 1 , id_Kd_itidal = - 1 , id_Kd_Froude = - 1 , id_Kd_slope = - 1
183
183
integer :: id_prof_leak = - 1 , id_prof_quad = - 1 , id_prof_itidal= - 1
184
184
integer :: id_prof_Froude= - 1 , id_prof_slope = - 1 , id_bbl_thick = - 1 , id_kbbl = - 1
185
+ integer :: id_Kd_Work_added
185
186
! >@}
186
187
187
188
end type set_diffusivity_CS
@@ -192,7 +193,8 @@ module MOM_set_diffusivity
192
193
N2_3d = > NULL (), & ! < squared buoyancy frequency at interfaces [T-2 ~> s-2]
193
194
Kd_user = > NULL (), & ! < user-added diffusivity at interfaces [H Z T-1 ~> m2 s-1 or kg m-1 s-1]
194
195
Kd_BBL = > NULL (), & ! < BBL diffusivity at interfaces [H Z T-1 ~> m2 s-1 or kg m-1 s-1]
195
- Kd_work = > NULL (), & ! < layer integrated work by diapycnal mixing [R Z3 T-3 ~> W m-2]
196
+ Kd_Work = > NULL (), & ! < layer integrated work by diapycnal mixing [R Z3 T-3 ~> W m-2]
197
+ Kd_Work_added = > NULL (), & ! < layer integrated work by added mixing [R Z3 T-3 ~> W m-2]
196
198
maxTKE = > NULL (), & ! < energy required to entrain to h_max [H Z2 T-3 ~> m3 s-3 or W m-2]
197
199
Kd_bkgnd = > NULL (), & ! < Background diffusivity at interfaces [H Z T-1 ~> m2 s-1 or kg m-1 s-1]
198
200
Kv_bkgnd = > NULL (), & ! < Viscosity from background diffusivity at interfaces [H Z T-1 ~> m2 s-1 or Pa s]
@@ -359,7 +361,8 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
359
361
360
362
if (CS% id_N2 > 0 ) allocate (dd% N2_3d(isd:ied,jsd:jed,nz+1 ), source= 0.0 )
361
363
if (CS% id_Kd_user > 0 ) allocate (dd% Kd_user(isd:ied,jsd:jed,nz+1 ), source= 0.0 )
362
- if (CS% id_Kd_work > 0 ) allocate (dd% Kd_work(isd:ied,jsd:jed,nz), source= 0.0 )
364
+ if (CS% id_Kd_Work > 0 ) allocate (dd% Kd_Work(isd:ied,jsd:jed,nz), source= 0.0 )
365
+ if (CS% id_Kd_Work_added > 0 ) allocate (dd% Kd_Work_added(isd:ied,jsd:jed,nz), source= 0.0 )
363
366
if (CS% id_maxTKE > 0 ) allocate (dd% maxTKE(isd:ied,jsd:jed,nz), source= 0.0 )
364
367
if (CS% id_TKE_to_Kd > 0 ) allocate (dd% TKE_to_Kd(isd:ied,jsd:jed,nz), source= 0.0 )
365
368
if ((CS% double_diffusion) .and. (CS% id_KT_extra > 0 )) &
@@ -549,7 +552,7 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
549
552
enddo ; enddo
550
553
endif
551
554
552
- if (CS% ML_radiation .or. CS% use_tidal_mixing .or. associated (dd% Kd_work )) then
555
+ if (CS% ML_radiation .or. CS% use_tidal_mixing .or. associated (dd% Kd_Work )) then
553
556
call thickness_to_dz(h, tv, dz, j, G, GV)
554
557
endif
555
558
@@ -662,7 +665,7 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
662
665
enddo ; enddo
663
666
endif
664
667
665
- if (associated (dd% Kd_work )) then
668
+ if (associated (dd% Kd_Work )) then
666
669
do k= 1 ,nz ; do i= is,ie
667
670
dd% Kd_Work(i,j,k) = GV% H_to_RZ * Kd_lay_2d(i,k) * N2_lay(i,k) * dz(i,k) ! Watt m-2 = kg s-3
668
671
enddo ; enddo
@@ -675,6 +678,12 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
675
678
enddo ; enddo
676
679
endif
677
680
681
+ if (associated (dd% Kd_Work_added)) then
682
+ do k= 1 ,nz ; do i= is,ie
683
+ dd% Kd_Work_added(i,j,k) = GV% H_to_RZ * CS% Kd_add * N2_lay(i,k) * dz(i,k) ! Watt m-2 = kg s-3
684
+ enddo ; enddo
685
+ endif
686
+
678
687
! Copy the 2-d slices into the 3-d array that is exported; this was done above for Kd_int.
679
688
if (present (Kd_lay)) then ; do k= 1 ,nz ; do i= is,ie
680
689
Kd_lay(i,j,k) = Kd_lay_2d(i,k)
@@ -754,12 +763,13 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
754
763
if (CS% use_tidal_mixing) &
755
764
call post_tidal_diagnostics(G, GV, h, CS% tidal_mixing)
756
765
757
- if (CS% id_N2 > 0 ) call post_data(CS% id_N2, dd% N2_3d, CS% diag)
758
- if (CS% id_Kd_Work > 0 ) call post_data(CS% id_Kd_Work, dd% Kd_Work, CS% diag)
759
- if (CS% id_maxTKE > 0 ) call post_data(CS% id_maxTKE, dd% maxTKE, CS% diag)
760
- if (CS% id_TKE_to_Kd > 0 ) call post_data(CS% id_TKE_to_Kd, dd% TKE_to_Kd, CS% diag)
766
+ if (CS% id_N2 > 0 ) call post_data(CS% id_N2, dd% N2_3d, CS% diag)
767
+ if (CS% id_Kd_Work > 0 ) call post_data(CS% id_Kd_Work, dd% Kd_Work, CS% diag)
768
+ if (CS% id_Kd_Work_added > 0 ) call post_data(CS% id_Kd_Work_added, dd% Kd_Work_added, CS% diag)
769
+ if (CS% id_maxTKE > 0 ) call post_data(CS% id_maxTKE, dd% maxTKE, CS% diag)
770
+ if (CS% id_TKE_to_Kd > 0 ) call post_data(CS% id_TKE_to_Kd, dd% TKE_to_Kd, CS% diag)
761
771
762
- if (CS% id_Kd_user > 0 ) call post_data(CS% id_Kd_user, dd% Kd_user, CS% diag)
772
+ if (CS% id_Kd_user > 0 ) call post_data(CS% id_Kd_user, dd% Kd_user, CS% diag)
763
773
764
774
! double diffusive mixing
765
775
if (CS% double_diffusion) then
@@ -773,7 +783,8 @@ subroutine set_diffusivity(u, v, h, u_h, v_h, tv, fluxes, optics, visc, dt, Kd_i
773
783
if (CS% id_Kd_BBL > 0 ) call post_data(CS% id_Kd_BBL, dd% Kd_BBL, CS% diag)
774
784
775
785
if (associated (dd% N2_3d)) deallocate (dd% N2_3d)
776
- if (associated (dd% Kd_work)) deallocate (dd% Kd_work)
786
+ if (associated (dd% Kd_Work)) deallocate (dd% Kd_Work)
787
+ if (associated (dd% Kd_Work_added)) deallocate (dd% Kd_Work_added)
777
788
if (associated (dd% Kd_user)) deallocate (dd% Kd_user)
778
789
if (associated (dd% maxTKE)) deallocate (dd% maxTKE)
779
790
if (associated (dd% TKE_to_Kd)) deallocate (dd% TKE_to_Kd)
@@ -2517,6 +2528,8 @@ subroutine set_diffusivity_init(Time, G, GV, US, param_file, diag, CS, int_tide_
2517
2528
if (CS% use_tidal_mixing) then
2518
2529
CS% id_Kd_Work = register_diag_field(' ocean_model' , ' Kd_Work' , diag% axesTL, Time, &
2519
2530
' Work done by Diapycnal Mixing' , ' W m-2' , conversion= US% RZ3_T3_to_W_m2)
2531
+ CS% id_Kd_Work_added = register_diag_field(' ocean_model' , ' Kd_Work_added' , diag% axesTL, Time, &
2532
+ ' Work done by additional mixing Kd_add' , ' W m-2' , conversion= US% RZ3_T3_to_W_m2)
2520
2533
CS% id_maxTKE = register_diag_field(' ocean_model' , ' maxTKE' , diag% axesTL, Time, &
2521
2534
' Maximum layer TKE' , ' m3 s-3' , conversion= (GV% H_to_m* US% Z_to_m** 2 * US% s_to_T** 3 ))
2522
2535
CS% id_TKE_to_Kd = register_diag_field(' ocean_model' , ' TKE_to_Kd' , diag% axesTL, Time, &
0 commit comments