apply_nudge_zonal_west Subroutine

private pure subroutine apply_nudge_zonal_west(u_layer, nx_total, ny_total, nz, i_w, j0, j1, tau_in, tau_out, dt, u_data)

Post-anomaly nudging for the west edge. “Incoming” at west = u_wall > 0 (eastward, into domain) ⟹ tau_in.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: u_layer(nx_total+1,ny_total,nz)
integer, intent(in) :: nx_total
integer, intent(in) :: ny_total
integer, intent(in) :: nz
integer, intent(in) :: i_w
integer, intent(in) :: j0
integer, intent(in) :: j1
real(kind=wp), intent(in) :: tau_in
real(kind=wp), intent(in) :: tau_out
real(kind=wp), intent(in) :: dt
real(kind=wp), intent(in) :: u_data

Calls

proc~~apply_nudge_zonal_west~~CallsGraph proc~apply_nudge_zonal_west apply_nudge_zonal_west local local proc~apply_nudge_zonal_west->local

Called by

proc~~apply_nudge_zonal_west~~CalledByGraph proc~apply_nudge_zonal_west apply_nudge_zonal_west proc~ocean_obc_apply_baroclinic ocean_obc_apply_baroclinic proc~ocean_obc_apply_baroclinic->proc~apply_nudge_zonal_west proc~run_stage_split run_stage_split proc~run_stage_split->proc~ocean_obc_apply_baroclinic proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_stage_split proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private :: g2
integer, private :: j
integer, private :: k
real(kind=wp), private :: tau
real(kind=wp), private :: u_b

Source Code

   pure subroutine apply_nudge_zonal_west(u_layer, nx_total, ny_total, nz, &
                                          i_w, j0, j1, tau_in, tau_out, dt, u_data)
      !! Post-anomaly nudging for the west edge.
      !! "Incoming" at west = u_wall > 0 (eastward, into domain) ⟹ tau_in.
      integer, intent(in) :: nx_total, ny_total, nz, i_w, j0, j1
      real(wp), intent(inout) :: u_layer(nx_total + 1, ny_total, nz)
      real(wp), intent(in) :: tau_in, tau_out, dt, u_data
      integer :: j, k
      real(wp) :: tau, g2, u_b
      do concurrent(j=j0:j1, k=1:nz) local(tau, g2, u_b)
         if (u_layer(i_w, j, k) > 0.0_wp) then
            tau = tau_in
         else
            tau = tau_out
         end if
         if (tau > 0.0_wp) then
            g2 = dt/(tau + dt)
            u_b = (1.0_wp - g2)*u_layer(i_w, j, k) + g2*u_data
            u_layer(i_w, j, k) = u_b
         end if
      end do
   end subroutine apply_nudge_zonal_west