subroutine YbcSendRecv() use mpimod implicit none integer :: i,j,k if (ntiles(2) == 1) then !$omp target teams distribute parallel do collapse(3) do k=1,kn-1 do j=1,mgn do i=1,in-1 select case(boundary_yin) case(periodicb) BrYstt(i,j,k,1:nbc) = BsYend(i,j,k,1:nbc) case(reflection) BrYstt(i,j,k,1:nbc) = BsYstt(i,mgn-j+1,k,1:nbc) BrYstt(i,j,k,nv2) = -BrYstt(i,j,k,nv2) case(outflow) BrYstt(i,j,k,1:nbc) = BsYstt(i,1,k,1:nbc) end select select case(boundary_yout) case(periodicb) BrYend(i,j,k,1:nbc) = BsYstt(i,j,k,1:nbc) case(reflection) BrYend(i,j,k,1:nbc) = BsYend(i,mgn-j+1,k,1:nbc) BrYend(i,j,k,nv2) = -BrYend(i,j,k,nv2) case(outflow) BrYend(i,j,k,1:nbc) = BsYend(i,mgn,k,1:nbc) end select end do end do end do return end if !$omp target update from(BsYstt, BsYend) if (n2m /= MPI_PROC_NULL) then call MPI_IRECV(BrYstt, size(BrYstt), MPI_DOUBLE_PRECISION, n2m, 2100, comm3d, req(nreq+1), ierr) nreq = nreq + 1 call MPI_ISEND(BsYstt, size(BsYstt), MPI_DOUBLE_PRECISION, n2m, 2200, comm3d, req(nreq+1), ierr) nreq = nreq + 1 else if (boundary_yin == reflection) then !$omp target teams distribute parallel do collapse(3) do k=1,kn-1; do j=1,mgn; do i=1,in-1 BrYstt(i,j,k,1:nbc) = BsYstt(i,mgn-j+1,k,1:nbc) BrYstt(i,j,k,nv2) = -BrYstt(i,j,k,nv2) end do; end do; end do else if (boundary_yin == outflow) then !$omp target teams distribute parallel do collapse(3) do k=1,kn-1; do j=1,mgn; do i=1,in-1 BrYstt(i,j,k,1:nbc) = BsYstt(i,1,k,1:nbc) end do; end do; end do end if end if if (n2p /= MPI_PROC_NULL) then call MPI_IRECV(BrYend, size(BrYend), MPI_DOUBLE_PRECISION, n2p, 2200, comm3d, req(nreq+1), ierr) nreq = nreq + 1 call MPI_ISEND(BsYend, size(BsYend), MPI_DOUBLE_PRECISION, n2p, 2100, comm3d, req(nreq+1), ierr) nreq = nreq + 1 else if (boundary_yout == reflection) then !$omp target teams distribute parallel do collapse(3) do k=1,kn-1; do j=1,mgn; do i=1,in-1 BrYend(i,j,k,1:nbc) = BsYend(i,mgn-j+1,k,1:nbc) BrYend(i,j,k,nv2) = -BrYend(i,j,k,nv2) end do; end do; end do else if (boundary_yout == outflow) then !$omp target teams distribute parallel do collapse(3) do k=1,kn-1; do j=1,mgn; do i=1,in-1 BrYend(i,j,k,1:nbc) = BsYend(i,mgn,k,1:nbc) end do; end do; end do end if end if if (nreq /= 0) then call MPI_WAITALL(nreq, req, stat, ierr) if (n2m /= MPI_PROC_NULL) then !$omp target update to(BrYstt) end if if (n2p /= MPI_PROC_NULL) then !$omp target update to(BrYend) end if nreq = 0 end if end subroutine YbcSendRecv