fill_kv_scalar_buf Subroutine

private pure subroutine fill_kv_scalar_buf(kv_buf, kappa, nx, ny, nz)

Broadcast the scalar viscosity kappa into the interface-located workspace. Boundary interfaces (bed at k=1, surface at k=nz+1) are forced to zero to match the closed BCs the column solve assumes; the original scalar kernel hard-coded those BCs via α_1 = 0 and β_nz = 0.

Arguments

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

Called by

proc~~fill_kv_scalar_buf~~CalledByGraph proc~fill_kv_scalar_buf fill_kv_scalar_buf proc~vdiff_apply_momentum vdiff_apply_momentum proc~vdiff_apply_momentum->proc~fill_kv_scalar_buf proc~vdiff_apply_tracers vdiff_apply_tracers proc~vdiff_apply_tracers->proc~fill_kv_scalar_buf proc~visc_rem_precompute visc_rem_precompute proc~visc_rem_precompute->proc~vdiff_apply_momentum proc~vmix_apply_in_stage vmix_apply_in_stage proc~vmix_apply_in_stage->proc~vdiff_apply_momentum proc~vmix_apply_in_stage->proc~vdiff_apply_tracers proc~vmix_apply_in_stage->proc~visc_rem_precompute proc~run_stage run_stage proc~run_stage->proc~vmix_apply_in_stage proc~run_stage_split run_stage_split proc~run_stage_split->proc~visc_rem_precompute proc~run_stage_split->proc~vmix_apply_in_stage proc~ocean_dyn_step ocean_dyn_step proc~ocean_dyn_step->proc~run_stage 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 proc~engine_step->proc~ocean_dyn_step_split

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: j
integer, private :: k

Source Code

   pure subroutine fill_kv_scalar_buf(kv_buf, kappa, nx, ny, nz)
      !! Broadcast the scalar viscosity `kappa` into the
      !! interface-located workspace.  Boundary interfaces (bed at
      !! k=1, surface at k=nz+1) are forced to zero to match the
      !! closed BCs the column solve assumes; the original scalar
      !! kernel hard-coded those BCs via `α_1 = 0` and `β_nz = 0`.
      integer, intent(in) :: nx, ny, nz
      real(wp), intent(in) :: kappa
      real(wp), intent(out) :: kv_buf(nx, ny, nz + 1)
      integer :: i, j, k

      do concurrent(k=1:nz + 1, j=1:ny, i=1:nx)
         if (k == 1 .or. k == nz + 1) then
            kv_buf(i, j, k) = 0.0_wp
         else
            kv_buf(i, j, k) = kappa
         end if
      end do
   end subroutine fill_kv_scalar_buf