@@ -163,10 +163,12 @@ module MOM_dynamics_split_RK2
163163 integer :: id_h_PFu = - 1 , id_h_PFv = - 1
164164 integer :: id_hf_PFu_2d = - 1 , id_hf_PFv_2d = - 1
165165 integer :: id_intz_PFu_2d = - 1 , id_intz_PFv_2d = - 1
166+ integer :: id_PFu_visc_rem = - 1 , id_PFv_visc_rem = - 1
166167 ! integer :: id_hf_CAu = -1, id_hf_CAv = -1
167168 integer :: id_h_CAu = - 1 , id_h_CAv = - 1
168169 integer :: id_hf_CAu_2d = - 1 , id_hf_CAv_2d = - 1
169170 integer :: id_intz_CAu_2d = - 1 , id_intz_CAv_2d = - 1
171+ integer :: id_CAu_visc_rem = - 1 , id_CAv_visc_rem = - 1
170172
171173 ! Split scheme only.
172174 integer :: id_uav = - 1 , id_vav = - 1
@@ -175,6 +177,7 @@ module MOM_dynamics_split_RK2
175177 integer :: id_h_u_BT_accel = - 1 , id_h_v_BT_accel = - 1
176178 integer :: id_hf_u_BT_accel_2d = - 1 , id_hf_v_BT_accel_2d = - 1
177179 integer :: id_intz_u_BT_accel_2d = - 1 , id_intz_v_BT_accel_2d = - 1
180+ integer :: id_u_BT_accel_visc_rem = - 1 , id_v_BT_accel_visc_rem = - 1
178181 ! >@}
179182
180183 type (diag_ctrl), pointer :: diag ! < A structure that is used to regulate the
@@ -354,6 +357,12 @@ subroutine step_MOM_dyn_split_RK2(u, v, h, tv, visc, Time_local, dt, forces, p_s
354357 real , dimension (SZI_(G),SZJB_(G)) :: &
355358 intz_PFv_2d, intz_CAv_2d, intz_v_BT_accel_2d ! [H L T-2 ~> m2 s-2].
356359
360+ ! Diagnostics for momentum budget terms multiplied by visc_rem_[uv],
361+ real , allocatable , dimension (:,:,:) :: &
362+ PFu_visc_rem, PFv_visc_rem, & ! Pressure force accel. x visc_rem_[uv] [L T-2 ~> m s-2].
363+ CAu_visc_rem, CAv_visc_rem, & ! Coriolis force accel. x visc_rem_[uv] [L T-2 ~> m s-2].
364+ u_BT_accel_visc_rem, v_BT_accel_visc_rem ! barotropic correction accel. x visc_rem_[uv] [L T-2 ~> m s-2].
365+
357366 real :: dt_pred ! The time step for the predictor part of the baroclinic time stepping [T ~> s].
358367
359368 logical :: dyn_p_surf
@@ -1102,6 +1111,61 @@ subroutine step_MOM_dyn_split_RK2(u, v, h, tv, visc, Time_local, dt, forces, p_s
11021111 deallocate (h_v_BT_accel)
11031112 endif
11041113
1114+ if (CS% id_PFu_visc_rem > 0 ) then
1115+ allocate (PFu_visc_rem(G% IsdB:G% IedB,G% jsd:G% jed,GV% ke))
1116+ PFu_visc_rem(:,:,:) = 0.0
1117+ do k= 1 ,nz ; do j= js,je ; do I= Isq,Ieq
1118+ PFu_visc_rem(I,j,k) = CS% PFu(I,j,k) * CS% ADp% visc_rem_u(I,j,k)
1119+ enddo ; enddo ; enddo
1120+ call post_data(CS% id_PFu_visc_rem, PFu_visc_rem, CS% diag)
1121+ deallocate (PFu_visc_rem)
1122+ endif
1123+ if (CS% id_PFv_visc_rem > 0 ) then
1124+ allocate (PFv_visc_rem(G% isd:G% ied,G% JsdB:G% JedB,GV% ke))
1125+ PFv_visc_rem(:,:,:) = 0.0
1126+ do k= 1 ,nz ; do J= Jsq,Jeq ; do i= is,ie
1127+ PFv_visc_rem(i,J,k) = CS% PFv(i,J,k) * CS% ADp% visc_rem_v(i,J,k)
1128+ enddo ; enddo ; enddo
1129+ call post_data(CS% id_PFv_visc_rem, PFv_visc_rem, CS% diag)
1130+ deallocate (PFv_visc_rem)
1131+ endif
1132+ if (CS% id_CAu_visc_rem > 0 ) then
1133+ allocate (CAu_visc_rem(G% IsdB:G% IedB,G% jsd:G% jed,GV% ke))
1134+ CAu_visc_rem(:,:,:) = 0.0
1135+ do k= 1 ,nz ; do j= js,je ; do I= Isq,Ieq
1136+ CAu_visc_rem(I,j,k) = CS% CAu(I,j,k) * CS% ADp% visc_rem_u(I,j,k)
1137+ enddo ; enddo ; enddo
1138+ call post_data(CS% id_CAu_visc_rem, CAu_visc_rem, CS% diag)
1139+ deallocate (CAu_visc_rem)
1140+ endif
1141+ if (CS% id_CAv_visc_rem > 0 ) then
1142+ allocate (CAv_visc_rem(G% isd:G% ied,G% JsdB:G% JedB,GV% ke))
1143+ CAv_visc_rem(:,:,:) = 0.0
1144+ do k= 1 ,nz ; do J= Jsq,Jeq ; do i= is,ie
1145+ CAv_visc_rem(i,J,k) = CS% CAv(i,J,k) * CS% ADp% visc_rem_v(i,J,k)
1146+ enddo ; enddo ; enddo
1147+ call post_data(CS% id_CAv_visc_rem, CAv_visc_rem, CS% diag)
1148+ deallocate (CAv_visc_rem)
1149+ endif
1150+ if (CS% id_u_BT_accel_visc_rem > 0 ) then
1151+ allocate (u_BT_accel_visc_rem(G% IsdB:G% IedB,G% jsd:G% jed,GV% ke))
1152+ u_BT_accel_visc_rem(:,:,:) = 0.0
1153+ do k= 1 ,nz ; do j= js,je ; do I= Isq,Ieq
1154+ u_BT_accel_visc_rem(I,j,k) = CS% u_accel_bt(I,j,k) * CS% ADp% visc_rem_u(I,j,k)
1155+ enddo ; enddo ; enddo
1156+ call post_data(CS% id_u_BT_accel_visc_rem, u_BT_accel_visc_rem, CS% diag)
1157+ deallocate (u_BT_accel_visc_rem)
1158+ endif
1159+ if (CS% id_v_BT_accel_visc_rem > 0 ) then
1160+ allocate (v_BT_accel_visc_rem(G% isd:G% ied,G% JsdB:G% JedB,GV% ke))
1161+ v_BT_accel_visc_rem(:,:,:) = 0.0
1162+ do k= 1 ,nz ; do J= Jsq,Jeq ; do i= is,ie
1163+ v_BT_accel_visc_rem(i,J,k) = CS% v_accel_bt(i,J,k) * CS% ADp% visc_rem_v(i,J,k)
1164+ enddo ; enddo ; enddo
1165+ call post_data(CS% id_v_BT_accel_visc_rem, v_BT_accel_visc_rem, CS% diag)
1166+ deallocate (v_BT_accel_visc_rem)
1167+ endif
1168+
11051169 if (CS% debug) then
11061170 call MOM_state_chksum(" Corrector " , u, v, h, uh, vh, G, GV, US, symmetric= sym)
11071171 call uvchksum(" Corrector avg [uv]" , u_av, v_av, G% HI, haloshift= 1 , symmetric= sym, scale= US% L_T_to_m_s)
@@ -1606,6 +1670,33 @@ subroutine initialize_dyn_split_RK2(u, v, h, uh, vh, eta, Time, G, GV, US, param
16061670 ' m2 s-2' , conversion= GV% H_to_m* US% L_T2_to_m_s2)
16071671 if (CS% id_intz_v_BT_accel_2d > 0 ) call safe_alloc_ptr(CS% ADp% diag_hv,isd,ied,JsdB,JedB,nz)
16081672
1673+ CS% id_PFu_visc_rem = register_diag_field(' ocean_model' , ' PFu_visc_rem' , diag% axesCuL, Time, &
1674+ ' Zonal Pressure Force Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1675+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1676+ if (CS% id_PFu_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_u,IsdB,IedB,jsd,jed,nz)
1677+ CS% id_PFv_visc_rem = register_diag_field(' ocean_model' , ' PFv_visc_rem' , diag% axesCvL, Time, &
1678+ ' Meridional Pressure Force Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1679+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1680+ if (CS% id_PFv_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_v,isd,ied,JsdB,JedB,nz)
1681+
1682+ CS% id_CAu_visc_rem = register_diag_field(' ocean_model' , ' CAu_visc_rem' , diag% axesCuL, Time, &
1683+ ' Zonal Coriolis and Advective Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1684+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1685+ if (CS% id_CAu_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_u,IsdB,IedB,jsd,jed,nz)
1686+ CS% id_CAv_visc_rem = register_diag_field(' ocean_model' , ' CAv_visc_rem' , diag% axesCvL, Time, &
1687+ ' Meridional Coriolis and Advective Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1688+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1689+ if (CS% id_CAv_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_v,isd,ied,JsdB,JedB,nz)
1690+
1691+ CS% id_u_BT_accel_visc_rem = register_diag_field(' ocean_model' , ' u_BT_accel_visc_rem' , diag% axesCuL, Time, &
1692+ ' Barotropic Anomaly Zonal Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1693+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1694+ if (CS% id_u_BT_accel_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_u,IsdB,IedB,jsd,jed,nz)
1695+ CS% id_v_BT_accel_visc_rem = register_diag_field(' ocean_model' , ' v_BT_accel_visc_rem' , diag% axesCvL, Time, &
1696+ ' Barotropic Anomaly Meridional Acceleration multiplied by the viscous remnant' , ' m2 s-2' , &
1697+ conversion= GV% H_to_m* US% L_T2_to_m_s2)
1698+ if (CS% id_v_BT_accel_visc_rem > 0 ) call safe_alloc_ptr(CS% ADp% visc_rem_v,isd,ied,JsdB,JedB,nz)
1699+
16091700 id_clock_Cor = cpu_clock_id(' (Ocean Coriolis & mom advection)' , grain= CLOCK_MODULE)
16101701 id_clock_continuity = cpu_clock_id(' (Ocean continuity equation)' , grain= CLOCK_MODULE)
16111702 id_clock_pres = cpu_clock_id(' (Ocean pressure force)' , grain= CLOCK_MODULE)
0 commit comments