cmake/Tests/FindOpenMP/Test/scalprod.f90.in
2017-07-20 19:35:53 +02:00

20 lines
543 B
Fortran

subroutine scalprod(n, x_p, y_p, res) bind(c)
use iso_c_binding
implicit none
integer(c_int), intent(in), value :: n
type(c_ptr), intent(in), value :: x_p, y_p
real(c_double), pointer :: x(:), y(:)
integer :: i
real(c_double) :: res
real(c_double) :: scalpt = 0
call c_f_pointer(x_p, x, shape=[n])
call c_f_pointer(y_p, y, shape=[n])
res = 0
!$omp parallel do private(scalpt), reduction(+:res)
do i=1,n
scalpt = y(i) * x(i)
res = res + scalpt
end do
end subroutine scalprod