OpenMP-Examples/sources/Example_doacross.3.f90

27 lines
698 B
Fortran

! @@name: doacross.3f
! @@type: F-free
! @@compilable: no
! @@linkable: no
! @@expect: failure
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 depend(sink: i-1,j) depend(sink: i+1,j) &
!$omp& depend(sink: i,j-1) depend(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 depend(source)
end do
end do
end subroutine