| 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 |