2022-11-04 09:35:42 -07:00

27 lines
717 B
Fortran

! @@name: doacross.3
! @@type: F-free
! @@operation: compile
! @@expect: ct-error
! @@version: omp_5.2
subroutine work_wrong(N, p)
integer :: N
real(8), dimension(N,N,N) :: p
integer :: i, j, k
real(8) :: tmp1, tmp2, tmp3
!$omp parallel do ordered(2) private(i,j,k,tmp1,tmp2,tmp3)
do i=2, N-1
do j=2, N-1
!$omp ordered doacross(sink: i-1,j) doacross(sink: i+1,j) &
!$omp& doacross(sink: i,j-1) doacross(sink: i,j+1)
do k=2, N-1
tmp1 = p(k-1,j,i) + p(k+1,j,i)
tmp2 = p(k,j-1,i) + p(k,j+1,i)
tmp3 = p(k,j,i-1) + p(k,j,i+1)
p(k,j,i) = (tmp1 + tmp2 + tmp3) / 6.0
end do
! missing !$omp ordered doacross(source:)
end do
end do
end subroutine