subroutine poison_face_y_3d(fld, nxl, nyl, ng, nz, qnan, pw, pe, ps, pn)
!! Poison y-face 3D ghost bands. Seam-face exclusion: see poison_face_y_2d.
integer, intent(in) :: nxl, nyl, ng, nz
real(wp), intent(inout) :: fld(nxl + 2*ng, nyl + 2*ng + 1, nz)
real(wp), intent(in) :: qnan
logical, intent(in) :: pw, pe, ps, pn
integer :: nxt, nyf, i, j, k
nxt = nxl + 2*ng
nyf = nyl + 2*ng + 1
if (pw) then
do concurrent(k=1:nz, j=1:nyf, i=1:ng)
fld(i, j, k) = qnan
end do
end if
if (pe) then
do concurrent(k=1:nz, j=1:nyf, i=ng + nxl + 1:nxt)
fld(i, j, k) = qnan
end do
end if
if (ps) then
do concurrent(k=1:nz, j=1:ng, i=1:nxt)
fld(i, j, k) = qnan
end do
end if
if (pn) then
do concurrent(k=1:nz, j=ng + nyl + 2:nyf, i=1:nxt)
fld(i, j, k) = qnan
end do
end if
end subroutine poison_face_y_3d