| program scaltest |
| use iso_c_binding |
| implicit none |
| interface |
| subroutine scalprod(n, x_p, y_p, res) bind(c) |
| use iso_c_binding |
| integer(c_int), value :: n |
| type(c_ptr), value :: x_p, y_p |
| real(c_double) :: res |
| end subroutine scalprod |
| end interface |
| type(c_ptr) :: x_pt, y_pt |
| real(c_double), dimension(5), target :: a = (/ 1, 2, 3, 4, 5 /) |
| real(c_double), dimension(5), target :: b = (/ 2, 3, 4, 5, 6 /) |
| integer(c_int) :: n = size(a) |
| real(c_double) :: res |
| x_pt = c_loc(a) |
| y_pt = c_loc(b) |
| call scalprod(n, x_pt, y_pt, res) |
| print *, res |
| end program scaltest |