5 subroutine init (Q
, rows
, cols
)
6 integer :: i
, k
, rows
, cols
7 double precision :: Q(rows
,cols
)
15 subroutine check (P
, Q
, rows
, cols
)
16 integer :: i
, k
, rows
, cols
17 double precision, parameter :: EPS
= 0.00001
18 double precision :: P(rows
,cols
), Q(rows
,cols
), diff
21 diff
= P(i
,k
) - Q(i
,k
)
22 if (diff
> EPS
.or
. -diff
> EPS
) call abort
27 subroutine gramSchmidt_ref (Q
, rows
, cols
)
28 integer :: i
, k
, rows
, cols
29 double precision :: Q(rows
,cols
), tmp
33 tmp
= tmp
+ (Q(i
,k
) * Q(i
,k
))
35 tmp
= 1.0d0 / sqrt (tmp
)
42 subroutine gramSchmidt (Q
, rows
, cols
)
43 integer :: i
, k
, rows
, cols
44 double precision :: Q(rows
,cols
), tmp
45 !$omp target data map(Q)
48 !$omp target map(tofrom: tmp)
49 !$omp parallel do reduction(+:tmp)
51 tmp
= tmp
+ (Q(i
,k
) * Q(i
,k
))
54 tmp
= 1.0d0 / sqrt (tmp
)
67 use e_51_3_mod
, only
: init
, check
, gramSchmidt
, gramSchmidt_ref
69 double precision, pointer :: P(:,:), Q(:,:)
72 allocate (P(rows
,cols
), Q(rows
,cols
))
73 call init (P
, rows
, cols
)
74 call init (Q
, rows
, cols
)
75 call gramSchmidt_ref (P
, rows
, cols
)
76 call gramSchmidt (Q
, rows
, cols
)
77 call check (P
, Q
, rows
, cols
)