You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
20 lines
543 B
20 lines
543 B
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
|