Skip to content

Commit

Permalink
Merge pull request #8 from jskenigson/stoch_eos_ncar_corrected_dev
Browse files Browse the repository at this point in the history
Shrink halos for SGS T var parameterization
  • Loading branch information
jskenigson authored Jun 15, 2021
2 parents 8619555 + 1ce3338 commit 2f93066
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 18 deletions.
1 change: 1 addition & 0 deletions src/core/MOM.F90
Original file line number Diff line number Diff line change
Expand Up @@ -999,6 +999,7 @@ subroutine step_MOM_dynamics(forces, p_surf_begin, p_surf_end, dt, dt_thermo, &
call cpu_clock_end(id_clock_stoch)
call cpu_clock_begin(id_clock_varT)
call MOM_calc_varT(G,GV,h,CS%tv,CS%stoch_eos_CS)
call pass_var(CS%tv%varT, G%Domain,clock=id_clock_pass,halo=1)
call cpu_clock_end(id_clock_varT)

if ((CS%t_dyn_rel_adv == 0.0) .and. CS%thickness_diffuse .and. CS%thickness_diffuse_first) then
Expand Down
9 changes: 4 additions & 5 deletions src/core/MOM_stoch_eos.F90
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ subroutine MOM_calc_varT(G,Gv,h,tv,stoch_eos_CS)
! still a poor approximation in the interior when coordinates are strongly tilted.
if (.not. associated(tv%varT)) call safe_alloc_ptr(tv%varT, G%isd, G%ied, G%jsd, G%jed, GV%ke)
do k=1,G%ke
do j=G%isc-1,G%iec+1
do i=G%jsc-1,G%jec+1
do j=G%isc,G%iec
do i=G%jsc,G%jec
hl(1) = h(i,j,k) * G%mask2dT(i,j)
hl(2) = h(i-1,j,k) * G%mask2dCu(I-1,j)
hl(3) = h(i+1,j,k) * G%mask2dCu(I,j)
Expand All @@ -184,10 +184,9 @@ subroutine MOM_calc_varT(G,Gv,h,tv,stoch_eos_CS)
enddo
! if stochastic, perturb
if (stoch_eos_CS%use_stoch_eos) then
call pass_var(stoch_eos_CS%pattern, G%Domain)
do k=1,G%ke
do j=G%jsc-1,G%jec+1
do i=G%isc-1,G%iec+1
do j=G%jsc,G%jec
do i=G%isc,G%iec
tv%varT(i,j,k) = exp (stoch_eos_CS%pattern(i,j)) * tv%varT(i,j,k)
enddo
enddo
Expand Down
20 changes: 7 additions & 13 deletions src/parameterizations/lateral/MOM_thickness_diffuse.F90
Original file line number Diff line number Diff line change
Expand Up @@ -678,8 +678,6 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
real :: mn_T2 ! mean of T**2 in local stencil [degC]
real :: hl(5) ! Copy of local stencil of H [H ~> m]
real :: r_sm_H ! Reciprocal of sum of H in local stencil [H-1 ~> m-1]
real, dimension(SZI_(G), SZJ_(G), SZK_(G)) :: Tsgs2 ! Sub-grid temperature variance [degC2]

real, dimension(SZIB_(G), SZJ_(G), SZK_(G)+1) :: diag_sfn_x, diag_sfn_unlim_x ! Diagnostics
real, dimension(SZI_(G), SZJB_(G), SZK_(G)+1) :: diag_sfn_y, diag_sfn_unlim_y ! Diagnostics
logical :: present_int_slope_u, present_int_slope_v
Expand Down Expand Up @@ -722,15 +720,14 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV

if (use_EOS) then
halo = 1 ! Default halo to fill is 1
if (use_Stanley) halo = 2 ! Need wider valid halo for gradients of T
call vert_fill_TS(h, tv%T, tv%S, CS%kappa_smooth*dt, T, S, G, GV, halo, larger_h_denom=.true.)
endif

if (CS%use_FGNV_streamfn .and. .not. associated(cg1)) call MOM_error(FATAL, &
"cg1 must be associated when using FGNV streamfunction.")

!$OMP parallel default(none) shared(is,ie,js,je,h_avail_rsum,pres,h_avail,I4dt, use_Stanley, &
!$OMP CS,G,GV,tv,h,h_frac,nz,uhtot,Work_u,vhtot,Work_v,Tsgs2,T, &
!$OMP CS,G,GV,tv,h,h_frac,nz,uhtot,Work_u,vhtot,Work_v,T, &
!$OMP diag_sfn_x, diag_sfn_y, diag_sfn_unlim_x, diag_sfn_unlim_y ) &
!$OMP private(hl,r_sm_H,Tl,mn_T,mn_T2)
! Find the maximum and minimum permitted streamfunction.
Expand All @@ -745,9 +742,6 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
h_frac(i,j,1) = 1.0
pres(i,j,2) = pres(i,j,1) + (GV%g_Earth*GV%H_to_RZ) * h(i,j,1)
enddo ; enddo
if (use_Stanley) then
Tsgs2 = tv%varT
endif
!$OMP do
do j=js-1,je+1
do k=2,nz ; do i=is-1,ie+1
Expand Down Expand Up @@ -779,7 +773,7 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
!$OMP int_slope_u,KH_u,uhtot,h_frac,h_avail_rsum, &
!$OMP uhD,h_avail,G_scale,Work_u,CS,slope_x,cg1, &
!$OMP diag_sfn_x, diag_sfn_unlim_x,N2_floor,EOSdom_u, &
!$OMP use_stanley, Tsgs2, &
!$OMP use_Stanley, &
!$OMP present_slope_x,G_rho0,Slope_x_PE,hN2_x_PE) &
!$OMP private(drdiA,drdiB,drdkL,drdkR,pres_u,T_u,S_u, &
!$OMP drho_dT_u,drho_dS_u,hg2A,hg2B,hg2L,hg2R,haA, &
Expand Down Expand Up @@ -837,8 +831,8 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
if (use_Stanley) then
! Correction to the horizontal density gradient due to nonlinearity in
! the EOS rectifying SGS temperature anomalies
drdiA = drdiA + drho_dT_dT_u(I) * 0.5 * ( Tsgs2(i+1,j,k-1)-Tsgs2(i,j,k-1) )
drdiB = drdiB + drho_dT_dT_u(I) * 0.5 * ( Tsgs2(i+1,j,k)-Tsgs2(i,j,k) )
drdiA = drdiA + drho_dT_dT_u(I) * 0.5 * ( tv%varT(i+1,j,k-1)-tv%varT(i,j,k-1) )
drdiB = drdiB + drho_dT_dT_u(I) * 0.5 * ( tv%varT(i+1,j,k)-tv%varT(i,j,k) )
endif
if (find_work) drdi_u(I,k) = drdiB

Expand Down Expand Up @@ -1047,7 +1041,7 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
!$OMP int_slope_v,KH_v,vhtot,h_frac,h_avail_rsum, &
!$OMP vhD,h_avail,G_scale,Work_v,CS,slope_y,cg1, &
!$OMP diag_sfn_y,diag_sfn_unlim_y,N2_floor,EOSdom_v,&
!$OMP use_stanley, Tsgs2, &
!$OMP use_Stanley, &
!$OMP present_slope_y,G_rho0,Slope_y_PE,hN2_y_PE) &
!$OMP private(drdjA,drdjB,drdkL,drdkR,pres_v,T_v,S_v, &
!$OMP drho_dT_v,drho_dS_v,hg2A,hg2B,hg2L,hg2R,haA, &
Expand Down Expand Up @@ -1102,8 +1096,8 @@ subroutine thickness_diffuse_full(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV
if (use_Stanley) then
! Correction to the horizontal density gradient due to nonlinearity in
! the EOS rectifying SGS temperature anomalies
drdjA = drdjA + drho_dT_dT_v(I) * 0.5 * ( Tsgs2(i,j+1,k-1)-Tsgs2(i,j,k-1) )
drdjB = drdjB + drho_dT_dT_v(I) * 0.5 * ( Tsgs2(i,j+1,k)-Tsgs2(i,j,k) )
drdjA = drdjA + drho_dT_dT_v(I) * 0.5 * ( tv%varT(i,j+1,k-1)-tv%varT(i,j,k-1) )
drdjB = drdjB + drho_dT_dT_v(I) * 0.5 * ( tv%varT(i,j+1,k)-tv%varT(i,j,k) )
endif

if (find_work) drdj_v(i,k) = drdjB
Expand Down

0 comments on commit 2f93066

Please sign in to comment.