User Tools

Site Tools


Sidebar

2013:groups:sm:blha:api

Suggestion for implementation details of the BLHA2 accord

C/C++ interface (pointer version) (olp.h)

olp.h
#ifndef __OLP_H__
#define __OLP_H__
 
#ifdef __cplusplus
extern "C" {
#endif
 
void OLP_Start(char* fname, int* ierr);
void OLP_SetParameter(char* line, double* real_part, double* cmplx_part, int* status);
void OLP_EvalSubProcess2(int* l, double* mom, double* mu, double* r, double* acc);
void OLP_Info(char olp_name[15], char olp_version[15], char cite_message[255]);
void OLP_Polvec(double* p, double* q, double* eps); // optional
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // __OLP_H__

C++ interface (reference version)

olp.h
#ifndef __OLP_H__
#define __OLP_H__
 
extern "C" {
void OLP_Start(char* fname, int &ierr);
void OLP_SetParameter(char* line, double& real_part, double& cmplx_part, int& status);
void OLP_EvalSubProcess2(int* l, double mom[], double* mu, double r[], double &acc);
void OLP_Info(char olp_name[15], char olp_version[15], char cite_message[255]);
void OLP_Polvec(double p[], double q[], double eps[]); // optional
}
 
#endif // __OLP_H__

Fortran 2003 (or later) module for binding with C/C++:

olp.f90
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
2013/groups/sm/blha/api.txt · Last modified: 2013/08/14 11:37 by johann_felix.graf_von_sodenfraunhofen