module olp
implicit none
public :: OLP_Start, OLP_EvalSubProcess2, OLP_SetParameter
public :: OLP_Info, OLP_Polvec
contains
subroutine OLP_Start(contract_file_name,ierr) &
& bind(C,name="OLP_Start")
use, intrinsic :: iso_c_binding
implicit none
character(kind=c_char,len=1), intent(in) :: contract_file_name
integer(kind=c_int), intent(out) :: ierr
interface
function strlen(s) bind(C,name='strlen')
use, intrinsic :: iso_c_binding
implicit none
character(kind=c_char,len=1), intent(in) :: s
integer(kind=c_int) :: strlen
end function strlen
end interface
! ...
! open( ... , file=contract_file_name(1:strlen(l)), ...)
! ...
end subroutine
subroutine OLP_SetParameter(variable_name, real_part, complex_part, success) &
& bind(C,name="OLP_SetParameter")
use, intrinsic :: iso_c_binding
implicit none
character(kind=c_char,len=1), intent(in) :: variable_name
real(kind=c_double), intent(in) :: real_part, complex_part
integer(kind=c_int), intent(out) :: success
!....
end subroutine
subroutine OLP_EvalSubProcess2(label, momenta, mu, res, acc) &
& bind(C,name="OLP_EvalSubProcess2")
use, intrinsic :: iso_c_binding
implicit none
integer(kind=c_int), intent(in) :: label
real(kind=c_double), intent(in) :: mu
real(kind=c_double), dimension(50), intent(in) :: momenta
real(kind=c_double), dimension(60), intent(out) :: res
real(kind=c_double), dimension(1), intent(out) :: acc
!....
end subroutine OLP_EvalSubProcess2
subroutine OLP_Info(olp_name, olp_version, cite_message) &
& bind(C,name="OLP_Info")
use, intrinsic :: iso_c_binding
implicit none
character(kind=c_char,len=1), intent(out) :: olp_name
character(kind=c_char,len=1), intent(out) :: olp_version
character(kind=c_char,len=1), intent(out) :: cite_message
! ...
end subroutine OLP_Info
subroutine OLP_Polvec(p, q, eps) &
& bind(C,name="OLP_PolVec")
use, intrinsic :: iso_c_binding
implicit none
real(ki), dimension(4), intent(in) :: p,q
real(ki), dimension(8), intent(out) :: eps
!.... optional
end subroutine OLP_Polvec
end module olp