diff --git a/src/parameterizations/vertical/MOM_diabatic_driver.F90 b/src/parameterizations/vertical/MOM_diabatic_driver.F90 index 0cab88d21b..a85dbdd787 100644 --- a/src/parameterizations/vertical/MOM_diabatic_driver.F90 +++ b/src/parameterizations/vertical/MOM_diabatic_driver.F90 @@ -453,31 +453,33 @@ subroutine diabatic(u, v, h, tv, Hml, fluxes, visc, ADp, CDp, dt, Time_end, & ! perturb diabatic tendencies. ! These stochastic perturbations do not conserve heat, salt or mass. do k=1,nz; do j=js,je; do i=is,ie - h(i,j,k) = max(h_in(i,j,k) + (h(i,j,k)-h_in(i,j,k)) * stoch_CS%sppt_wts(i,j), GV%Angstrom_H) - tv%S(i,j,k) = max(s_in(i,j,k) + (tv%S(i,j,k)-s_in(i,j,k)) * stoch_CS%sppt_wts(i,j), 0.0) + h(i,j,k) = max(h_in(i,j,k) + (h(i,j,k)-h_in(i,j,k)) * stoch_CS%sppt_wts(i,j), GV%Angstrom_H) + tv%S(i,j,k) = max(s_in(i,j,k) + (tv%S(i,j,k)-s_in(i,j,k)) * stoch_CS%sppt_wts(i,j), 0.0) enddo; enddo; enddo ! now that we have updated thickness and salinity, calculate freeing point H_to_RL2_T2 = GV%H_to_RZ * GV%g_Earth do j=js,je - ps(:) = 0.0 - if (associated(fluxes%p_surf)) then ; do i=is,ie - ps(i) = fluxes%p_surf(i,j) - enddo ; endif - - do i=is,ie - pressure(i,1) = ps(i) + (0.5*H_to_RL2_T2)*h(i,j,1) - enddo - do k=2,nz ; do i=is,ie - pressure(i,k) = pressure(i,k-1) + & - (0.5*H_to_RL2_T2) * (h(i,j,k) + h(i,j,k-1)) - enddo ; enddo - do k=1,nz - call calculate_TFreeze(tv%S(is:ie,j,k), pressure(is:ie,k), T_freeze(is:ie), & - tv%eqn_of_state) - do i=is,ie - tv%T(i,j,k) = max(t_in(i,j,k) + (tv%T(i,j,k)-t_in(i,j,k)) * stoch_CS%sppt_wts(i,j), T_freeze(i)) - enddo - enddo + ps(:) = 0.0 + if (associated(fluxes%p_surf)) then + do i=is,ie + ps(i) = fluxes%p_surf(i,j) + enddo + endif + + do i=is,ie + pressure(i,1) = ps(i) + (0.5*H_to_RL2_T2)*h(i,j,1) + enddo + do k=2,nz ; do i=is,ie + pressure(i,k) = pressure(i,k-1) + & + (0.5*H_to_RL2_T2) * (h(i,j,k) + h(i,j,k-1)) + enddo ; enddo + do k=1,nz + call calculate_TFreeze(tv%S(is:ie,j,k), pressure(is:ie,k), T_freeze(is:ie), & + tv%eqn_of_state) + do i=is,ie + tv%T(i,j,k) = max(t_in(i,j,k) + (tv%T(i,j,k)-t_in(i,j,k)) * stoch_CS%sppt_wts(i,j), T_freeze(i)) + enddo + enddo enddo deallocate(h_in, t_in, s_in)