4 !$omp declare target (N, Q)
5 integer, parameter :: N
= 10
8 real function Pfun (i
, k
)
10 integer, intent(in
) :: i
, k
11 Pfun
= (Q(i
,k
) * Q(k
,i
))
15 real function accum (k
) result (tmp
)
20 !$omp parallel do reduction(+:tmp)
22 tmp
= tmp
+ Pfun (k
, i
)
27 real function accum_ref (k
) result (tmp
)
32 tmp
= tmp
+ Pfun (k
, i
)
41 Q(i
,j
) = 0.001 * i
* j
46 subroutine check (a
, b
)
48 real, parameter :: EPS
= 0.00001
51 else if (a
== 0.0) then
56 if (err
> EPS
.or
. err
< -EPS
) call abort
62 real :: accum
, accum_ref
64 !$omp target update to(Q)
66 call check (accum (i
), accum_ref (i
))