| program main |
| implicit none |
| integer a(0:63) |
| integer r, r2, i, n |
| a = 0 |
| r = 0 |
| r2 = 0 |
| n = 64 |
| !$omp parallel |
| !$omp scope |
| !$omp scope firstprivate (n) |
| !$omp do |
| do i = 0, 63 |
| a(i) = a(i) + 1 |
| end do |
| !$omp end scope nowait |
| !$omp end scope nowait |
| |
| !$omp scope reduction(+: r) firstprivate (n) |
| !$omp do |
| do i = 0, 63 |
| r = r + i |
| if (a(i) /= 1) & |
| error stop |
| end do |
| !$omp end do nowait |
| !$omp barrier |
| if (n /= 64) then |
| error stop |
| else |
| n = 128 |
| end if |
| !$omp end scope nowait |
| |
| !$omp barrier |
| if (r /= 64 * 63 / 2) & |
| error stop |
| !$omp scope private (i) |
| !$omp scope reduction(+: r2) |
| !$omp do |
| do i = 0, 63 |
| r2 = r2 + 2 * i |
| a(i) = a(i) + i |
| end do |
| !$omp end do nowait |
| !$omp end scope |
| !$omp end scope nowait |
| if (r2 /= 64 * 63) & |
| error stop |
| !$omp do |
| do i = 0, 63 |
| if (a(i) /= i + 1) & |
| error stop |
| end do |
| !$omp end do nowait |
| !$omp end parallel |
| end program |