1program main 2 implicit none (type, external) 3 integer :: r, r2, i 4 integer a(0:63) 5 a = 0 6 r = 0; r2 = 0 7 !$omp parallel 8 !$omp scope 9 !$omp scope 10 !$omp do 11 do i = 0, 63 12 a(i) = a(i) + 1 13 end do 14 !$omp end do 15 !$omp end scope nowait 16 !$omp end scope nowait 17 18 !$omp scope reduction(+: r) 19 !$omp do 20 do i = 0, 63 21 r = r + i 22 if (a(i) /= 1) & 23 stop 1 24 end do 25 !$omp end do nowait 26 !$omp barrier 27 !$omp end scope nowait 28 29 !$omp barrier 30 31 if (r /= 64 * 63 / 2) & 32 stop 2 33 34 !$omp scope private (i) 35 !$omp scope reduction(+: r2) 36 !$omp do 37 do i = 0, 63 38 r2 = r2 + 2 * i 39 a(i) = a(i) + i 40 end do 41 !$omp end do nowait 42 !$omp end scope 43 !$omp end scope nowait 44 45 if (r2 /= 64 * 63) & 46 stop 3 47 48 !$omp do 49 do i = 0, 63 50 if (a(i) /= i + 1) & 51 stop 4 52 end do 53 !$omp end do nowait 54 !$omp end parallel 55end 56