4 integer, parameter :: a
= 6
6 !$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
7 !$omp declare reduction (.add. : integer : &
8 !$omp & omp_out = omp_out .add. f3 (omp_in, -4)) &
9 !$omp & initializer (s1 (omp_priv, omp_orig))
10 interface operator (.add
.)
14 integer function f1 (x
, y
)
15 integer, intent (in
) :: x
, y
18 integer function f3 (x
, y
)
19 integer, intent (in
) :: x
, y
23 integer, intent (in
) :: y
24 integer, intent (out
) :: x
29 use udr15m1
, f4
=> f1
, f5
=> f3
, s2
=> s1
, operator (.addtwo
.) => operator (.add
.)
33 !$omp declare reduction (+ : dt : omp_out = f6 (omp_out + omp_in)) &
34 !$omp & initializer (s3 (omp_priv))
35 interface operator (+)
39 type(dt
) function f2 (x
, y
)
40 type(dt
), intent (in
) :: x
, y
43 type(dt
) function f6 (x
)
44 type(dt
), intent (in
) :: x
48 type(dt
), intent (out
) :: x
52 use udr15m2
, operator (.addthree
.) => operator (.addtwo
.), &
53 f7
=> f4
, f8
=> f6
, s4
=> s3
58 !$omp parallel do reduction (.addthree.: j) reduction (+ : d)
60 j
= j
.addthree
.iand (i
, -4)
63 if (d
%x
/= 5050 .or
. j
/= 4903) STOP 1