9 !$omp declare reduction(+:dt:omp_out%x=omp_out%x+omp_in%x)
10 !$omp declare reduction(-:dt:omp_out%x=omp_out%x+omp_in%x)
11 !$omp declare reduction(*:dt:omp_out%x=omp_out%x+omp_in%x)
12 !$omp declare reduction(.and.:dt:omp_out%x=omp_out%x+omp_in%x)
13 !$omp declare reduction(.or.:dt:omp_out%x=omp_out%x+3*omp_in%x)
14 !$omp declare reduction(.eqv.:dt:omp_out%x=omp_out%x+omp_in%x)
15 !$omp declare reduction(.neqv.:dt:omp_out%x=omp_out%x+omp_in%x)
16 !$omp declare reduction(min:dt:omp_out%x=omp_out%x+omp_in%x)
17 !$omp declare reduction(max:dt:omp_out%x=omp_out%x+omp_in%x)
18 !$omp declare reduction(iand:dt:omp_out%x=omp_out%x+omp_in%x)
19 !$omp declare reduction(ior:dt:omp_out%x=omp_out%x+omp_in%x)
20 !$omp declare reduction(ieor:dt:omp_out%x=omp_out%x+omp_in%x)
21 interface operator(.and
.)
22 function addme1 (x
, y
)
24 type (dt
), intent (in
) :: x
, y
28 interface operator(.or
.)
29 function addme2 (x
, y
)
31 type (dt
), intent (in
) :: x
, y
35 interface operator(.eqv
.)
36 function addme3 (x
, y
)
38 type (dt
), intent (in
) :: x
, y
42 interface operator(.neqv
.)
43 function addme4 (x
, y
)
45 type (dt
), intent (in
) :: x
, y
50 function addme5 (x
, y
)
52 type (dt
), intent (in
) :: x
, y
57 function addme6 (x
, y
)
59 type (dt
), intent (in
) :: x
, y
64 function addme7 (x
, y
)
66 type (dt
), intent (in
) :: x
, y
70 type(dt
) :: j
, k
, l
, m
, n
, o
, p
, q
, r
, s
, t
, u
72 !$omp parallel do reduction(.and.:j) reduction(.or.:k) &
73 !$omp & reduction(.eqv.:l) reduction(.neqv.:m) &
74 !$omp & reduction(min:n) reduction(max:o) &
75 !$omp & reduction(iand:p) reduction(ior:q) reduction (ieor:r) &
76 !$omp & reduction(+:s) reduction(-:t) reduction(*:u)
91 if (j
%x
/= 5050 .or
. k
%x
/= 30300 .or
. l
%x
/= 15150) STOP 1
92 if (m
%x
/= 5050 .or
. n
%x
/= 10100 .or
. o
%x
/= 15150) STOP 2
93 if (p
%x
/= 5050 .or
. q
%x
/= 10100 .or
. r
%x
/= 15150) STOP 3
94 if (s
%x
/= 5050 .or
. t
%x
/= 10100 .or
. u
%x
/= 15150) STOP 4