pure subroutine fill_ghost_south_sign(hTr, h_layer, v_layer, &
nx_total, ny_total, nz, &
j_s, i0, i1, nghost, clamped_tr_s)
!! Sign-switch ghost fill for the south edge.
integer, intent(in) :: nx_total, ny_total, nz, nghost
real(wp), intent(inout) :: hTr(nx_total, ny_total, nz)
real(wp), intent(in) :: h_layer(nx_total, ny_total, nz)
real(wp), intent(in) :: v_layer(nx_total, ny_total + 1, nz)
integer, intent(in) :: j_s, i0, i1
real(wp), intent(in) :: clamped_tr_s
integer :: i, k, g
real(wp) :: hTr_bc, hTr_int
do concurrent(k=1:nz, i=i0:i1, g=1:nghost) local(hTr_bc, hTr_int)
if (v_layer(i, j_s, k) > 0.0_wp) then
hTr_bc = clamped_tr_s*h_layer(i, g, k)
hTr(i, g, k) = hTr_bc
else
hTr_int = hTr(i, j_s, k)
hTr(i, g, k) = hTr_int
end if
end do
end subroutine fill_ghost_south_sign