subroutine poison_centre_3d(fld, nxl, nyl, ng, nz, qnan, pw, pe, ps, pn)
!! Poison centre-type 3D ghost bands.
integer, intent(in) :: nxl, nyl, ng, nz
real(wp), intent(inout) :: fld(nxl + 2*ng, nyl + 2*ng, nz)
real(wp), intent(in) :: qnan
logical, intent(in) :: pw, pe, ps, pn
integer :: nxt, nyt, i, j, k
nxt = nxl + 2*ng
nyt = nyl + 2*ng
! West band: i = 1..ng
if (pw) then
do concurrent(k=1:nz, j=1:nyt, i=1:ng)
fld(i, j, k) = qnan
end do
end if
! East band: i = ng+nxl+1..nxt
if (pe) then
do concurrent(k=1:nz, j=1:nyt, i=ng + nxl + 1:nxt)
fld(i, j, k) = qnan
end do
end if
! South band: j = 1..ng
if (ps) then
do concurrent(k=1:nz, j=1:ng, i=1:nxt)
fld(i, j, k) = qnan
end do
end if
! North band: j = ng+nyl+1..nyt
if (pn) then
do concurrent(k=1:nz, j=ng + nyl + 1:nyt, i=1:nxt)
fld(i, j, k) = qnan
end do
end if
end subroutine poison_centre_3d