Index: 95/branches/golem95_without_olo_cmake/CMakeLists.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/CMakeLists.txt	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/CMakeLists.txt	(revision 170)
@@ -1,62 +1,61 @@
 # we require at least version 2.8 (may it works with version 2.6, to be checked)
 cmake_minimum_required(VERSION 2.8)
 project(Golem)
 enable_language(Fortran)
 #message("test dossier : ${Golem_SOURCE_DIR}")
 #
 # we create a temporary directory temp_ligolem95 to store the .mod file and the lib
 #
 set(my_location ${Golem_SOURCE_DIR}/build/temp_libgolem95)
 set(LIBRARY_OUTPUT_PATH ${my_location}/lib)
 set(my_include ${my_location}/include)
 #
 # with-precision must be double or quadrupole, it will determined the precision used
 # in the computation. We also write the file src/module/precision_golem.f90 from 
 # src/module/precision_golem.f90.in
 # It is double by default but can be overwritten by passing to cmake the 
 # option -Dwith_precision=quadrupole
 #
 set(with-precision double CACHE STRING "precision of the loop library")
 if(${with-precision} STREQUAL double)
   set(fortran_real_kind 8)
 elseif(${with-precision} STREQUAL quadrupole)
   set(fortran_real_kind 16)
 else(${with-precision} STREQUAL double)
   message(FATAL_ERROR "We are in trouble....the variable with-precision which is set to ${with-precision} has not the right value : double or quadrupole")
 endif(${with-precision} STREQUAL double)
 configure_file(${Golem_SOURCE_DIR}/src/module/precision_golem.f90.in ${Golem_SOURCE_DIR}/src/module/precision_golem.f90 @ONLY)
 #
 # we define the directory in which the compiler will find the .mod files
 # checked with gfortran and g95, need to be checked with other fortran compilers
 #
 set(CMAKE_Fortran_MODULE_DIRECTORY ${my_include})
 #
 # type_lib must be STATIC or SHARED. 
 # It defines the type of library which will be built
 # It is SHARED by default but can be overwritten by passing to cmake the 
 # option -Dtype_lib=STATIC
 #
 set(type_lib SHARED CACHE STRING "static or shared library")
 #
 if(${type_lib} STREQUAL SHARED)
   set(CMAKE_Fortran_FLAGS "-fPIC")
 endif(${type_lib} STREQUAL SHARED)
 #
 # we add the following sub directory which contains CMakeLists.txt file
 #
 add_subdirectory(avh_olo-2.2.1)
 add_subdirectory(src)
 #
 # then we build the library golem (which depends on the library avh_olo) with all the object target created in each sub-directories of src
 #
-add_library(golem ${type_lib} $<TARGET_OBJECTS:module> $<TARGET_OBJECTS:kinematic> $<TARGET_OBJECTS:numerical> $<TARGET_OBJECTS:one_point> $<TARGET_OBJECTS:two_point> $<TARGET_OBJECTS:three_point> $<TARGET_OBJECTS:four_point> $<TARGET_OBJECTS:form_factor> $<TARGET_OBJECTS:interface>)
-target_link_libraries(golem avh_olo)
+add_library(golem ${type_lib} $<TARGET_OBJECTS:module> $<TARGET_OBJECTS:kinematic> $<TARGET_OBJECTS:numerical> $<TARGET_OBJECTS:one_point> $<TARGET_OBJECTS:two_point> $<TARGET_OBJECTS:three_point> $<TARGET_OBJECTS:four_point> $<TARGET_OBJECTS:form_factor> $<TARGET_OBJECTS:interface> $<TARGET_OBJECTS:avh_olo_obj>)
 #
 # we configure the CMakeList.txt of the demos directory to be able to build the Makefile of this directory
 #
 configure_file(${Golem_SOURCE_DIR}/demos/CMakeLists.txt.in ${Golem_SOURCE_DIR}/demos/CMakeLists.txt @ONLY)
 #
 # then we install the .mod files and the golem library in the chosen location
 #
 install(TARGETS golem LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
 install(DIRECTORY ${my_include} DESTINATION ${CMAKE_INSTALL_PREFIX})
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/CMakeLists.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/CMakeLists.txt	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/CMakeLists.txt	(revision 170)
@@ -1,11 +1,8 @@
-cmake_minimum_required(VERSION 2.8)
-enable_language(Fortran)
+include_directories(${my_include})
 file(
     GLOB
     source_files
     *.f90
 )
 
-#add_library(avh_olo SHARED ${source_files})
-add_library(avh_olo STATIC ${source_files})
-install(TARGETS avh_olo LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
+add_library(avh_olo_obj OBJECT ${source_files})
Index: 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90	(revision 170)
@@ -1,434 +1,517 @@
 ! 
 ! this program computes three-point functions
 ! in n and n+2 dimensions.
 ! One can use the form factors
 ! or directly the dedicated three-point functions.
 ! The normalisation is as follows:
 ! We define I_N^n= mu^(4-n) \int d^n k/(i*Pi^(n/2))*func(k,p_i)
 ! = r_Gam *(P2/eps^2+P1/eps+P0)
 ! n=4-2*eps
 ! r_Gam= Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)
 ! the program gives numbers for P2,P1,P0
 ! the default value for the scale \mu is 1, 
 ! it can be changed by the user by defining mu2_scale_par = xxx
 !
 program main
   !
   use precision_golem ! to get the type ki (for real and complex)
   use matrice_s
   use form_factor_type
   use form_factor_3p ! module containing the three-point form factors 
   use constante
   use generic_function_3p ! module containing the generic three-point function
   use parametre
+  use avh_olo, only : olo_c0,olo_onshell,olo_scale
+  ! test
+  !use func_gn
+  use function_3p1m_2mi
   !
   implicit none
   !
   type(form_factor) :: res6,res6a
   complex(ki), dimension(3) :: verif
   real(ki) :: mass_sq_1,mass_sq_2,mass_sq_3
   !real(ki) :: mass_int_sq_1,mass_int_sq_2,mass_int_sq_3,mu2,mu02,lmu2
   complex(ki) :: mass_int_sq_1,mass_int_sq_2,mass_int_sq_3
   real(ki) :: mu2,mu02,lmu2
   integer :: choix,choix_kinem
+  complex(ki), dimension(0:2) :: res_olo
+  complex(ki) :: cp1,cp2,cp3
+  ! test
+  real(ki), dimension(2) :: tist0
+  real(ki), dimension(6) :: veruf
+  real(ki) :: s13
   !
   write (*,*) 'Choose from the following kinematics:'
   write (*,*) '1) one off-shell leg, no internal masses'
   write (*,*) '2) two off-shell legs, no internal masses'
   write (*,*) '3) three off-shell legs, no internal masses (finite)'
   write (*,*) '4) two off-shell legs, one internal mass (QL 3), '
   write (*,*) '5) one off-shell leg, one on-shell massive leg (one internal mass, QL 4)'
   write (*,*) '6) two on-shell massive legs (one internal mass, QL 5)'
   write (*,*) '7) one off-shell leg, two on-shell massive legs (two internal masses, QL 6)'
   read (*,*) choix_kinem
   !
   ! Opening of the error files
   !
   open(unit=19,file='error_3point.txt',status='unknown')
   !
   ! opening of the files containing the results
   !
   open(unit=17,file='test3point.txt',status='unknown')
   !
   ! These are the entries of the S matrix
   ! They are related to the cuts of the following diagram
   ! All the momenta are incoming : p1+p2+p3 = 0
   !
   !            |
   !            | p1
   !            |
   !           /\
   !          /  \
   !     (1) /    \ (3)
   !        /      \
   !       /--->----\
   !      /   (2)    \
   ! p2  /            \ p3
   !
   ! S(1,2) = p2^2
   ! S(2,3) = p3^2
   ! S(3,1) = p1^2
   !
   ! Allocates memory to store the set of initial propagators, the S matrix, 
   ! its inverse and the b coefficients.
   ! This call will allocate a derived type s_mat_p object.
   ! Includes calls to allocation_s and initializes the caching system
   !
   call initgolem95(3)
   !
   !
   if (choix_kinem == 1) then
     !
     mass_int_sq_1 = 0.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = 0.0_ki
     mass_sq_2 = 0.0_ki
     mass_sq_3 = -2.0_ki
     !
   else if (choix_kinem == 2) then
     !
     mass_int_sq_1 = 0.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = 0.0_ki
     mass_sq_2 = 10.0_ki
     mass_sq_3 = -60.0_ki
     !
   else if (choix_kinem == 3) then
     !
     mass_int_sq_1 = 0.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = -50.0_ki
     mass_sq_2 = 10.0_ki
     mass_sq_3 = -60.0_ki
     !
   ! case p1^2, p2^2 /= m1^2, internal line 1 massive (QL3)
   else if (choix_kinem == 4) then
     !
     mass_int_sq_1 = 20.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = -123.0_ki
     mass_sq_2 = -60.0_ki
     mass_sq_3 = 0.0_ki
     !
   ! case p1^2 = m1^2, p2^2 /= m1^2, internal line 1 massive (QL4)
   else if (choix_kinem == 5) then
     !
     mass_int_sq_1 = 5.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = mass_int_sq_1
     mass_sq_2 = 7.0_ki
     mass_sq_3 = 0.0_ki
     !
   ! case p1^2 = m1^2, p2^2 = m1^2, internal line 1 massive (QL5)
   else if (choix_kinem == 6) then
     !
     mass_int_sq_1 = 5.0_ki
     mass_int_sq_2 = 0._ki
     mass_int_sq_3 = 0.0_ki
     mass_sq_1 = mass_int_sq_1
     mass_sq_2 = mass_int_sq_1
     mass_sq_3 = 0.0_ki
     !
   ! case p2^2 = m1^2; p1^2 /= m1^2,m3^2,nonzero; p3^2=m3^2, internal lines 1,2 massive (QL6)
   else if (choix_kinem == 7) then
     !
-    mass_int_sq_1 = 9.0_ki
+    !mass_int_sq_1 = 9.0_ki
+    !mass_int_sq_2 = 0.0_ki
+    !mass_int_sq_3 = 3.0_ki
+    !mass_sq_1 = 25.0_ki
+    !mass_sq_2 = mass_int_sq_1
+    !mass_sq_3 = mass_int_sq_3
+    ! point de gosam
+  !s_mat(1,1) =  -59512.500000000000 
+  !s_mat(1,2) =  0.0000000000000000  
+  !s_mat(1,3) =  1755140.0110706163
+  !s_mat(2,1) =  0.0000000000000000  
+  !s_mat(2,2) =  0.0000000000000000  
+  !s_mat(2,3) =  0.0000000000000000   
+  !s_mat(3,1) =  1755140.0110706163
+  !s_mat(3,2) =  0.0000000000000000   
+  !s_mat(3,3) = -59512.500000000000 
+    !mass_int_sq_1 = 59512.500000000000_ki/2._ki
+    !mass_int_sq_2 = 0.0_ki
+    !mass_int_sq_3 = 59512.500000000000_ki/2._ki
+    !mass_sq_1 = -1.e-14_ki
+    !mass_sq_1 = -1.00001e-6_ki
+    !mass_sq_1 = -9.99999e-5_ki
+    !!mass_sq_1 = -6.000001000e-6_ki ! F
+    !mass_sq_1 = -6.000010000e-6_ki ! T
+    !mass_sq_1 = -6.005999000e-3_ki ! F
+    !mass_sq_1 = -6.006010000e-3_ki ! T
+    !mass_sq_1 = 0._ki
+    mass_int_sq_1 = 41904.461762487612_ki
     mass_int_sq_2 = 0.0_ki
-    mass_int_sq_3 = 3.0_ki
-    mass_sq_1 = 25.0_ki
+    mass_int_sq_3 = 88724.816017023972_ki
+    !mass_sq_1 = -6.5777591749792919E-002_ki
+    mass_sq_1 = -9.9E-012_ki
     mass_sq_2 = mass_int_sq_1
     mass_sq_3 = mass_int_sq_3
     !
+    !mass_sq_1 = -max(real(mass_int_sq_1,ki),real(mass_int_sq_3,ki))*1.e-6_ki - 1.e-8_ki
+    !mass_sq_1 = -6._ki*1.e-5_ki - 1.e-9_ki
+    !mass_sq_1 = (1755140.0110706163_ki*1.e+2_ki+mass_int_sq_1+mass_int_sq_3)
+    !mass_sq_1 = (1755140.0110706163_ki+mass_int_sq_1+mass_int_sq_3)
+    !
   ! case p2^2=m1^2; p1^2 /= m1^2,nonzero; p3^2=m1^2, internal lines 1,2 massive (QL6 with internal masses equal)
   else if (choix_kinem == 8) then
     !
     mass_int_sq_1 = 5.0_ki
     mass_int_sq_2 = 0.0_ki
     mass_int_sq_3 = mass_int_sq_1
     mass_sq_1 = 25.0_ki
     mass_sq_2 = mass_int_sq_1
     mass_sq_3 = mass_int_sq_3
     !
   else if (choix_kinem == 9) then
     !
-    mass_int_sq_1 = (7.6751408576965332_ki,0.0000000000000000_ki)
-    mass_int_sq_2 = (7.6751408576965332_ki,-0.14250832796096802_ki)
+    !mass_int_sq_1 = (7.6751408576965332_ki,0.0000000000000000_ki)
+    !mass_int_sq_2 = (8.6751408576965332_ki,-0.00000000000000000_ki)
+    !mass_int_sq_3 = (0.0000000000000000_ki,0.0000000000000000_ki)
+    !mass_sq_1 = 1.7548424530029297_ki
+    !mass_sq_2 = 2.e-3_ki
+    !mass_sq_3 = 1.7548424530029297_ki
+    mass_int_sq_2 = (0.0_ki,0.0000000000000000_ki)
+    !mass_int_sq_2 = (7.e-2_ki,-2.e-3_ki)
+    !mass_int_sq_2 = (14783.519004389145_ki,-2.e-3_ki)
+    mass_int_sq_1 = (34103.512211749876_ki,-2.e-3_ki)
+    !mass_int_sq_1 = (96757.361140280089_ki,-2.e-3_ki)
     mass_int_sq_3 = (0.0000000000000000_ki,0.0000000000000000_ki)
-    mass_sq_1 = 4.3248424530029297_ki
-    mass_sq_2 = 0._ki
-    mass_sq_2 = 1.e-9_ki
-    mass_sq_3 = -1.7544794082641602_ki
+    !mass_sq_1 = -1_ki
+    !mass_sq_1 = -32135.489570842983_ki
+    mass_sq_3 = -82900.877464665973_ki
+    !mass_sq_3 = 84153.449517642614_ki
+    !mass_sq_2 = 0._ki
+    mass_sq_2 = 1.e-4_ki
+    mass_sq_1 = 0._ki
+    !mass_sq_1 = 49585.537094286439_ki
+    !mass_sq_2 = -26521.820525048854_ki
+    !mass_sq_3 = -3872.6202490537107_ki
+    !mass_int_sq_1 = (99755.959009261715_ki,0.0000000000000000_ki)
+    !mass_int_sq_2 = (56682.470761127333_ki,0.0000000000000000_ki)
+    !mass_int_sq_3 = (96591.537549612491_ki,0.0000000000000000_ki)
+    !
     !
   end if
   !
   ! Definition of the S matrix
   !
   s_mat(1,1) = -2.0_ki*mass_int_sq_1
   s_mat(1,2) = mass_sq_2 - mass_int_sq_1 - mass_int_sq_2
   s_mat(1,3) = mass_sq_1 - mass_int_sq_1 - mass_int_sq_3
   !
   s_mat(2,1) = s_mat(1,2)
   s_mat(2,2) = -2.0_ki*mass_int_sq_2
   s_mat(2,3) = mass_sq_3 - mass_int_sq_2 - mass_int_sq_3
   !
   s_mat(3,1) = s_mat(1,3)
   s_mat(3,2) = s_mat(2,3)
   s_mat(3,3) = -2.0_ki*mass_int_sq_3
   !
   ! This call fills the internal array s_mat_r.
   ! It also assigns the integers in s_mat_p, which encode the positions
   ! of complex mass entries and zero mass entries. It includes call to init_invs
   !
   call preparesmatrix()
   !
   !
   write (*,*) 'Choose what the program should compute:'
   write (*,*) '0) scalar three-point function in n dimensions'
   write (*,*) '1) three-point function in n dimensions with one Feynman parameter'
   write (*,*) '2) three-point function in n dimensions with two Feynman parameters'
   write (*,*) '3) three-point function in n dimensions with three Feynman parameters'
   write (*,*) '4) scalar three-point function in n+2 dimensions'
   write (*,*) '5) three-point function in n+2 dimensions with one Feynman parameter'
   write (*,*) '6) test of the mu independence'
   read (*,*) choix
   !
   ! info for user
   if (choix == 0) then
    !
     write (*,*) 'calculating n-dim scalar 3-point fctn. with '
     !
   else if   (choix == 1) then
     !
     write (*,*) 'calculating n-dim rank one (z1) 3-point fctn. with'
     !
   else if   (choix == 2) then
     !
     write (*,*) 'calculating n-dim rank two (z1*z2) 3-point fctn. with'
     !
   else if   (choix == 3) then
     !
     write (*,*) 'calculating n-dim rank three (z1^2*z3) 3-point fctn. with'
     !
   else if   (choix == 4) then
     !
     write (*,*) 'calculating (n+2)-dim scalar 3-point fctn. with'
     !
  else if (choix == 5) then
     !
     write (*,*) 'calculating (n+2)-dim rank one (z2) 3-point fctn. with'
     !
   end if
   !
   if (choix_kinem == 1) then
     !
     write (*,*) 'one off-shell leg'
     !
   else if (choix_kinem == 2) then
     !
     write (*,*) 'two off-shell legs'
     !
   else if (choix_kinem == 3) then
     !
     write (*,*) 'three off-shell legs'
     !
   end if
   !
   write (*,*) 'the result has been written to the file test3point.txt'
   ! 
   ! start calculation    
   !
   ! To change the value of mu^2 (in GeV) (set to 1. by default)
   ! uncomment this line
   ! mu2_scale_par = 12._ki
   !
   ! store original mu^2
+  !mu2_scale_par = 29756.25_ki!
+  mu2_scale_par = 1._ki!
   mu02 = mu2_scale_par
   !
-  !
   ! In the following the integrals f3p_x have to be called with argument
   ! s_mat_p. This was defined with the call to preparesmatrix.
   !
   if (choix == 0) then
     !
     ! Result for the scalar integral in n dimension
     !
     ! both are working
     !
+    !tist0 = ge(1,2.e-13_ki,5._ki,3._ki,.false.)
+    !tist0 = ge(1,0._ki,5._ki,3._ki,.false.)
+    !write(*,*) 'test0 : ',tist0
+    !stop
     res6 = a30(s_null)
     verif = f3p(s_mat_p,b_ref)
+    cp1 = cmplx(mass_sq_1,0._ki,ki)
+    cp2 = cmplx(mass_sq_2,0._ki,ki)
+    cp3 = cmplx(mass_sq_3,0._ki,ki)
+    call olo_onshell(1.e-10_ki)
+    call olo_scale(sqrt(mu2_scale_par))
+    call olo_c0(res_olo,mass_sq_1,mass_sq_2,mass_sq_3,mass_int_sq_3,mass_int_sq_1,mass_int_sq_2)
     !
     ! the labels 1,2,3 correspond to Feynman parameters z1,z2,z3
   else if (choix == 1) then
     !
     ! Results for integrals in n dimensions with one Feynman parameter 
     ! in the numerator: z1
     !
     res6 = -a31(2,s_null)
     verif = f3p(s_mat_p,b_ref,2)
-    !~ res6 = -a31(3,s_null)
-    !~ verif = f3p(s_mat,b_ref,3)
+    !res6 = -a31(3,s_null)
+    !verif = f3p(s_mat_p,b_ref,3)
     !
   else if (choix == 2) then
     !
     ! Results for integrals in n dimensions with two Feynman parameters 
     ! in the numerator: z1*z2
     !
     res6 =  a32(1,2,s_null)
     verif = f3p(s_mat_p,b_ref,1,2)
     !~ res6 =  a32(2,2,s_null)
     !~ verif = f3p(s_mat,b_ref,2,2)
     !
   else if (choix == 3) then
     !
     ! Results for integrals in n dimensions with three Feynman parameters 
     ! at the numerator: z1^2*z3
     !
     res6 =  -a33(2,2,2,s_null)
     verif = f3p(s_mat_p,b_ref,2,2,2)
     !
   else if (choix == 4) then
     !
     ! Results for integrals in n+2 dimensions with no Feynman parameters 
     ! at the numerator: 
     !
     res6 =  -2.0_ki*b32(s_null)
     verif = czero  ! complex zero. defined in module constante.
     verif(2:3) = f3p_np2(s_mat_p,b_ref)
+    s13 = mass_sq_1 - real(mass_int_sq_1,ki) - real(mass_int_sq_3,ki)
+    veruf = f3p1m_2mi(s13,real(mass_int_sq_1,ki),real(mass_int_sq_3,ki),2,2,2) 
+  write (6,*) 'Check with f3p1m_2mi function:'
+  write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') veruf(1),veruf(2)
+  write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') veruf(3),veruf(4)
+  write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') veruf(5),veruf(6)
     ! 
   else if (choix == 5) then
     !
     ! Results for integrals in n+2 dimensions with one Feynman parameters 
     ! at the numerator: z2
     !
     res6 =  2.0_ki*b33(2,s_null)
     verif = czero
     verif(2:3) = f3p_np2(s_mat_p,b_ref,2)
     !
   else if (choix == 6) then
     !
     ! by default, mu2_scale_par = 1._ki
     ! take scalar triangle as example
     res6=A30(s_null)
     ! we have to reset the cache in order that the new value
     ! of mu2_scale_par will be effective. A call to preparesmatrix
     ! is sufficient. 
     !
     call preparesmatrix()
     !
     ! we change the value of mu^2
     !
     mu2 = 34._ki
     lmu2 = log(mu2/mu2_scale_par)
     mu2_scale_par = mu2
     res6a =  A30(s_null)
  !
   end if
   !
   write (17,*) 'The kinematics is:'
   write (17,*) ''
   write (17,*) '             |             '
   write (17,*) '             | p1        '
   write (17,*) '             |             '
   write (17,*) '            /\            '
   write (17,*) '           /  \           '
   write (17,*) '     (1) /     \ (3)     '
   write (17,*) '        /        \         '
   write (17,*) '       /--->----\       '
   write (17,*) '      /   (2)      \      '
   write (17,*) 'p2 /               \ p3'
   write (17,*) ''
   write (17,*) 'p1+p2+p3 = 0'
   write (17,*) ''
   write (17,*) '(p1)^2 =',mass_sq_1
   write (17,*) '(p2)^2 =',mass_sq_2
   write (17,*) '(p3)^2 =',mass_sq_3
   write (17,*) 'm1^2 =',mass_int_sq_1
   write (17,*) 'm2^2 =',mass_int_sq_2
   write (17,*) 'm3^2 =',mass_int_sq_3
   write (17,*) 'mu^2 =',mu2_scale_par
   write (17,*) ''
   write (17,*) 'defining I_N^n= mu^(4-n) \int d^n k/(i*Pi^(n/2))*func(k,p_i)'
   write (17,*) '= r_Gam *(P2/eps^2+P1/eps+P0),'
   write (17,*) 'n = 4-2*eps,'
   write (17,*) 'r_Gam = Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)'
   write (17,*) 'the program gives numbers for P2,P1,P0'
   write (17,*) ''
     !
   write (17,*) 'result='
   write (17,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%a,ki),aimag(res6%a)
   write (17,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%b,ki),aimag(res6%b)
   write (17,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
   write (17,*) ''
   write (6,*) 'result='
   write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%a,ki),aimag(res6%a)
   write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%b,ki),aimag(res6%b)
   write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+  write (6,*) 'result olo='
+  write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res_olo(2),ki),aimag(res_olo(2))
+  write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res_olo(1),ki),aimag(res_olo(1))
+  write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res_olo(0),ki),aimag(res_olo(0))
   !
   if ( choix < 6 ) then
   !
   write (6,*) 'Check with dedicated function:'
   write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(1)
   write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(2)
   write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(3)
   write (17,*) 'Check with dedicated function:'
   write (17,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(1)
   write (17,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(2)
   write (17,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(3)
   !
   else if ( choix ==6 ) then
   !
     write (17,*) 'The preceding result has been computed with mu^2=',mu02
     write (17,*) ' '
     write (17,*) 'Now setting by hand mu^2=',mu2
     write (17,*) 'and expanding (',mu2,'/',mu02,')^epsilon around epsilon=0'
     write (17,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%a,ki),aimag(res6%a)
     write (17,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%b,ki)+ & 
          &real(res6%a,ki)*lmu2,aimag(res6%b)+aimag(res6%a)*lmu2
     write (17,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') &
          &real(res6%c,ki) + lmu2*real(res6%b,ki) + lmu2**2*real(res6%a,ki)/2._ki,&
          &aimag(res6%c) + lmu2*aimag(res6%b) + lmu2**2*aimag(res6%a)/2._ki
     write (17,*) ''
     write (17,*) 'check with direct calculation using the global variable mu2_scale_par=',mu2
     write (17,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%a,ki),aimag(res6a%a)
     write (17,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%b,ki),aimag(res6a%b)
     write (17,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%c,ki),aimag(res6a%c)
     ! ***********************************
     write (6,*) ' '
     write (6,*) 'The preceding result has been computed with mu^2=',mu02
     write (6,*) 'Now setting by hand mu^2=',mu2
     write (6,*) 'and expanding (',mu2,'/',mu02,')^epsilon around epsilon=0'
     write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%a,ki),aimag(res6%a)
     write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%b,ki) + &
          & real(res6%a,ki)*lmu2, aimag(res6%b)+aimag(res6%a)*lmu2
     write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') &
     &real(res6%c,ki) + lmu2*real(res6%b,ki) + lmu2**2*real(res6%a,ki)/2._ki,&
     &aimag(res6%c) + lmu2*aimag(res6%b) + lmu2**2*aimag(res6%a)/2._ki
     !
     write (6,*) ''
     write (6,*) 'check with direct calculation using the global variable mu2_scale_par=',mu2
     write (6,'("  1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%a,ki),aimag(res6a%a)
     write (6,'("+ 1/epsilon   * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%b,ki),aimag(res6a%b)
     write (6,'("+ 1           * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6a%c,ki),aimag(res6a%c)
     !
     write (6,*) ' '
   !
   else 
   !
   write (6,*) 'invalid choice, option number must be < 7'
   !
   endif
   ! routine to free the cache and allocated memory
   !
   call exitgolem95()
   !
   close(17)
   close(19)
   !
 end program main
 !
 !
Index: 95/branches/golem95_without_olo_cmake/demos/CMakeLists.txt.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/CMakeLists.txt.in	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/demos/CMakeLists.txt.in	(revision 170)
@@ -1,23 +1,23 @@
 cmake_minimum_required(VERSION 2.8)
 project(TestGolem)
 enable_language(Fortran)
 
-set(demo_programs demo_3point demo_4point demo_5point demo_6point demo_4photon demo_a55_dets_sing demo_cmplx_masses demo_detg SusyLandau)
+set(demo_programs demo_3point demo_4point demo_5point demo_6point demo_4photon demo_detg_3p demo_a55_dets_sing demo_cmplx_masses demo_detg SusyLandau)
 
 set(golemlib "-L@CMAKE_INSTALL_PREFIX@/lib -lgolem -lavh_olo")
 
 include_directories(@CMAKE_INSTALL_PREFIX@/include)
 
 # the targets demo_tens_rec and demo_LT are built outside from this loop
 foreach(name_program ${demo_programs})
 add_executable(${name_program} "${name_program}.f90")
 target_link_libraries(${name_program} ${golemlib})
 endforeach(name_program)
 
 add_executable(demo_tens_rec demo_tens_mod.f90 demo_tens_rec.f90)
 target_link_libraries(demo_tens_rec ${golemlib})
 
 add_executable(demo_LT demo_LT.f)
 target_link_libraries(demo_LT ${golemlib})
 
 
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/CMakeLists.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/CMakeLists.txt	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/CMakeLists.txt	(revision 170)
@@ -1,11 +1,10 @@
 include_directories(${my_include})
-#include_directories(${MY_INCLUDE}/module ${MY_INCLUDE}/kinematic ${MY_INCLUDE}/numerical ${MY_INCLUDE}/integrals/three_point ${CMAKE_SOURCE_DIR}/avh_olo-2.2.1)
 file(
     GLOB
     source_files
     *.f90
 )
 
 add_library(four_point OBJECT ${source_files})
-add_dependencies(four_point module kinematic numerical three_point)
+add_dependencies(four_point module kinematic numerical three_point avh_olo_obj)
 
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/CMakeLists.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/CMakeLists.txt	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/CMakeLists.txt	(revision 170)
@@ -1,11 +1,10 @@
-#include_directories(${MY_INCLUDE}/module ${MY_INCLUDE}/kinematic ${MY_INCLUDE}/integrals/one_point ${MY_INCLUDE}/#integrals/two_point ${MY_INCLUDE}/integrals/three_point ${MY_INCLUDE}/integrals/four_point)
 include_directories(${my_include})
 file(
     GLOB
     source_files
     *.f90
 )
 
 add_library(form_factor OBJECT ${source_files})
 add_dependencies(form_factor module kinematic one_point two_point three_point four_point)
 
Index: 95/branches/golem95_without_olo_cmake/src/module/CMakeLists.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/CMakeLists.txt	(revision 169)
+++ 95/branches/golem95_without_olo_cmake/src/module/CMakeLists.txt	(revision 170)
@@ -1,11 +1,9 @@
-#include_directories(${GOLEM_SOURCE_DIR}/avh_olo-2.2.1)
-#include_directories(${CMAKE_SOURCE_DIR}/avh_olo-2.2.1)
 include_directories(${my_include})
 file(
     GLOB
     source_files
     *.f90
 )
 
 add_library(module OBJECT ${source_files})
-add_dependencies(module avh_olo)
+add_dependencies(module avh_olo_obj)