redi_open_windows_y Subroutine

private pure subroutine redi_open_windows_y(nx, ny, nz, h_layer, open_v, vKb, vKt)

v-face twin of redi_open_windows_x (south j-1, north j).

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nx
integer, intent(in) :: ny
integer, intent(in) :: nz
real(kind=wp), intent(in) :: h_layer(nx,ny,nz)
real(kind=wp), intent(in) :: open_v(nx,ny+1,nz)

Per-layer 0/1 v-face open mask (metrics%open_v, full size).

integer, intent(inout) :: vKb(nx,ny+1)
integer, intent(inout) :: vKt(nx,ny+1)

Calls

proc~~redi_open_windows_y~~CallsGraph proc~redi_open_windows_y redi_open_windows_y local local proc~redi_open_windows_y->local proc~redi_open_window redi_open_window proc~redi_open_windows_y->proc~redi_open_window rdb_vl_is_live rdb_vl_is_live proc~redi_open_windows_y->rdb_vl_is_live

Called by

proc~~redi_open_windows_y~~CalledByGraph proc~redi_open_windows_y redi_open_windows_y proc~redi_calc_coeffs redi_calc_coeffs proc~redi_calc_coeffs->proc~redi_open_windows_y proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~redi_calc_coeffs 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 proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: j
integer, private :: k
integer, private :: kb
integer, private :: kt
logical, private :: ok(NZ_STACK_MAX)

Source Code

   pure subroutine redi_open_windows_y(nx, ny, nz, h_layer, open_v, vKb, vKt)
      !! v-face twin of `redi_open_windows_x` (south `j-1`, north `j`).
      integer, intent(in) :: nx, ny, nz
      real(wp), intent(in) :: h_layer(nx, ny, nz)
      real(wp), intent(in) :: open_v(nx, ny + 1, nz)
         !! Per-layer 0/1 v-face open mask (`metrics%open_v`, full size).
      integer, intent(inout) :: vKb(nx, ny + 1), vKt(nx, ny + 1)
      integer :: i, j, k, kb, kt
      logical :: ok(NZ_STACK_MAX)

      do concurrent(j=2:ny, i=1:nx) local(k, kb, kt, ok)
         do k = 1, nz
            ok(k) = open_v(i, j, k) > 0.5_wp .and. &
                    rdb_vl_is_live(h_layer(i, j - 1, k)) .and. &
                    rdb_vl_is_live(h_layer(i, j, k))
         end do
         call redi_open_window(nz, ok, kb, kt)
         vKb(i, j) = kb
         vKt(i, j) = kt
      end do
   end subroutine redi_open_windows_y