5 call test2 (2, 6, -2, 4, 13, 18)
6 call test3 (2, 6, -2, 4, 13, 18, 1, 1, 1)
8 call test5 (2, 6, -2, 4, 13, 18)
9 call test6 (2, 6, -2, 4, 13, 18, 1, 1, 1)
12 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
16 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l)
20 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
21 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
22 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
23 m
= i
* 100 + j
* 10 + k
27 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
28 if (m
.ne
.(600+40+18)) call abort
32 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
33 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
35 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
42 subroutine test2(v1
, v2
, v3
, v4
, v5
, v6
)
43 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
44 integer :: v1
, v2
, v3
, v4
, v5
, v6
48 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l)
52 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
53 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
54 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
55 m
= i
* 100 + j
* 10 + k
59 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
60 if (m
.ne
.(600+40+18)) call abort
64 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
65 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
67 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
74 subroutine test3(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
)
75 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
76 integer :: v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
80 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l)
84 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
85 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
86 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
87 m
= i
* 100 + j
* 10 + k
91 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
92 if (m
.ne
.(600+40+18)) call abort
96 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
97 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
99 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
107 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
111 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l) &
112 !$omp& schedule (dynamic, 5)
116 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
117 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
118 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
119 m
= i
* 100 + j
* 10 + k
123 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
124 if (m
.ne
.(600+40+18)) call abort
128 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
129 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
131 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
138 subroutine test5(v1
, v2
, v3
, v4
, v5
, v6
)
139 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
140 integer :: v1
, v2
, v3
, v4
, v5
, v6
144 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l) &
145 !$omp & schedule (guided)
149 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
150 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
151 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
152 m
= i
* 100 + j
* 10 + k
156 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
157 if (m
.ne
.(600+40+18)) call abort
161 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
162 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
164 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
171 subroutine test6(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
)
172 integer :: i
, j
, k
, a(1:7, -3:5, 12:19), m
173 integer :: v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
177 !$omp parallel do collapse (3) lastprivate (i, j, k, m) reduction (.or.:l) &
178 !$omp & schedule (dynamic)
182 l
= l
.or
.i
.lt
.2.or
.i
.gt
.6.or
.j
.lt
.-2.or
.j
.gt
.4
183 l
= l
.or
.k
.lt
.13.or
.k
.gt
.18
184 if (.not
.l
) a(i
, j
, k
) = a(i
, j
, k
) + 1
185 m
= i
* 100 + j
* 10 + k
189 if (i
.ne
.7.or
.j
.ne
.5.or
.k
.ne
.19) call abort
190 if (m
.ne
.(600+40+18)) call abort
194 if (i
.eq
.1.or
.i
.eq
.7.or
.j
.eq
.-3.or
.j
.eq
.5.or
.k
.eq
.12.or
.k
.eq
.19) then
195 if (a(i
, j
, k
).ne
.0) print *, i
, j
, k
197 if (a(i
, j
, k
).ne
.1) print *, 'kk', i
, j
, k
, a(i
, j
, k
)
204 end program collapse3